diff --git a/Mage.Client/src/main/java/mage/client/constants/Constants.java b/Mage.Client/src/main/java/mage/client/constants/Constants.java index 1ea8c4a1e9d..44015927543 100644 --- a/Mage.Client/src/main/java/mage/client/constants/Constants.java +++ b/Mage.Client/src/main/java/mage/client/constants/Constants.java @@ -96,12 +96,12 @@ public final class Constants { } public enum SortBy { - + CARD_TYPE("Card Type"), CASTING_COST("Casting Cost"), - RARITY("Rarity"), COLOR("Color"), COLOR_IDENTITY("Color Identity"), NAME("Name"), + RARITY("Rarity"), UNSORTED("Unsorted"); private final String text; @@ -117,6 +117,8 @@ public final class Constants { public static SortBy getByString(String text) { switch (text) { + case "Card Type": + return CARD_TYPE; case "Casting Cost": return CASTING_COST; case "Rarity": diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java index 7c226c282c9..66b6c7a90b5 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java @@ -135,6 +135,15 @@ public class DeckArea extends javax.swing.JPanel { hiddenCards.clear(); loadDeck(lastDeck, lastBigCard); } + + @Override + public void duplicateCards(Collection cards) { + sideboardList.deselectAll(); + for (CardView card : cards) { + CardView newCard = new CardView(card); + deckList.addCardView(newCard, true); + } + } }); sideboardList.addDragCardGridListener(new DragCardGrid.DragCardGridListener() { @Override @@ -156,6 +165,15 @@ public class DeckArea extends javax.swing.JPanel { hiddenCards.clear(); loadDeck(lastDeck, lastBigCard); } + + @Override + public void duplicateCards(Collection cards) { + deckList.deselectAll(); + for (CardView card : cards) { + CardView newCard = new CardView(card); + sideboardList.addCardView(newCard, true); + } + } }); } @@ -223,9 +241,8 @@ public class DeckArea extends javax.swing.JPanel { } public void setDeckEditorMode(DeckEditorMode mode) { - // Maybe we need this? Right now it isn't needed. Will add if it is. - //this.deckList.setDeckEditorMode(mode); - //this.sideboardList.setDeckEditorMode(mode); + this.deckList.setDeckEditorMode(mode); + this.sideboardList.setDeckEditorMode(mode); } private Set filterHidden(Set cards) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportFromClipboardDialog.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportFromClipboardDialog.java index ebf8bb796ff..c082e75bd2f 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportFromClipboardDialog.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckImportFromClipboardDialog.java @@ -1,12 +1,12 @@ package mage.client.deckeditor; -import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import javax.swing.*; public class DeckImportFromClipboardDialog extends JDialog { @@ -24,11 +24,13 @@ public class DeckImportFromClipboardDialog extends JDialog { getRootPane().setDefaultButton(buttonOK); buttonOK.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { onOK(); } }); buttonCancel.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { onCancel(); } @@ -36,6 +38,7 @@ public class DeckImportFromClipboardDialog extends JDialog { setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { + @Override public void windowClosing(WindowEvent e) { onCancel(); } @@ -43,6 +46,7 @@ public class DeckImportFromClipboardDialog extends JDialog { // Close on "ESC" contentPane.registerKeyboardAction(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { onCancel(); } @@ -89,8 +93,9 @@ public class DeckImportFromClipboardDialog extends JDialog { "Import from Clipboard", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12), java.awt.Color.BLACK), contentPane.getBorder())); - + contentPane.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + @Override public void propertyChange(java.beans.PropertyChangeEvent e) { if ("border".equals(e.getPropertyName())) { throw new RuntimeException(); @@ -99,6 +104,7 @@ public class DeckImportFromClipboardDialog extends JDialog { }); contentPane.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + @Override public void propertyChange(java.beans.PropertyChangeEvent e) { if ("border".equals(e.getPropertyName())) { throw new RuntimeException(); diff --git a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java index 4b628f2465c..8676649b3dc 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java @@ -9,6 +9,7 @@ import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -33,7 +34,6 @@ import mage.client.components.MageComponents; import mage.client.dialog.PreferencesDialog; import mage.client.plugins.impl.Plugins; import mage.client.util.DefaultActionCallback; -import mage.client.util.ImageHelper; import mage.client.util.gui.ArrowBuilder; import mage.client.util.gui.ArrowUtil; import mage.client.util.gui.GuiDisplayUtil; @@ -80,6 +80,7 @@ public class MageActionCallback implements ActionCallback { CLOSED, NORMAL, ROTATED } + private Date enlargeredViewOpened; private volatile EnlargedWindowState enlargedWindowState = EnlargedWindowState.CLOSED; //private volatile boolean enlargedImageWindowOpen = false; // shows the alternative card the normal card or the alternative card (copy source, other flip side, other transformed side) @@ -115,25 +116,8 @@ public class MageActionCallback implements ActionCallback { @Override public void mouseEntered(MouseEvent e, final TransferData data) { - hideTooltipPopup(); - cancelTimeout(); - - this.tooltipCard = data.card; this.popupData = data; - - Component parentComponent = SwingUtilities.getRoot(data.component); - Point parentPoint = parentComponent.getLocationOnScreen(); - - if (data.locationOnScreen == null) { - data.locationOnScreen = data.component.getLocationOnScreen(); - } - - ArrowUtil.drawArrowsForTargets(data, parentPoint); - ArrowUtil.drawArrowsForSource(data, parentPoint); - ArrowUtil.drawArrowsForPairedCards(data, parentPoint); - ArrowUtil.drawArrowsForEnchantPlayers(data, parentPoint); - - showTooltipPopup(data, parentComponent, parentPoint); + handleOverNewView(data); } private void showTooltipPopup(final TransferData data, final Component parentComponent, final Point parentPoint) { @@ -170,7 +154,11 @@ public class MageActionCallback implements ActionCallback { public void run() { ThreadUtils.sleep(tooltipDelay); - if (tooltipCard == null || !tooltipCard.equals(data.card) || SessionHandler.getSession() == null || !popupTextWindowOpen || !enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { + if (tooltipCard == null + || !tooltipCard.equals(data.card) + || SessionHandler.getSession() == null + || !popupTextWindowOpen + || !enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { return; } @@ -192,7 +180,8 @@ public class MageActionCallback implements ActionCallback { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - if (!popupTextWindowOpen || !enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { + if (!popupTextWindowOpen + || !enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { return; } if (data.locationOnScreen == null) { @@ -282,6 +271,17 @@ public class MageActionCallback implements ActionCallback { @Override public void mouseMoved(MouseEvent e, TransferData transferData) { + if (!Plugins.getInstance().isCardPluginLoaded()) { + return; + } + if (!popupData.card.equals(transferData.card)) { + this.popupData = transferData; + handleOverNewView(transferData); + + } + if (bigCard == null) { + return; + } handlePopup(transferData); } @@ -376,16 +376,28 @@ public class MageActionCallback implements ActionCallback { } } - private void handlePopup(TransferData transferData) { - if (!Plugins.getInstance().isCardPluginLoaded()) { - return; - } - if (bigCard == null) { - return; + private void handleOverNewView(TransferData data) { + hideTooltipPopup(); + cancelTimeout(); + Component parentComponent = SwingUtilities.getRoot(data.component); + Point parentPoint = parentComponent.getLocationOnScreen(); + + if (data.locationOnScreen == null) { + data.locationOnScreen = data.component.getLocationOnScreen(); } + ArrowUtil.drawArrowsForTargets(data, parentPoint); + ArrowUtil.drawArrowsForSource(data, parentPoint); + ArrowUtil.drawArrowsForPairedCards(data, parentPoint); + ArrowUtil.drawArrowsForEnchantPlayers(data, parentPoint); + tooltipCard = data.card; + showTooltipPopup(data, parentComponent, parentPoint); + } + + private void handlePopup(TransferData transferData) { MageCard mageCard = (MageCard) transferData.component; - if (!popupTextWindowOpen || mageCard.getOriginal().getId() != bigCard.getCardId()) { + if (!popupTextWindowOpen + || mageCard.getOriginal().getId() != bigCard.getCardId()) { if (bigCard.getWidth() > 0) { synchronized (MageActionCallback.class) { if (!popupTextWindowOpen || mageCard.getOriginal().getId() != bigCard.getCardId()) { @@ -401,6 +413,7 @@ public class MageActionCallback implements ActionCallback { popupTextWindowOpen = true; } if (!enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { + cancelTimeout(); displayEnlargedCard(mageCard.getOriginal(), transferData); } } @@ -455,12 +468,18 @@ public class MageActionCallback implements ActionCallback { int notches = e.getWheelRotation(); if (!enlargedWindowState.equals(EnlargedWindowState.CLOSED)) { // same move direction will be ignored, opposite direction closes the enlarged window - if (enlargeMode.equals(EnlargeMode.NORMAL)) { + if (new Date().getTime() - enlargeredViewOpened.getTime() > 1000) { + // if the opening is back more than 1 seconds close anyway + hideEnlargedCard(); + handleOverNewView(transferData); + } else if (enlargeMode.equals(EnlargeMode.NORMAL)) { if (notches > 0) { hideEnlargedCard(); + handleOverNewView(transferData); } } else if (notches < 0) { hideEnlargedCard(); + handleOverNewView(transferData); } return; } @@ -516,7 +535,7 @@ public class MageActionCallback implements ActionCallback { } private void displayEnlargedCard(final CardView cardView, final TransferData transferData) { - ThreadUtils.threadPool2.submit(new Runnable() { + ThreadUtils.threadPool3.submit(new Runnable() { @Override public void run() { if (cardView == null) { @@ -608,6 +627,7 @@ public class MageActionCallback implements ActionCallback { bigCard.hideTextComponent(); bigCard.addJXPanel(mageCard.getOriginal().getId(), panel); } + enlargeredViewOpened = new Date(); } private synchronized void startHideTimeout() { diff --git a/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java b/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java new file mode 100644 index 00000000000..ccec9247657 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.client.util; + +import java.util.Comparator; +import mage.view.CardView; + +/** + * + * @author LevelX2 + */ +public class CardViewCardTypeComparator implements Comparator { + + @Override + public int compare(CardView o1, CardView o2) { + return o1.getCardTypes().toString().compareTo(o2.getCardTypes().toString()); + } + +} diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index 738f585acbd..9acd9c8228e 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -320,6 +320,8 @@ public abstract class CardPanel extends MagePermanent implements MouseListener, /** * Overridden by different card rendering styles + * + * @param g */ protected abstract void paintCard(Graphics2D g); @@ -722,7 +724,7 @@ public abstract class CardPanel extends MagePermanent implements MouseListener, sb.append("\n").append(card.getLoyalty()); } if (card.getRules() == null) { - card.overrideRules(new ArrayList()); + card.overrideRules(new ArrayList<>()); } for (String rule : card.getRules()) { sb.append("\n").append(rule); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/Downloader.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/Downloader.java index ca5160a71db..92759be7ec1 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/Downloader.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/Downloader.java @@ -153,6 +153,10 @@ public class Downloader extends AbstractLaternaBean implements Disposable { } finally { try { os.close(); + if (!dst.isValid()) { + dst.delete(); + logger.warn("Resource not found " + job.getName() + " from " + job.getSource().toString()); + } } catch (IOException ex) { logger.warn("While closing", ex); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 69769921283..35df3572430 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -2,8 +2,12 @@ package org.mage.plugins.card.dl.sources; import java.io.File; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import mage.cards.ExpansionSet; +import mage.cards.Sets; import org.mage.plugins.card.dl.DownloadJob; import static org.mage.plugins.card.dl.DownloadJob.fromURL; import static org.mage.plugins.card.dl.DownloadJob.toFile; @@ -14,90 +18,97 @@ public class GathererSets implements Iterable { private static final File DEFAULT_OUT_DIR = new File("plugins" + File.separator + "images" + SETS_PATH); private static File outDir = DEFAULT_OUT_DIR; - private static final String[] symbols = {"10E", "9ED", "8ED", "7ED", "6ED", "5ED", "4ED", "3ED", "2ED", "LEB", "LEA", - "HOP", - "ARN", "ATQ", "LEG", "DRK", "FEM", "HML", - "ICE", "ALL", "CSP", - "MIR", "VIS", "WTH", - "TMP", "STH", "EXO", - "USG", "ULG", "UDS", - "MMQ", "NMS", "PCY", - "INV", "PLS", "APC", - "ODY", "TOR", "JUD", - "ONS", "LGN", "SCG", - "MRD", "DST", "5DN", - "CHK", "BOK", "SOK", - "RAV", "GPT", "DIS", - "TSP", "TSB", "PLC", "FUT", - "LRW", "MOR", - "SHM", "EVE", - "MED", "ME2", "ME3", "ME4", - "POR", "PO2", "PTK", - "ARC", - "W16"}; + private static final String[] symbols = {"10E", "9ED", "8ED", "7ED", "6ED", "5ED", "4ED", "3ED", "2ED", "LEB", "LEA", + "HOP", + "ARN", "ATQ", "LEG", "DRK", "FEM", "HML", + "ICE", "ALL", "CSP", + "MIR", "VIS", "WTH", + "TMP", "STH", "EXO", + "USG", "ULG", "UDS", + "MMQ", "NEM", "PCY", + "INV", "PLS", "APC", + "ODY", "TOR", "JUD", + "ONS", "LGN", "SCG", + "MRD", "DST", "5DN", + "CHK", "BOK", "SOK", + "RAV", "GPT", "DIS", + "TSP", "TSB", "PLC", "FUT", + "LRW", "MOR", + "SHM", "EVE", + "MED", "ME2", "ME3", "ME4", + "POR", "PO2", "PTK", + "ARC", "DD3EVG", + "W16"}; private static final String[] withMythics = {"M10", "M11", "M12", "M13", "M14", "M15", "ORI", - "ANB", - "DDF", "DDG", "DDH", "DDI", "DDJ", "DDK", "DDL", "DDM", "DDN", - "DD3", "DD3B", "DDO", "DDP", "DDQ", "DDR", "DDS", - "FVD", "FVE", "FVL", "FVR", - "V12", "V13", "V14", "V15", "V16", - "ALA", "CON", "ARB", - "ZEN", "WWK", "ROE", - "SOM", "MBS", "NPH", - "CMD", "C13", "C14", "C15", "C16", "CMA", - "PC2", "PCA", - "ISD", "DKA", "AVR", - "RTR", "GTC", "DGM", - "MMA", "MM2", "EMA", "MM3", - "THS", "BNG", "JOU", - "CNS", "CN2", - "VMA", "TPR", - "KTK", "FRF", "DTK", - "BFZ", "EXP", "OGW", - "SOI", "EMN", - "KLD", "MPS", "AER", - "AKH", "HOU" - }; + "ANB", + "DDF", "DDG", "DDH", "DDI", "DDJ", "DDK", "DDL", "DDM", "DDN", + "DD3DVD", "DD3GLV", "DD3JVC", "DDO", "DDP", "DDQ", "DDR", "DDS", + "ALA", "CON", "ARB", + "ZEN", "WWK", "ROE", + "SOM", "MBS", "NPH", + "CMD", "C13", "C14", "C15", "C16", "CMA", + "PC2", "PCA", + "ISD", "DKA", "AVR", + "RTR", "GTC", "DGM", + "MMA", "MM2", "EMA", "MM3", + "THS", "BNG", "JOU", + "CNS", "CN2", + "VMA", "TPR", + "KTK", "FRF", "DTK", + "BFZ", "OGW", + "SOI", "EMN", + "KLD", "MPS", "AER", + "AKH", "HOU" + }; + + private static final String[] onlyMythics = { + "DRB", "V09", "V12", "V12", "V13", "V14", "V15", "V16", "EXP" + }; + private static final HashMap symbolsReplacements = new HashMap<>(); static { + symbolsReplacements.put("2ED", "2U"); + symbolsReplacements.put("3ED", "3E"); + symbolsReplacements.put("4ED", "4E"); + symbolsReplacements.put("5ED", "5E"); + symbolsReplacements.put("6ED", "6E"); + symbolsReplacements.put("7ED", "7E"); + symbolsReplacements.put("ALL", "AL"); + symbolsReplacements.put("APC", "AP"); symbolsReplacements.put("ARN", "AN"); symbolsReplacements.put("ATQ", "AQ"); - symbolsReplacements.put("LEG", "LE"); + symbolsReplacements.put("CMA", "CM1"); + symbolsReplacements.put("DD3DVD", "DD3_DVD"); + symbolsReplacements.put("DD3EVG", "DD3_EVG"); + symbolsReplacements.put("DD3GLV", "DD3_GLV"); + symbolsReplacements.put("DD3JVC", "DD3_JVC"); symbolsReplacements.put("DRK", "DK"); + symbolsReplacements.put("EXO", "EX"); symbolsReplacements.put("FEM", "FE"); symbolsReplacements.put("HML", "HM"); symbolsReplacements.put("ICE", "IA"); - symbolsReplacements.put("ALL", "AL"); - symbolsReplacements.put("APC", "AP"); - symbolsReplacements.put("TMP", "TE"); symbolsReplacements.put("INV", "IN"); + symbolsReplacements.put("LEA", "1E"); + symbolsReplacements.put("LEB", "2E"); + symbolsReplacements.put("LEG", "LE"); + symbolsReplacements.put("MIR", "MI"); + symbolsReplacements.put("MMQ", "MM"); + symbolsReplacements.put("NEM", "NE"); + symbolsReplacements.put("ODY", "OD"); + symbolsReplacements.put("PCY", "PR"); symbolsReplacements.put("PLS", "PS"); - symbolsReplacements.put("WTH", "WL"); + symbolsReplacements.put("POR", "PO"); + symbolsReplacements.put("PO2", "P2"); + symbolsReplacements.put("PTK", "PK"); + symbolsReplacements.put("STH", "ST"); + symbolsReplacements.put("TMP", "TE"); + symbolsReplacements.put("UDS", "CG"); symbolsReplacements.put("ULG", "GU"); symbolsReplacements.put("USG", "UZ"); - symbolsReplacements.put("UDS", "CG"); - symbolsReplacements.put("ODY", "OD"); - symbolsReplacements.put("MMQ", "MM"); - symbolsReplacements.put("NMS", "NE"); - symbolsReplacements.put("PCY", "PR"); - symbolsReplacements.put("STH", "ST"); - symbolsReplacements.put("EXO", "EX"); symbolsReplacements.put("VIS", "VI"); - symbolsReplacements.put("MIR", "MI"); - symbolsReplacements.put("7ED", "7E"); - symbolsReplacements.put("6ED", "6E"); - symbolsReplacements.put("5ED", "5E"); - symbolsReplacements.put("4ED", "4E"); - symbolsReplacements.put("3ED", "3E"); - symbolsReplacements.put("2ED", "2U"); - symbolsReplacements.put("LEB", "2E"); - symbolsReplacements.put("LEA", "1E"); - symbolsReplacements.put("DD3A", "DD3"); - symbolsReplacements.put("DD3B", "DD3"); - symbolsReplacements.put("DD3C", "DD3"); - symbolsReplacements.put("DD3D", "DD3"); + symbolsReplacements.put("WTH", "WL"); } public GathererSets(String path) { @@ -110,17 +121,33 @@ public class GathererSets implements Iterable { @Override public Iterator iterator() { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + c.add(Calendar.DATE, -14); + Date compareDate = c.getTime(); ArrayList jobs = new ArrayList<>(); for (String symbol : symbols) { - jobs.add(generateDownloadJob(symbol, "C")); - jobs.add(generateDownloadJob(symbol, "U")); - jobs.add(generateDownloadJob(symbol, "R")); + ExpansionSet exp = Sets.findSet(symbol); + if (exp != null && exp.getReleaseDate().before(compareDate)) { + jobs.add(generateDownloadJob(symbol, "C")); + jobs.add(generateDownloadJob(symbol, "U")); + jobs.add(generateDownloadJob(symbol, "R")); + } } for (String symbol : withMythics) { - jobs.add(generateDownloadJob(symbol, "C")); - jobs.add(generateDownloadJob(symbol, "U")); - jobs.add(generateDownloadJob(symbol, "R")); - jobs.add(generateDownloadJob(symbol, "M")); + ExpansionSet exp = Sets.findSet(symbol); + if (exp != null && exp.getReleaseDate().before(compareDate)) { + jobs.add(generateDownloadJob(symbol, "C")); + jobs.add(generateDownloadJob(symbol, "U")); + jobs.add(generateDownloadJob(symbol, "R")); + jobs.add(generateDownloadJob(symbol, "M")); + } + } + for (String symbol : onlyMythics) { + ExpansionSet exp = Sets.findSet(symbol); + if (exp != null && exp.getReleaseDate().before(compareDate)) { + jobs.add(generateDownloadJob(symbol, "M")); + } } return jobs.iterator(); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index 1e93e6d6f2c..3d18772b309 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -28,12 +28,9 @@ package org.mage.plugins.card.dl.sources; import java.io.IOException; -import java.net.URL; import java.util.HashMap; -import java.util.logging.Level; import org.apache.log4j.Logger; import org.mage.plugins.card.images.CardDownloadData; -import org.mage.plugins.card.images.DownloadPictures; /** * @@ -54,7 +51,7 @@ public class GrabbagImageSource implements CardImageSource { @Override public String getSourceName() { - return "http://magiccards.info/scans/en/" ; + return "http://magiccards.info/scans/en/"; } @Override @@ -67,9 +64,9 @@ public class GrabbagImageSource implements CardImageSource { if (copyUrlToImage == null) { setupLinks(); } - try { + try { Thread.sleep(2000); - } catch (InterruptedException ex) { + } catch (InterruptedException ex) { } for (String key : copyUrlToImageDone.keySet()) { @@ -114,29 +111,29 @@ public class GrabbagImageSource implements CardImageSource { if (copyUrlToImage != null) { return; } - copyUrlToImage = new HashMap(); - copyImageToUrl = new HashMap(); - copyUrlToImageDone = new HashMap(); + copyUrlToImage = new HashMap<>(); + copyImageToUrl = new HashMap<>(); + copyUrlToImageDone = new HashMap<>(); //http://anonymouse.org/cgi-bin/anon-www.cgi/http://magiccards.info/scans/en/arena/42.jpg copyUrlToImage.put("apac/1.jpg", "APAC.zip/APAC/Forest 3.full.jpg"); - copyUrlToImage.put("apac/10.jpg", "APAC.zip/APAC/Swamp.5.full.jpg"); + copyUrlToImage.put("apac/10.jpg", "APAC.zip/APAC/Swamp.5.full.jpg"); copyUrlToImage.put("apac/11.jpg", "APAC.zip/APAC/Forest 2.full.jpg"); - copyUrlToImage.put("apac/12.jpg", "APAC.zip/APAC/Island.7.full.jpg"); - copyUrlToImage.put("apac/13.jpg", "APAC.zip/APAC/Mountain.8.full.jpg"); - copyUrlToImage.put("apac/14.jpg", "APAC.zip/APAC/Plains.4.full.jpg"); + copyUrlToImage.put("apac/12.jpg", "APAC.zip/APAC/Island.7.full.jpg"); + copyUrlToImage.put("apac/13.jpg", "APAC.zip/APAC/Mountain.8.full.jpg"); + copyUrlToImage.put("apac/14.jpg", "APAC.zip/APAC/Plains.4.full.jpg"); copyUrlToImage.put("apac/15.jpg", "APAC.zip/APAC/Swamp 2.full.jpg"); copyUrlToImage.put("apac/15.jpg", "APAC.zip/APAC/Swamp.15.full.jpg"); copyUrlToImage.put("apac/2.jpg", "APAC.zip/APAC/Island 2.full.jpg"); copyUrlToImage.put("apac/2.jpg", "APAC.zip/APAC/Island.2.full.jpg"); - copyUrlToImage.put("apac/3.jpg", "APAC.zip/APAC/Mountain.3.full.jpg"); + copyUrlToImage.put("apac/3.jpg", "APAC.zip/APAC/Mountain.3.full.jpg"); copyUrlToImage.put("apac/4.jpg", "APAC.zip/APAC/Plains 2.full.jpg"); copyUrlToImage.put("apac/4.jpg", "APAC.zip/APAC/Plains.9.full.jpg"); - copyUrlToImage.put("apac/5.jpg", "APAC.zip/APAC/Swamp.10.full.jpg"); + copyUrlToImage.put("apac/5.jpg", "APAC.zip/APAC/Swamp.10.full.jpg"); copyUrlToImage.put("apac/6.jpg", "APAC.zip/APAC/Forest 1.full.jpg"); - copyUrlToImage.put("apac/7.jpg", "APAC.zip/APAC/Island.12.full.jpg"); - copyUrlToImage.put("apac/8.jpg", "APAC.zip/APAC/Mountain.13.full.jpg"); - copyUrlToImage.put("apac/9.jpg", "APAC.zip/APAC/Plains.14.full.jpg"); + copyUrlToImage.put("apac/7.jpg", "APAC.zip/APAC/Island.12.full.jpg"); + copyUrlToImage.put("apac/8.jpg", "APAC.zip/APAC/Mountain.13.full.jpg"); + copyUrlToImage.put("apac/9.jpg", "APAC.zip/APAC/Plains.14.full.jpg"); copyUrlToImage.put("arena/1.jpg", "ARENA.zip/ARENA/Plains 8.full.jpg"); copyUrlToImage.put("arena/1.jpg", "ARENA.zip/ARENA/Plains.1.full.jpg"); copyUrlToImage.put("arena/10.jpg", "ARENA.zip/ARENA/Swamp 8.full.jpg"); @@ -156,25 +153,25 @@ public class GrabbagImageSource implements CardImageSource { copyUrlToImage.put("arena/20.jpg", "ARENA.zip/ARENA/Pillage.full.jpg"); copyUrlToImage.put("arena/21.jpg", "ARENA.zip/ARENA/Enlightened Tutor.full.jpg"); copyUrlToImage.put("arena/22.jpg", "ARENA.zip/ARENA/Stupor.full.jpg"); - copyUrlToImage.put("arena/23.jpg", "ARENA.zip/ARENA/Plains.75.full.jpg"); - copyUrlToImage.put("arena/24.jpg", "ARENA.zip/ARENA/Island.9.full.jpg"); - copyUrlToImage.put("arena/25.jpg", "ARENA.zip/ARENA/Swamp.77.full.jpg"); - copyUrlToImage.put("arena/26.jpg", "ARENA.zip/ARENA/Mountain.70.full.jpg"); + copyUrlToImage.put("arena/23.jpg", "ARENA.zip/ARENA/Plains.75.full.jpg"); + copyUrlToImage.put("arena/24.jpg", "ARENA.zip/ARENA/Island.9.full.jpg"); + copyUrlToImage.put("arena/25.jpg", "ARENA.zip/ARENA/Swamp.77.full.jpg"); + copyUrlToImage.put("arena/26.jpg", "ARENA.zip/ARENA/Mountain.70.full.jpg"); copyUrlToImage.put("arena/27.jpg", "ARENA.zip/ARENA/Forest 8.full.jpg"); copyUrlToImage.put("arena/28.jpg", "ARENA.zip/ARENA/Creeping Mold.full.jpg"); copyUrlToImage.put("arena/29.jpg", "ARENA.zip/ARENA/Dismiss.full.jpg"); - copyUrlToImage.put("arena/3.jpg", "ARENA.zip/ARENA/Swamp.69.full.jpg"); + copyUrlToImage.put("arena/3.jpg", "ARENA.zip/ARENA/Swamp.69.full.jpg"); copyUrlToImage.put("arena/30.jpg", "ARENA.zip/ARENA/Fling.full.jpg"); copyUrlToImage.put("arena/31.jpg", "ARENA.zip/ARENA/Empyrial Armor.full.jpg"); - copyUrlToImage.put("arena/32.jpg", "ARENA.zip/ARENA/Plains.67.full.jpg"); - copyUrlToImage.put("arena/33.jpg", "ARENA.zip/ARENA/Island.76.full.jpg"); - copyUrlToImage.put("arena/34.jpg", "ARENA.zip/ARENA/Swamp.55.full.jpg"); + copyUrlToImage.put("arena/32.jpg", "ARENA.zip/ARENA/Plains.67.full.jpg"); + copyUrlToImage.put("arena/33.jpg", "ARENA.zip/ARENA/Island.76.full.jpg"); + copyUrlToImage.put("arena/34.jpg", "ARENA.zip/ARENA/Swamp.55.full.jpg"); copyUrlToImage.put("arena/35.jpg", "ARENA.zip/ARENA/Mountain 6.full.jpg"); copyUrlToImage.put("arena/35.jpg", "ARENA.zip/ARENA/Mountain.78.full.jpg"); - copyUrlToImage.put("arena/36.jpg", "ARENA.zip/ARENA/Forest.71.full.jpg"); + copyUrlToImage.put("arena/36.jpg", "ARENA.zip/ARENA/Forest.71.full.jpg"); copyUrlToImage.put("arena/37.jpg", "ARENA.zip/ARENA/Diabolic Edict.full.jpg"); copyUrlToImage.put("arena/38.jpg", "ARENA.zip/ARENA/Gaea's Blessing.full.jpg"); - copyUrlToImage.put("arena/39.jpg", "ARENA.zip/ARENA/Island.68.full.jpg"); + copyUrlToImage.put("arena/39.jpg", "ARENA.zip/ARENA/Island.68.full.jpg"); copyUrlToImage.put("arena/4.jpg", "ARENA.zip/ARENA/Mountain 5.full.jpg"); copyUrlToImage.put("arena/40.jpg", "ARENA.zip/ARENA/Forest 6.full.jpg"); copyUrlToImage.put("arena/40.jpg", "ARENA.zip/ARENA/Forest.5.full.jpg"); @@ -182,20 +179,20 @@ public class GrabbagImageSource implements CardImageSource { copyUrlToImage.put("arena/42.jpg", "ARENA.zip/ARENA/Arc Lightning.full.jpg"); copyUrlToImage.put("arena/43.jpg", "ARENA.zip/ARENA/Dauthi Slayer.full.jpg"); copyUrlToImage.put("arena/44.jpg", "ARENA.zip/ARENA/Mana Leak.full.jpg"); - copyUrlToImage.put("arena/45.jpg", "ARENA.zip/ARENA/Plains.53.full.jpg"); - copyUrlToImage.put("arena/46.jpg", "ARENA.zip/ARENA/Island.54.full.jpg"); - copyUrlToImage.put("arena/47.jpg", "ARENA.zip/ARENA/Swamp.47.full.jpg"); - copyUrlToImage.put("arena/48.jpg", "ARENA.zip/ARENA/Mountain.48.full.jpg"); - copyUrlToImage.put("arena/49.jpg", "ARENA.zip/ARENA/Forest.57.full.jpg"); - copyUrlToImage.put("arena/5.jpg", "ARENA.zip/ARENA/Forest.40.full.jpg"); + copyUrlToImage.put("arena/45.jpg", "ARENA.zip/ARENA/Plains.53.full.jpg"); + copyUrlToImage.put("arena/46.jpg", "ARENA.zip/ARENA/Island.54.full.jpg"); + copyUrlToImage.put("arena/47.jpg", "ARENA.zip/ARENA/Swamp.47.full.jpg"); + copyUrlToImage.put("arena/48.jpg", "ARENA.zip/ARENA/Mountain.48.full.jpg"); + copyUrlToImage.put("arena/49.jpg", "ARENA.zip/ARENA/Forest.57.full.jpg"); + copyUrlToImage.put("arena/5.jpg", "ARENA.zip/ARENA/Forest.40.full.jpg"); copyUrlToImage.put("arena/50.jpg", "ARENA.zip/ARENA/Skirk Marauder.full.jpg"); copyUrlToImage.put("arena/51.jpg", "ARENA.zip/ARENA/Elvish Aberration.full.jpg"); copyUrlToImage.put("arena/52.jpg", "ARENA.zip/ARENA/Bonesplitter.full.jpg"); - copyUrlToImage.put("arena/53.jpg", "ARENA.zip/ARENA/Plains.45.full.jpg"); - copyUrlToImage.put("arena/54.jpg", "ARENA.zip/ARENA/Island.46.full.jpg"); - copyUrlToImage.put("arena/55.jpg", "ARENA.zip/ARENA/Swamp.34.full.jpg"); - copyUrlToImage.put("arena/56.jpg", "ARENA.zip/ARENA/Mountain.35.full.jpg"); - copyUrlToImage.put("arena/57.jpg", "ARENA.zip/ARENA/Forest.36.full.jpg"); + copyUrlToImage.put("arena/53.jpg", "ARENA.zip/ARENA/Plains.45.full.jpg"); + copyUrlToImage.put("arena/54.jpg", "ARENA.zip/ARENA/Island.46.full.jpg"); + copyUrlToImage.put("arena/55.jpg", "ARENA.zip/ARENA/Swamp.34.full.jpg"); + copyUrlToImage.put("arena/56.jpg", "ARENA.zip/ARENA/Mountain.35.full.jpg"); + copyUrlToImage.put("arena/57.jpg", "ARENA.zip/ARENA/Forest.36.full.jpg"); copyUrlToImage.put("arena/58.jpg", "ARENA.zip/ARENA/Darksteel Ingot.full.jpg"); copyUrlToImage.put("arena/59.jpg", "ARENA.zip/ARENA/Serum Visions.full.jpg"); copyUrlToImage.put("arena/6.jpg", "ARENA.zip/ARENA/Disenchant.full.jpg"); @@ -206,46 +203,46 @@ public class GrabbagImageSource implements CardImageSource { copyUrlToImage.put("arena/64.jpg", "ARENA.zip/ARENA/Goblin Mime.full.jpg"); copyUrlToImage.put("arena/65.jpg", "ARENA.zip/ARENA/Granny's Payback.full.jpg"); copyUrlToImage.put("arena/66.jpg", "ARENA.zip/ARENA/Ashnod's Coupon.full.jpg"); - copyUrlToImage.put("arena/67.jpg", "ARENA.zip/ARENA/Plains.32.full.jpg"); - copyUrlToImage.put("arena/68.jpg", "ARENA.zip/ARENA/Island.33.full.jpg"); - copyUrlToImage.put("arena/69.jpg", "ARENA.zip/ARENA/Swamp.25.full.jpg"); + copyUrlToImage.put("arena/67.jpg", "ARENA.zip/ARENA/Plains.32.full.jpg"); + copyUrlToImage.put("arena/68.jpg", "ARENA.zip/ARENA/Island.33.full.jpg"); + copyUrlToImage.put("arena/69.jpg", "ARENA.zip/ARENA/Swamp.25.full.jpg"); copyUrlToImage.put("arena/7.jpg", "ARENA.zip/ARENA/Fireball.full.jpg"); - copyUrlToImage.put("arena/70.jpg", "ARENA.zip/ARENA/Mountain.26.full.jpg"); - copyUrlToImage.put("arena/71.jpg", "ARENA.zip/ARENA/Forest.27.full.jpg"); + copyUrlToImage.put("arena/70.jpg", "ARENA.zip/ARENA/Mountain.26.full.jpg"); + copyUrlToImage.put("arena/71.jpg", "ARENA.zip/ARENA/Forest.27.full.jpg"); copyUrlToImage.put("arena/72.jpg", "ARENA.zip/ARENA/Genju of the Spires.full.jpg"); copyUrlToImage.put("arena/73.jpg", "ARENA.zip/ARENA/Okina Nightwatch.full.jpg"); copyUrlToImage.put("arena/74.jpg", "ARENA.zip/ARENA/Skyknight Legionnaire.full.jpg"); - copyUrlToImage.put("arena/75.jpg", "ARENA.zip/ARENA/Plains.23.full.jpg"); - copyUrlToImage.put("arena/76.jpg", "ARENA.zip/ARENA/Island.24.full.jpg"); - copyUrlToImage.put("arena/77.jpg", "ARENA.zip/ARENA/Swamp.10.full.jpg"); - copyUrlToImage.put("arena/78.jpg", "ARENA.zip/ARENA/Mountain.11.full.jpg"); - copyUrlToImage.put("arena/79.jpg", "ARENA.zip/ARENA/Forest.12.full.jpg"); + copyUrlToImage.put("arena/75.jpg", "ARENA.zip/ARENA/Plains.23.full.jpg"); + copyUrlToImage.put("arena/76.jpg", "ARENA.zip/ARENA/Island.24.full.jpg"); + copyUrlToImage.put("arena/77.jpg", "ARENA.zip/ARENA/Swamp.10.full.jpg"); + copyUrlToImage.put("arena/78.jpg", "ARENA.zip/ARENA/Mountain.11.full.jpg"); + copyUrlToImage.put("arena/79.jpg", "ARENA.zip/ARENA/Forest.12.full.jpg"); copyUrlToImage.put("arena/8.jpg", "ARENA.zip/ARENA/Plains 1.full.jpg"); copyUrlToImage.put("arena/8.jpg", "ARENA.zip/ARENA/Plains.8.full.jpg"); copyUrlToImage.put("arena/80.jpg", "ARENA.zip/ARENA/Castigate.full.jpg"); copyUrlToImage.put("arena/81.jpg", "ARENA.zip/ARENA/Wee Dragonauts.full.jpg"); copyUrlToImage.put("arena/82.jpg", "ARENA.zip/ARENA/Coiling Oracle.full.jpg"); copyUrlToImage.put("arena/83.jpg", "ARENA.zip/ARENA/Surging Flame.full.jpg"); - copyUrlToImage.put("arena/9.jpg", "ARENA.zip/ARENA/Island.2.full.jpg"); - copyUrlToImage.put("euro/1.jpg", "EURO.zip/EURO/Forest.6.full.jpg"); - copyUrlToImage.put("euro/10.jpg", "EURO.zip/EURO/Swamp.5.full.jpg"); + copyUrlToImage.put("arena/9.jpg", "ARENA.zip/ARENA/Island.2.full.jpg"); + copyUrlToImage.put("euro/1.jpg", "EURO.zip/EURO/Forest.6.full.jpg"); + copyUrlToImage.put("euro/10.jpg", "EURO.zip/EURO/Swamp.5.full.jpg"); copyUrlToImage.put("euro/11.jpg", "EURO.zip/EURO/Forest 2.full.jpg"); copyUrlToImage.put("euro/11.jpg", "EURO.zip/EURO/Forest.1.full.jpg"); - copyUrlToImage.put("euro/12.jpg", "EURO.zip/EURO/Island.7.full.jpg"); - copyUrlToImage.put("euro/13.jpg", "EURO.zip/EURO/Mountain.8.full.jpg"); - copyUrlToImage.put("euro/14.jpg", "EURO.zip/EURO/Plains.4.full.jpg"); + copyUrlToImage.put("euro/12.jpg", "EURO.zip/EURO/Island.7.full.jpg"); + copyUrlToImage.put("euro/13.jpg", "EURO.zip/EURO/Mountain.8.full.jpg"); + copyUrlToImage.put("euro/14.jpg", "EURO.zip/EURO/Plains.4.full.jpg"); copyUrlToImage.put("euro/15.jpg", "EURO.zip/EURO/Swamp 2.full.jpg"); copyUrlToImage.put("euro/15.jpg", "EURO.zip/EURO/Swamp.15.full.jpg"); copyUrlToImage.put("euro/2.jpg", "EURO.zip/EURO/Island 2.full.jpg"); copyUrlToImage.put("euro/2.jpg", "EURO.zip/EURO/Island.2.full.jpg"); - copyUrlToImage.put("euro/3.jpg", "EURO.zip/EURO/Mountain.3.full.jpg"); + copyUrlToImage.put("euro/3.jpg", "EURO.zip/EURO/Mountain.3.full.jpg"); copyUrlToImage.put("euro/4.jpg", "EURO.zip/EURO/Plains 2.full.jpg"); copyUrlToImage.put("euro/4.jpg", "EURO.zip/EURO/Plains.9.full.jpg"); - copyUrlToImage.put("euro/5.jpg", "EURO.zip/EURO/Swamp.10.full.jpg"); - copyUrlToImage.put("euro/6.jpg", "EURO.zip/EURO/Forest.11.full.jpg"); - copyUrlToImage.put("euro/7.jpg", "EURO.zip/EURO/Island.12.full.jpg"); - copyUrlToImage.put("euro/8.jpg", "EURO.zip/EURO/Mountain.13.full.jpg"); - copyUrlToImage.put("euro/9.jpg", "EURO.zip/EURO/Plains.14.full.jpg"); + copyUrlToImage.put("euro/5.jpg", "EURO.zip/EURO/Swamp.10.full.jpg"); + copyUrlToImage.put("euro/6.jpg", "EURO.zip/EURO/Forest.11.full.jpg"); + copyUrlToImage.put("euro/7.jpg", "EURO.zip/EURO/Island.12.full.jpg"); + copyUrlToImage.put("euro/8.jpg", "EURO.zip/EURO/Mountain.13.full.jpg"); + copyUrlToImage.put("euro/9.jpg", "EURO.zip/EURO/Plains.14.full.jpg"); copyUrlToImage.put("exp/1.jpg", "EXP.zip/EXP/Prairie Stream.full.jpg"); copyUrlToImage.put("exp/10.jpg", "EXP.zip/EXP/Temple Garden.full.jpg"); copyUrlToImage.put("exp/11.jpg", "EXP.zip/EXP/Godless Shrine.full.jpg"); @@ -1246,9 +1243,7 @@ public class GrabbagImageSource implements CardImageSource { copyUrlToImage.put("mbp/145.jpg", "MBP.zip/MBP/Dread Defiler.full.jpg"); copyUrlToImage.put("mbp/146.jpg", "MBP.zip/MBP/Tyrant of Valakut.full.jpg"); copyUrlToImage.put("mbp/147.jpg", "MBP.zip/MBP/Gladehart Cavalry.full.jpg"); - copyUrlToImage.put("mbp/148.jpg", "MBP.zip/MBP/Goblin Dark-Dwellers.full.jpg"); - - + copyUrlToImage.put("mbp/148.jpg", "MBP.zip/MBP/Goblin Dark-Dwellers.full.jpg"); for (String key : copyUrlToImage.keySet()) { copyUrlToImageDone.put(key, maxTimes); @@ -1271,7 +1266,7 @@ public class GrabbagImageSource implements CardImageSource { } return -1; } - + @Override public Boolean isTokenSource() { return false; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index cc7082b7b59..82eb1d15fc1 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Random; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -57,11 +56,11 @@ import net.java.truevfs.access.TFileOutputStream; import net.java.truevfs.access.TVFS; import net.java.truevfs.kernel.spec.FsSyncException; import org.apache.log4j.Logger; +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.MtgOnlTokensImageSource; -import org.mage.plugins.card.dl.sources.AltMtgOnlTokensImageSource; -import org.mage.plugins.card.dl.sources.GrabbagImageSource; import org.mage.plugins.card.dl.sources.MythicspoilerComSource; import org.mage.plugins.card.dl.sources.TokensMtgImageSource; import org.mage.plugins.card.dl.sources.WizardCardsImageSource; @@ -183,10 +182,10 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab break; case 5: cardImageSource = AltMtgOnlTokensImageSource.getInstance(); - break; + break; case 6: cardImageSource = GrabbagImageSource.getInstance(); - break; + break; } int count = DownloadPictures.this.cards.size(); float mb = (count * cardImageSource.getAverageSize()) / 1024; @@ -565,7 +564,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab private final URL url; private final int count; private final String actualFilename; - private boolean useSpecifiedPaths; + private final boolean useSpecifiedPaths; public DownloadTask(CardDownloadData card, URL url, int count) { this.card = card; @@ -597,17 +596,15 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab String imagePath; if (useSpecifiedPaths) { if (card != null && card.isToken()) { - imagePath = CardImageUtils.getTokenBasePath() + actualFilename;; + imagePath = CardImageUtils.getTokenBasePath() + actualFilename; + } else if (card != null) { + imagePath = CardImageUtils.getImageBasePath() + actualFilename; } else { - if (card != null) { - imagePath = CardImageUtils.getImageBasePath() + actualFilename; - } else { - imagePath = Constants.IO.imageBaseDir; - } + imagePath = Constants.IO.imageBaseDir; } - + String tmpFile = filePath + "temporary" + actualFilename; - temporaryFile = new File(tmpFile.toString()); + temporaryFile = new File(tmpFile); if (!temporaryFile.exists()) { temporaryFile.getParentFile().mkdirs(); } diff --git a/Mage.Common/src/mage/utils/ThreadUtils.java b/Mage.Common/src/mage/utils/ThreadUtils.java index 0cdff43d0db..2bfb2a0b56f 100644 --- a/Mage.Common/src/mage/utils/ThreadUtils.java +++ b/Mage.Common/src/mage/utils/ThreadUtils.java @@ -15,14 +15,17 @@ public class ThreadUtils { public static final ThreadPoolExecutor threadPool; public static final ThreadPoolExecutor threadPool2; + public static final ThreadPoolExecutor threadPool3; private static int threadCount; + static { - /** used in CardInfoPaneImpl - * + /** + * used in CardInfoPaneImpl + * */ threadPool = new ThreadPoolExecutor(4, 4, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new ThreadFactory() { @Override - public Thread newThread (Runnable runnable) { + public Thread newThread(Runnable runnable) { threadCount++; Thread thread = new Thread(runnable, "Util" + threadCount); thread.setDaemon(true); @@ -30,13 +33,13 @@ public class ThreadUtils { } }); threadPool.prestartAllCoreThreads(); - + /** - * Used for MageActionCallback + * Used for MageActionCallback */ threadPool2 = new ThreadPoolExecutor(4, 4, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new ThreadFactory() { @Override - public Thread newThread (Runnable runnable) { + public Thread newThread(Runnable runnable) { threadCount++; Thread thread = new Thread(runnable, "TP2" + threadCount); thread.setDaemon(true); @@ -44,16 +47,30 @@ public class ThreadUtils { } }); threadPool2.prestartAllCoreThreads(); + /** + * Used for Enlarged view + */ + + threadPool3 = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new ThreadFactory() { + @Override + public Thread newThread(Runnable runnable) { + threadCount++; + Thread thread = new Thread(runnable, "EV" + threadCount); + thread.setDaemon(true); + return thread; + } + }); + threadPool3.prestartAllCoreThreads(); } - public static void sleep (int millis) { + public static void sleep(int millis) { try { Thread.sleep(millis); } catch (InterruptedException ignored) { } } - public static void wait (Object lock) { + public static void wait(Object lock) { synchronized (lock) { try { lock.wait(); diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 69b27f15dcf..190c68bf016 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -138,6 +138,79 @@ public class CardView extends SimpleCardView { this(card, game, false); this.id = cardId; } + + + public CardView(CardView cardView) { + super(cardView.id, cardView.expansionSetCode, cardView.cardNumber, cardView.usesVariousArt, cardView.tokenSetCode, cardView.gameObject, cardView.tokenDescriptor); + + this.id = UUID.randomUUID(); + this.parentId = cardView.parentId; + this.name = cardView.name; + this.displayName = cardView.displayName; + this.rules = cardView.rules; + this.power = cardView.power; + this.toughness = cardView.toughness; + this.loyalty = cardView.loyalty; + this.startingLoyalty = cardView.startingLoyalty; + this.cardTypes = cardView.cardTypes; + this.subTypes = cardView.subTypes; + this.superTypes = cardView.superTypes; + this.color = cardView.color; + this.frameColor = cardView.frameColor; + this.frameStyle = cardView.frameStyle; + this.manaCost = cardView.manaCost; + this.convertedManaCost = cardView.convertedManaCost; + this.rarity = cardView.rarity; + + this.mageObjectType = cardView.mageObjectType; + + this.isAbility = cardView.isAbility; + this.abilityType = cardView.abilityType; + this.isToken = cardView.isToken; + + this.ability = null; + this.type = cardView.type; + + this.transformable = cardView.transformable; + if (cardView.secondCardFace != null) { + this.secondCardFace = new CardView(cardView.secondCardFace); + } else { + this.secondCardFace = null; + } + this.transformed = cardView.transformed; + + this.flipCard = cardView.flipCard; + this.faceDown = cardView.faceDown; + + this.alternateName = cardView.alternateName; + this.originalName = cardView.originalName; + + this.isSplitCard = cardView.isSplitCard; + this.leftSplitName = cardView.leftSplitName; + this.leftSplitCosts = cardView.leftSplitCosts; + this.leftSplitRules = null; + this.rightSplitName = cardView.rightSplitName; + this.rightSplitCosts = cardView.rightSplitCosts; + this.rightSplitRules = null; + + this.targets = null; + + this.pairedCard = cardView.pairedCard; + this.paid = cardView.paid; + this.counters = null; + + this.controlledByOwner = cardView.controlledByOwner; + + this.zone = cardView.zone; + + this.rotate = cardView.rotate; + this.hideInfo = cardView.hideInfo; + + this.isPlayable = cardView.isPlayable; + this.isChoosable = cardView.isChoosable; + this.selected = cardView.selected; + this.canAttack = cardView.canAttack; + } /** * diff --git a/Mage.Common/src/mage/view/PermanentView.java b/Mage.Common/src/mage/view/PermanentView.java index e0b79cabe09..9e44be61692 100644 --- a/Mage.Common/src/mage/view/PermanentView.java +++ b/Mage.Common/src/mage/view/PermanentView.java @@ -138,7 +138,7 @@ public class PermanentView extends CardView { + " A face-down card can also be turned face up for its morph cost."); } else if (permanent.isMorphed()) { this.rules.add("If the controller has priority, he or she may turn this permanent face up." - + " This is a special action; it doesn’t use the stack. To do this he or she pays the morph costs," + + " This is a special action; it doesn't use the stack. To do this he or she pays the morph costs," + " then turns this permanent face up."); } } diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java index b9199751d6e..19bc8619cab 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java @@ -1,4 +1,4 @@ - /* +/* * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Eternal.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Eternal.java index 85094dceb64..5fb0bc28e80 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Eternal.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Eternal.java @@ -24,23 +24,30 @@ * 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.deck; +import mage.cards.ExpansionSet; +import mage.cards.Sets; import mage.cards.decks.Constructed; +import mage.constants.SetType; /** - * This class implements the new casual format "Eternal", which is legacy with no reserved list cards legal. - * Banlist taken from + * This class implements the new casual format "Eternal", which is legacy with + * no reserved list cards legal. Banlist taken from + * * * @author marthinwurer@gmail.com */ public class Eternal extends Constructed { - public Eternal() { + public Eternal() { super("Constructed - Eternal"); - + for (ExpansionSet set : Sets.getInstance().values()) { + if (set.getSetType() != SetType.CUSTOM_SET) { + setCodes.add(set.getCode()); + } + } banned.add("Abeyance"); banned.add("Aboroth"); banned.add("Academy Rector"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Frontier.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Frontier.java index 4c04953bb9a..b50b47453cb 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Frontier.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Frontier.java @@ -43,7 +43,7 @@ public class Frontier extends Constructed { public Frontier() { super("Constructed - Frontier"); - Date cutoff = new GregorianCalendar(2014, 7, 18).getTime(); // M15 release date + Date cutoff = new GregorianCalendar(2014, 6, 18).getTime(); // M15 release date for (ExpansionSet set : Sets.getInstance().values()) { if ((set.getReleaseDate().after(cutoff) || set.getReleaseDate().equals(cutoff)) && (set.getSetType() == SetType.CORE || set.getSetType() == SetType.EXPANSION)) { diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Modern.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Modern.java index c4ac0595f1c..270863f5f33 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Modern.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Modern.java @@ -43,7 +43,7 @@ public class Modern extends Constructed { public Modern() { super("Constructed - Modern"); - Date cutoff = new GregorianCalendar(2003, 7, 28).getTime(); // Eight edition release date + Date cutoff = new GregorianCalendar(2003, 6, 28).getTime(); // Eight edition release date for (ExpansionSet set : Sets.getInstance().values()) { if ((set.getReleaseDate().after(cutoff) || set.getReleaseDate().equals(cutoff)) && (set.getSetType() == SetType.CORE || set.getSetType() == SetType.EXPANSION)) { diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Pauper.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Pauper.java index 637db8c31d9..755ad626710 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Pauper.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Pauper.java @@ -3,23 +3,29 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ - package mage.deck; +import mage.cards.ExpansionSet; +import mage.cards.Sets; import mage.cards.decks.Constructed; import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author LevelX2 */ - public class Pauper extends Constructed { + public Pauper() { super("Constructed - Pauper"); //TODO: Add only Magic Online sets for pauper - + for (ExpansionSet set : Sets.getInstance().values()) { + if (set.getSetType() != SetType.CUSTOM_SET) { + setCodes.add(set.getCode()); + } + } rarities.add(Rarity.COMMON); rarities.add(Rarity.LAND); diff --git a/Mage.Sets/src/mage/cards/a/AetherTheorist.java b/Mage.Sets/src/mage/cards/a/AetherTheorist.java index 6894a32e62f..39d3fd967a5 100644 --- a/Mage.Sets/src/mage/cards/a/AetherTheorist.java +++ b/Mage.Sets/src/mage/cards/a/AetherTheorist.java @@ -49,7 +49,7 @@ public class AetherTheorist extends CardImpl { public AetherTheorist(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); - this.subtype.add("Vedelkan"); + this.subtype.add("Vedalken"); this.subtype.add("Rogue"); this.power = new MageInt(1); this.toughness = new MageInt(3); diff --git a/Mage.Sets/src/mage/cards/a/AetherTradewinds.java b/Mage.Sets/src/mage/cards/a/AetherTradewinds.java index 6ca776b4186..1b684184d63 100644 --- a/Mage.Sets/src/mage/cards/a/AetherTradewinds.java +++ b/Mage.Sets/src/mage/cards/a/AetherTradewinds.java @@ -28,16 +28,13 @@ package mage.cards.a; import java.util.UUID; - -import mage.constants.*; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.predicate.permanent.ControllerPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.common.TargetControlledPermanent; @@ -54,13 +51,14 @@ public class AetherTradewinds extends CardImpl { } public AetherTradewinds(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}"); // Return target permanent you control and target permanent you don't control to their owners' hands. this.getSpellAbility().addTarget(new TargetControlledPermanent()); this.getSpellAbility().addTarget(new TargetPermanent(filter)); - this.getSpellAbility().addEffect(new AetherTradewindsEffect()); + Effect effect = new ReturnToHandTargetEffect(true); + effect.setText("Return target permanent you control and target permanent you don't control to their owners' hands"); + this.getSpellAbility().addEffect(effect); } public AetherTradewinds(final AetherTradewinds card) { @@ -72,36 +70,3 @@ public class AetherTradewinds extends CardImpl { return new AetherTradewinds(this); } } - -class AetherTradewindsEffect extends OneShotEffect { - - public AetherTradewindsEffect() { - super(Outcome.ReturnToHand); - this.staticText = "Return target permanent you control and target permanent you don't control to their owners' hands"; - } - - public AetherTradewindsEffect(final AetherTradewindsEffect effect) { - super(effect); - } - - @Override - public AetherTradewindsEffect copy() { - return new AetherTradewindsEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - boolean result = false; - - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false); - } - permanent = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (permanent != null) { - result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false); - } - - return result; - } -} diff --git a/Mage.Sets/src/mage/cards/a/AngelicAccord.java b/Mage.Sets/src/mage/cards/a/AngelicAccord.java index 91446af496e..b8922cdf652 100644 --- a/Mage.Sets/src/mage/cards/a/AngelicAccord.java +++ b/Mage.Sets/src/mage/cards/a/AngelicAccord.java @@ -49,8 +49,7 @@ import mage.watchers.common.PlayerGainedLifeWatcher; public class AngelicAccord extends CardImpl { public AngelicAccord(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); // At the beginning of each end step, if you gained 4 or more life this turn, put a 4/4 white Angel creature token with flying onto the battlefield. this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), TargetController.ANY, @@ -76,7 +75,7 @@ class YouGainedLifeCondition extends IntCompareCondition { @Override protected int getInputValue(Game game, Ability source) { int gainedLife = 0; - PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get("PlayerGainedLifeWatcher"); + PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get(PlayerGainedLifeWatcher.class.getName()); if (watcher != null) { gainedLife = watcher.getLiveGained(source.getControllerId()); } diff --git a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java index 1c978337bee..bbe5400dfe8 100644 --- a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java +++ b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java @@ -35,8 +35,9 @@ import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.condition.common.MetalcraftCondition; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -46,6 +47,7 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -54,7 +56,7 @@ import mage.game.permanent.Permanent; public class ArgentSphinx extends CardImpl { public ArgentSphinx(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); this.subtype.add("Sphinx"); this.power = new MageInt(4); @@ -100,10 +102,10 @@ class ArgentSphinxEffect extends OneShotEffect { if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { //create delayed triggered ability - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility - = new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(); + effect.setText("Return it to the battlefield under your control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(source.getSourceId(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/a/AstralSlide.java b/Mage.Sets/src/mage/cards/a/AstralSlide.java index f5a90e02ffe..db23956a8f6 100644 --- a/Mage.Sets/src/mage/cards/a/AstralSlide.java +++ b/Mage.Sets/src/mage/cards/a/AstralSlide.java @@ -32,17 +32,18 @@ import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.CycleAllTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -51,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent; public class AstralSlide extends CardImpl { public AstralSlide(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); // Whenever a player cycles a card, you may exile target creature. If you do, return that card to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new CycleAllTriggeredAbility(new AstralSlideEffect(), true); @@ -90,8 +91,10 @@ class AstralSlideEffect extends OneShotEffect { UUID exileId = UUID.randomUUID(); if (controller.moveCardsToExile(permanent, source, game, true, exileId, sourceObject.getIdName())) { //create delayed triggered ability - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(exileId, Zone.BATTLEFIELD, false)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(permanent.getId(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); } } return true; diff --git a/Mage.Sets/src/mage/cards/b/BattleTactics.java b/Mage.Sets/src/mage/cards/b/BattleTactics.java index d4481fa382e..23413b73039 100644 --- a/Mage.Sets/src/mage/cards/b/BattleTactics.java +++ b/Mage.Sets/src/mage/cards/b/BattleTactics.java @@ -44,7 +44,7 @@ import mage.constants.Duration; public class BattleTactics extends CardImpl { public BattleTactics(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}{W}"); // Creatures you control get +2/+1 and gain vigilance until end of turn. Effect effect = new BoostControlledEffect(2, 1, Duration.EndOfTurn); diff --git a/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java b/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java index ab59754f1c3..8bb2c7eb5a9 100644 --- a/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java +++ b/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java @@ -27,15 +27,8 @@ */ package mage.cards.b; -import java.util.ArrayList; import java.util.List; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.StaticAbility; import mage.abilities.common.SimpleStaticAbility; @@ -45,6 +38,14 @@ import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.EquipAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.Zone; import mage.filter.common.FilterArtifactPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -59,8 +60,7 @@ import mage.game.permanent.Permanent; public class BludgeonBrawl extends CardImpl { public BludgeonBrawl(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); // Each noncreature, non-Equipment artifact is an Equipment with equip {X} and "Equipped creature gets +X/+0," where X is that artifact's converted mana cost. this.addAbility(new BludgeonBrawlAbility()); @@ -114,7 +114,7 @@ class BludgeonBrawlAddSubtypeEffect extends ContinuousEffectImpl { filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); filter.add(Predicates.not(new SubtypePredicate("Equipment"))); - List affectedPermanents = new ArrayList(); + Cards affectedPermanents = new CardsImpl(); List permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); for (Permanent permanent : permanents) { if (permanent != null) { @@ -149,7 +149,7 @@ class BludgeonBrawlGainAbilityEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - List permanents = (List) game.getState().getValue(source.getSourceId() + "BludgeonBrawlAffectedPermanents"); + Cards permanents = (Cards) game.getState().getValue(source.getSourceId() + "BludgeonBrawlAffectedPermanents"); if (permanents != null) { for (UUID permanentId : permanents) { Permanent permanent = game.getPermanent(permanentId); diff --git a/Mage.Sets/src/mage/cards/c/Capture.java b/Mage.Sets/src/mage/cards/c/Capture.java index ccb26c94ca2..83256458e3b 100644 --- a/Mage.Sets/src/mage/cards/c/Capture.java +++ b/Mage.Sets/src/mage/cards/c/Capture.java @@ -45,7 +45,7 @@ import mage.target.common.TargetCreaturePermanent; public class Capture extends CardImpl { public Capture(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{R}"); + super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}"); // Gain control of target creature until end of turn. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/c/CoalitionFlag.java b/Mage.Sets/src/mage/cards/c/CoalitionFlag.java new file mode 100644 index 00000000000..d4edb5ff740 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CoalitionFlag.java @@ -0,0 +1,81 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.c; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.SetCardSubtypeAttachedEffect; +import mage.abilities.effects.common.ruleModifying.TargetsHaveToTargetPermanentIfAbleEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class CoalitionFlag extends CardImpl { + + public CoalitionFlag(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add("Aura"); + + // Enchant creature you control + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature is a Flagbearer. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetCardSubtypeAttachedEffect("Flagbearer", Duration.WhileOnBattlefield, AttachmentType.AURA))); + + // While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TargetsHaveToTargetPermanentIfAbleEffect(new FilterPermanent("Flagbearer", "one Flagbearer")))); + } + + public CoalitionFlag(final CoalitionFlag card) { + super(card); + } + + @Override + public CoalitionFlag copy() { + return new CoalitionFlag(this); + } +} diff --git a/Mage.Sets/src/mage/cards/c/CoalitionHonorGuard.java b/Mage.Sets/src/mage/cards/c/CoalitionHonorGuard.java new file mode 100644 index 00000000000..26721d9951d --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CoalitionHonorGuard.java @@ -0,0 +1,67 @@ +/* + * 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.c; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ruleModifying.TargetsHaveToTargetPermanentIfAbleEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; + +/** + * Cardname: Coalition Honor Guard + * + * @author LevelX2 + */ +public class CoalitionHonorGuard extends CardImpl { + + public CoalitionHonorGuard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); + + this.subtype.add("Human"); + this.subtype.add("Flagbearer"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TargetsHaveToTargetPermanentIfAbleEffect(new FilterPermanent("Flagbearer", "one Flagbearer")))); + } + + public CoalitionHonorGuard(final CoalitionHonorGuard card) { + super(card); + } + + @Override + public CoalitionHonorGuard copy() { + return new CoalitionHonorGuard(this); + } +} diff --git a/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java b/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java index 10489300b14..871bb5d1bc2 100644 --- a/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java +++ b/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java @@ -27,7 +27,6 @@ */ package mage.cards.c; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; @@ -51,21 +50,19 @@ import java.util.UUID; public class CorruptedZendikon extends CardImpl { public CorruptedZendikon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); this.subtype.add("Aura"); - // Enchant land // Enchanted land is a 3/3 black Ooze creature. It's still a land. // When enchanted land dies, return that card to its owner's hand. - TargetPermanent auraTarget = new TargetLandPermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.PutCreatureInPlay)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesCreatureAttachedEffect(new OozeToken(new MageInt(3), new MageInt(3)), "Enchanted land is a 3/3 black Ooze creature. It's still a land.", Duration.WhileOnBattlefield)); + Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesCreatureAttachedEffect(new OozeToken(3, 3), "Enchanted land is a 3/3 black Ooze creature. It's still a land.", Duration.WhileOnBattlefield)); this.addAbility(ability2); Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandAttachedEffect(), "enchanted land", false, false); diff --git a/Mage.Sets/src/mage/cards/e/EscapePod.java b/Mage.Sets/src/mage/cards/e/EscapePod.java index d552c08980f..3496f99f567 100644 --- a/Mage.Sets/src/mage/cards/e/EscapePod.java +++ b/Mage.Sets/src/mage/cards/e/EscapePod.java @@ -31,16 +31,17 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -49,7 +50,7 @@ import mage.target.common.TargetControlledCreaturePermanent; public class EscapePod extends CardImpl { public EscapePod(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{W}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); // Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step. this.getSpellAbility().addEffect(new EscapePodEffect()); @@ -84,8 +85,10 @@ class EscapePodEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/f/Flickerwisp.java b/Mage.Sets/src/mage/cards/f/Flickerwisp.java index db29131435c..c406608cefe 100644 --- a/Mage.Sets/src/mage/cards/f/Flickerwisp.java +++ b/Mage.Sets/src/mage/cards/f/Flickerwisp.java @@ -32,8 +32,9 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -46,6 +47,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -60,7 +62,7 @@ public class Flickerwisp extends CardImpl { } public Flickerwisp(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.subtype.add("Elemental"); this.power = new MageInt(3); @@ -104,8 +106,10 @@ class FlickerwispEffect extends OneShotEffect { if (controller != null && permanent != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)), source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/f/ForceLightning.java b/Mage.Sets/src/mage/cards/f/ForceLightning.java index b1bd7cc88e6..311d32e869d 100644 --- a/Mage.Sets/src/mage/cards/f/ForceLightning.java +++ b/Mage.Sets/src/mage/cards/f/ForceLightning.java @@ -47,7 +47,7 @@ import mage.target.common.TargetCreatureOrPlayer; public class ForceLightning extends CardImpl { public ForceLightning(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}"); // Force Lightning deals X damage to target creature or player. this.getSpellAbility().addEffect(new DamageTargetEffect(new ManacostVariableValue())); diff --git a/Mage.Sets/src/mage/cards/f/ForceScream.java b/Mage.Sets/src/mage/cards/f/ForceScream.java index c361f5e5546..3464148146f 100644 --- a/Mage.Sets/src/mage/cards/f/ForceScream.java +++ b/Mage.Sets/src/mage/cards/f/ForceScream.java @@ -52,7 +52,7 @@ public class ForceScream extends CardImpl { } public ForceScream(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); // Force Spark deals 2 damage to each creature without spaceflight and each player. this.getSpellAbility().addEffect(new DamageEverythingEffect(2, filter)); diff --git a/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java b/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java index b60dbe490b8..168307ed514 100644 --- a/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java +++ b/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java @@ -34,6 +34,7 @@ import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.effects.AsThoughManaEffect; import mage.abilities.effects.ContinuousEffect; @@ -69,7 +70,7 @@ public class GontiLordOfLuxury extends CardImpl { protected static final String VALUE_PREFIX = "ExileZones"; public GontiLordOfLuxury(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); this.supertype.add("Legendary"); this.subtype.add("Aetherborn"); this.subtype.add("Rogue"); @@ -79,11 +80,13 @@ public class GontiLordOfLuxury extends CardImpl { // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); - // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. Ability ability = new EntersBattlefieldTriggeredAbility(new GontiLordOfLuxuryEffect()); ability.addTarget(new TargetOpponent()); this.addAbility(ability); - + this.addAbility(new SimpleStaticAbility(Zone.ALL, new GontiLordOfLuxuryLookEffect())); } public GontiLordOfLuxury(final GontiLordOfLuxury card) { @@ -128,33 +131,38 @@ class GontiLordOfLuxuryEffect extends OneShotEffect { // move card to exile UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); card.setFaceDown(true, game); - controller.moveCardsToExile(card, source, game, false, exileZoneId, sourceObject.getIdName()); - card.setFaceDown(true, game); - Set exileZones = (Set) game.getState().getValue(GontiLordOfLuxury.VALUE_PREFIX + source.getSourceId().toString()); - if (exileZones == null) { - exileZones = new HashSet<>(); - game.getState().setValue(GontiLordOfLuxury.VALUE_PREFIX + source.getSourceId().toString(), exileZones); + if (controller.moveCardsToExile(card, source, game, false, exileZoneId, sourceObject.getIdName())) { + card.setFaceDown(true, game); + @SuppressWarnings("unchecked") + Set exileZones = (Set) game.getState().getValue(GontiLordOfLuxury.VALUE_PREFIX + source.getSourceId().toString()); + if (exileZones == null) { + exileZones = new HashSet<>(); + game.getState().setValue(GontiLordOfLuxury.VALUE_PREFIX + source.getSourceId().toString(), exileZones); + } + exileZones.add(exileZoneId); + // allow to cast the card + ContinuousEffect effect = new GontiLordOfLuxuryCastFromExileEffect(); + effect.setTargetPointer(new FixedTarget(card.getId(), game)); + game.addEffect(effect, source); + // and you may spend mana as though it were mana of any color to cast it + effect = new GontiLordOfLuxurySpendAnyManaEffect(); + effect.setTargetPointer(new FixedTarget(card.getId(), game)); + game.addEffect(effect, source); } - exileZones.add(exileZoneId); - // allow to cast the card - ContinuousEffect effect = new GontiLordOfLuxuryCastFromExileEffect(); - effect.setTargetPointer(new FixedTarget(card.getId())); - game.addEffect(effect, source); - // and you may spend mana as though it were mana of any color to cast it - effect = new GontiLordOfLuxurySpendAnyManaEffect(); - effect.setTargetPointer(new FixedTarget(card.getId())); - game.addEffect(effect, source); - } - while (!topCards.isEmpty() && controller.isInGame()) { - Card libCard = topCards.getRandom(game); - topCards.remove(libCard); - controller.moveCardToLibraryWithInfo(libCard, source.getSourceId(), game, Zone.LIBRARY, false, false); } } + // then put the rest on the bottom of that library in a random order + while (!topCards.isEmpty() && controller.isInGame()) { + Card libCard = topCards.getRandom(game); + topCards.remove(libCard); + controller.moveCardToLibraryWithInfo(libCard, source.getSourceId(), game, Zone.LIBRARY, false, false); + } return true; } + return false; } + } class GontiLordOfLuxuryCastFromExileEffect extends AsThoughEffectImpl { @@ -180,13 +188,12 @@ class GontiLordOfLuxuryCastFromExileEffect extends AsThoughEffectImpl { @Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - if (objectId.equals(getTargetPointer().getFirst(game, source))) { - if (affectedControllerId.equals(source.getControllerId())) { - return true; - } - } else if (((FixedTarget) getTargetPointer()).getTarget().equals(objectId)) { - // object has moved zone so effect can be discarted + UUID targetId = getTargetPointer().getFirst(game, source); + if (targetId == null) { this.discard(); + } else if (objectId.equals(targetId) + && affectedControllerId.equals(source.getControllerId())) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/cards/h/HeraldOfLeshrac.java b/Mage.Sets/src/mage/cards/h/HeraldOfLeshrac.java new file mode 100644 index 00000000000..b3b2365e916 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HeraldOfLeshrac.java @@ -0,0 +1,177 @@ +/* + * 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.h; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.other.OwnerIdPredicate; +import mage.filter.predicate.other.OwnerPredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.Target; +import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author emerald000 + */ +public class HeraldOfLeshrac extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledLandPermanent("land you control but don't own"); + static { + filter.add(new OwnerPredicate(TargetController.NOT_YOU)); + } + + public HeraldOfLeshrac(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{B}"); + + this.subtype.add("Avatar"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Cumulative upkeep-Gain control of a land you don't control. + this.addAbility(new CumulativeUpkeepAbility(new HeraldOfLeshracCumulativeCost())); + + // Herald of Leshrac gets +1/+1 for each land you control but don't own. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), new PermanentsOnBattlefieldCount(filter), Duration.WhileOnBattlefield))); + + // When Herald of Leshrac leaves the battlefield, each player gains control of each land he or she owns that you control. + this.addAbility(new LeavesBattlefieldTriggeredAbility(new HeraldOfLeshracLeavesEffect(), false)); + } + + public HeraldOfLeshrac(final HeraldOfLeshrac card) { + super(card); + } + + @Override + public HeraldOfLeshrac copy() { + return new HeraldOfLeshrac(this); + } +} + +class HeraldOfLeshracCumulativeCost extends CostImpl { + + private static final FilterPermanent filter = new FilterLandPermanent("land you don't control"); + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + HeraldOfLeshracCumulativeCost() { + this.text = "Gain control of a land you don't control"; + } + + HeraldOfLeshracCumulativeCost(final HeraldOfLeshracCumulativeCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Target target = new TargetPermanent(filter); + if (target.choose(Outcome.GainControl, controllerId, sourceId, game)) { + ContinuousEffect effect = new GainControlTargetEffect(Duration.EndOfGame); + effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); + game.addEffect(effect, ability); + game.applyEffects(); + paid = true; + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + return game.getBattlefield().contains(filter, controllerId, game, 1); + } + + @Override + public HeraldOfLeshracCumulativeCost copy() { + return new HeraldOfLeshracCumulativeCost(this); + } +} + +class HeraldOfLeshracLeavesEffect extends OneShotEffect { + + HeraldOfLeshracLeavesEffect() { + super(Outcome.Detriment); + this.staticText = "each player gains control of each land he or she owns that you control"; + } + + HeraldOfLeshracLeavesEffect(final HeraldOfLeshracLeavesEffect effect) { + super(effect); + } + + @Override + public HeraldOfLeshracLeavesEffect copy() { + return new HeraldOfLeshracLeavesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + if (playerId.equals(source.getControllerId())) { + continue; + } + FilterPermanent filter = new FilterLandPermanent(); + filter.add(new OwnerIdPredicate(playerId)); + filter.add(new ControllerIdPredicate(source.getControllerId())); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { + ContinuousEffect effect = new GainControlTargetEffect(Duration.EndOfGame, playerId); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect, source); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/i/IdentityThief.java b/Mage.Sets/src/mage/cards/i/IdentityThief.java index bf7ac1ed88b..015f185e49f 100644 --- a/Mage.Sets/src/mage/cards/i/IdentityThief.java +++ b/Mage.Sets/src/mage/cards/i/IdentityThief.java @@ -32,9 +32,10 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CopyEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -50,6 +51,7 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -64,7 +66,7 @@ public class IdentityThief extends CardImpl { } public IdentityThief(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); this.subtype.add("Shapeshifter"); this.power = new MageInt(0); this.toughness = new MageInt(3); @@ -146,8 +148,10 @@ class IdentityThiefEffect extends OneShotEffect { // Copy exiled permanent game.addEffect(copyEffect, source); // Create delayed triggered ability - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)), source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return the exiled card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/i/InexorableBlob.java b/Mage.Sets/src/mage/cards/i/InexorableBlob.java index c9032f3eec7..599d96ff97b 100644 --- a/Mage.Sets/src/mage/cards/i/InexorableBlob.java +++ b/Mage.Sets/src/mage/cards/i/InexorableBlob.java @@ -27,6 +27,7 @@ */ package mage.cards.i; +import java.util.UUID; import mage.MageInt; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.condition.common.DeliriumCondition; @@ -37,8 +38,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.game.permanent.token.OozeToken; -import java.util.UUID; - /** * * @author fireshoes @@ -46,17 +45,17 @@ import java.util.UUID; public class InexorableBlob extends CardImpl { public InexorableBlob(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add("Ooze"); this.power = new MageInt(3); this.toughness = new MageInt(3); // Delirium — Whenever Inexorable Blob attacks and there are at least four card types among cards in your graveyard, // put a 3/3 green Ooze creature token onto the battlefield tapped and attacking. - this.addAbility(new ConditionalTriggeredAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new OozeToken(new MageInt(3), new MageInt(3)), 1, true, true), false), + this.addAbility(new ConditionalTriggeredAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new OozeToken(3, 3), 1, true, true), false), DeliriumCondition.getInstance(), "Delirium — Whenever {this} attacks and there are at least four card types among cards in your graveyard, " - + "put a 3/3 green Ooze creature token onto the battlefield tapped and attacking.")); + + "put a 3/3 green Ooze creature token onto the battlefield tapped and attacking.")); } public InexorableBlob(final InexorableBlob card) { diff --git a/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java b/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java index a18fb478866..b6185063b05 100644 --- a/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java +++ b/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java @@ -62,7 +62,7 @@ public class IntetTheDreamer extends CardImpl { protected static final String VALUE_PREFIX = "ExileZones"; public IntetTheDreamer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{R}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{R}{G}"); this.supertype.add("Legendary"); this.subtype.add("Dragon"); this.power = new MageInt(6); @@ -162,7 +162,7 @@ class IntetTheDreamerCastEffect extends AsThoughEffectImpl { if (zone != null && zone.contains(card.getId())/* && CardUtil.cardCanBePlayedNow(card, controller.getId(), game)*/) { if (card.getCardType().contains(CardType.LAND)) { if (game.canPlaySorcery(controller.getId()) && game.getPlayer(controller.getId()).canPlayLand()) { - return controller.chooseUse(outcome, "Play " + card.getName() + "?", source, game); + return controller.chooseUse(outcome, "Play " + card.getIdName() + "?", source, game); } } else { controller.setCastSourceIdWithAlternateMana(objectId, null, null); diff --git a/Mage.Sets/src/mage/cards/l/Liberate.java b/Mage.Sets/src/mage/cards/l/Liberate.java index b092ff9a8a9..5ed9c9e7088 100644 --- a/Mage.Sets/src/mage/cards/l/Liberate.java +++ b/Mage.Sets/src/mage/cards/l/Liberate.java @@ -31,16 +31,17 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -50,7 +51,7 @@ import mage.target.common.TargetControlledCreaturePermanent; public class Liberate extends CardImpl { public Liberate(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); // Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step. this.getSpellAbility().addEffect(new LiberateEffect()); @@ -84,8 +85,10 @@ class LiberateEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (permanent != null && sourceObject != null) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/l/LoneRider.java b/Mage.Sets/src/mage/cards/l/LoneRider.java index 6aa798d32ad..e490bb46048 100644 --- a/Mage.Sets/src/mage/cards/l/LoneRider.java +++ b/Mage.Sets/src/mage/cards/l/LoneRider.java @@ -39,9 +39,9 @@ import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.TransformAbility; -import mage.cards.i.ItThatRidesAsOne; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.i.ItThatRidesAsOne; import mage.constants.CardType; import mage.game.Game; import mage.game.events.GameEvent; @@ -56,7 +56,7 @@ public class LoneRider extends CardImpl { private static final String ruleText = "At the beginning of the end step, if you gained 3 or more life this turn, transform {this}"; public LoneRider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add("Human"); this.subtype.add("Knight"); this.power = new MageInt(1); @@ -96,7 +96,7 @@ class YouGainedLifeCondition extends IntCompareCondition { @Override protected int getInputValue(Game game, Ability source) { int gainedLife = 0; - PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get("PlayerGainedLifeWatcher"); + PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get(PlayerGainedLifeWatcher.class.getName()); if (watcher != null) { gainedLife = watcher.getLiveGained(source.getControllerId()); } diff --git a/Mage.Sets/src/mage/cards/m/MitoticSlime.java b/Mage.Sets/src/mage/cards/m/MitoticSlime.java index c71d4ad1012..8efa4bc93da 100644 --- a/Mage.Sets/src/mage/cards/m/MitoticSlime.java +++ b/Mage.Sets/src/mage/cards/m/MitoticSlime.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,21 +20,20 @@ * 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.m; import java.util.UUID; -import mage.constants.CardType; import mage.MageInt; import mage.abilities.common.DiesTriggeredAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; import mage.game.permanent.token.OozeToken; import mage.game.permanent.token.Token; @@ -45,7 +44,7 @@ import mage.game.permanent.token.Token; public class MitoticSlime extends CardImpl { public MitoticSlime(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.subtype.add("Ooze"); this.power = new MageInt(4); @@ -74,6 +73,6 @@ class Ooze2Token extends Token { color.setGreen(true); power = new MageInt(2); toughness = new MageInt(2); - this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(new MageInt(1), new MageInt(1)), 2), false)); + this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false)); } } diff --git a/Mage.Sets/src/mage/cards/m/MystifyingMaze.java b/Mage.Sets/src/mage/cards/m/MystifyingMaze.java index 5cf08a28198..b6bd0b3ac4c 100644 --- a/Mage.Sets/src/mage/cards/m/MystifyingMaze.java +++ b/Mage.Sets/src/mage/cards/m/MystifyingMaze.java @@ -28,13 +28,15 @@ package mage.cards.m; import java.util.UUID; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -47,6 +49,7 @@ import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -61,8 +64,12 @@ public class MystifyingMaze extends CardImpl { } public MystifyingMaze(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},null); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); + + // {T}: Add Colorless to your mana pool. this.addAbility(new ColorlessManaAbility()); + + // {4}, {T}: Exile target attacking creature an opponent controls. At the beginning of the next end step, return it to the battlefield tapped under its owner's control. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MystifyingMazeEffect(), new ManaCostsImpl("{4}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); @@ -93,11 +100,14 @@ class MystifyingMazeEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - if (permanent.moveToExile(source.getSourceId(), "Mystifying Maze Exile", source.getSourceId(), game)) { + MageObject sourceObject = source.getSourceObject(game); + if (permanent != null && sourceObject != null) { + if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { //create delayed triggered ability - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, true)), source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("At the beginning of the next end step, return it to the battlefield tapped under its owner's control"); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java b/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java index da2b5068dc6..fa69a3bd4fc 100644 --- a/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java +++ b/Mage.Sets/src/mage/cards/n/NeedlebiteTrap.java @@ -28,8 +28,6 @@ package mage.cards.n; import java.util.UUID; - -import mage.constants.CardType; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.costs.AlternativeCostSourceAbility; @@ -38,6 +36,7 @@ import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; import mage.game.Game; import mage.target.TargetPlayer; import mage.watchers.common.PlayerGainedLifeWatcher; @@ -49,7 +48,7 @@ import mage.watchers.common.PlayerGainedLifeWatcher; public class NeedlebiteTrap extends CardImpl { public NeedlebiteTrap(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{5}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{5}{B}{B}"); this.subtype.add("Trap"); // If an opponent gained life this turn, you may pay {B} rather than pay Needlebite Trap's mana cost. @@ -81,7 +80,7 @@ class NeedlebiteTrapCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get("PlayerGainedLifeWatcher"); + PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get(PlayerGainedLifeWatcher.class.getName()); if (watcher != null) { for (UUID opponentId : game.getOpponents(source.getControllerId())) { if (watcher.getLiveGained(opponentId) > 0) { diff --git a/Mage.Sets/src/mage/cards/p/PadeemConsulOfInnovation.java b/Mage.Sets/src/mage/cards/p/PadeemConsulOfInnovation.java index e15b1c2e2d4..a91e0671a3a 100644 --- a/Mage.Sets/src/mage/cards/p/PadeemConsulOfInnovation.java +++ b/Mage.Sets/src/mage/cards/p/PadeemConsulOfInnovation.java @@ -54,7 +54,7 @@ public class PadeemConsulOfInnovation extends CardImpl { public PadeemConsulOfInnovation(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); this.supertype.add("Legendary"); - this.subtype.add("Veldalken"); + this.subtype.add("Vedalken"); this.subtype.add("Artificer"); this.power = new MageInt(1); this.toughness = new MageInt(4); diff --git a/Mage.Sets/src/mage/cards/p/PrototypePortal.java b/Mage.Sets/src/mage/cards/p/PrototypePortal.java index 568631d2535..f01c31aac84 100644 --- a/Mage.Sets/src/mage/cards/p/PrototypePortal.java +++ b/Mage.Sets/src/mage/cards/p/PrototypePortal.java @@ -28,9 +28,7 @@ package mage.cards.p; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -43,23 +41,24 @@ import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.FilterCard; -import mage.filter.common.FilterArtifactCard; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.players.Player; import mage.game.permanent.token.EmptyToken; +import mage.players.Player; import mage.target.TargetCard; import mage.util.CardUtil; - /** * @author nantuko */ public class PrototypePortal extends CardImpl { public PrototypePortal(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // Imprint - When Prototype Portal enters the battlefield, you may exile an artifact card from your hand. this.addAbility(new EntersBattlefieldTriggeredAbility(new PrototypePortalEffect(), true)); @@ -102,8 +101,6 @@ public class PrototypePortal extends CardImpl { class PrototypePortalEffect extends OneShotEffect { - private static final FilterCard filter = new FilterArtifactCard(); - public PrototypePortalEffect() { super(Outcome.Benefit); staticText = "exile an artifact card from your hand"; @@ -115,21 +112,24 @@ class PrototypePortalEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player.getHand().size() > 0) { - TargetCard target = new TargetCard(Zone.HAND, filter); - player.choose(Outcome.Benefit, player.getHand(), target, game); - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - card.moveToExile(getId(), "Prototype Portal (Imprint)", source.getSourceId(), game); - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - permanent.imprint(card.getId(), game); + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller != null && sourceObject != null) { + if (controller.getHand().size() > 0) { + TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_ARTIFACT); + controller.choose(Outcome.Benefit, controller.getHand(), target, game); + Card card = controller.getHand().get(target.getFirstTarget(), game); + if (card != null) { + controller.moveCardsToExile(card, source, game, true, source.getSourceId(), sourceObject.getIdName() + " (Imprint)"); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + permanent.imprint(card.getId(), game); + } } - return true; } + return true; } - return true; + return false; } @Override @@ -176,4 +176,3 @@ class PrototypePortalCreateTokenEffect extends OneShotEffect { } } - diff --git a/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java b/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java index dba200210f6..699e889bfee 100644 --- a/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java +++ b/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java @@ -56,6 +56,7 @@ public class QuicksmithGenius extends CardImpl { public QuicksmithGenius(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}"); + this.subtype.add("Human"); this.subtype.add("Artificer"); this.power = new MageInt(3); this.toughness = new MageInt(2); diff --git a/Mage.Sets/src/mage/cards/r/RavenousBaboons.java b/Mage.Sets/src/mage/cards/r/RavenousBaboons.java index 689099ceea2..fac62e35761 100644 --- a/Mage.Sets/src/mage/cards/r/RavenousBaboons.java +++ b/Mage.Sets/src/mage/cards/r/RavenousBaboons.java @@ -45,7 +45,7 @@ public class RavenousBaboons extends CardImpl { public RavenousBaboons(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); - this.subtype.add("Ape"); + this.subtype.add("Monkey"); this.power = new MageInt(2); this.toughness = new MageInt(2); diff --git a/Mage.Sets/src/mage/cards/s/SabaccGame.java b/Mage.Sets/src/mage/cards/s/SabaccGame.java index 3c2e179ba42..54f70857650 100644 --- a/Mage.Sets/src/mage/cards/s/SabaccGame.java +++ b/Mage.Sets/src/mage/cards/s/SabaccGame.java @@ -39,7 +39,7 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.TargetController; import mage.filter.FilterPermanent; -import mage.filter.predicate.other.PlayerIdPredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; @@ -60,7 +60,7 @@ public class SabaccGame extends CardImpl { } public SabaccGame(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}"); // Almost the same as unimplemented Mogg Assassin from Exodus // Not exactly. Because the permanent choosen by opponent does not have the target word in rule text it is chosen during resolution. @@ -86,7 +86,7 @@ public class SabaccGame extends CardImpl { class SabaccGameEffect extends OneShotEffect { public SabaccGameEffect() { - super(Outcome.Benefit); + super(Outcome.Detriment); this.staticText = "Choose target permanent an opponent controls. That opponent chooses a permanent you control. " + "Flip a coin. If you win the flip, gain control of the permanent you chose. " + "If you lose the flip, your opponent gains control of the permanent they chose"; @@ -110,7 +110,7 @@ class SabaccGameEffect extends OneShotEffect { Player opponent = game.getPlayer(targetPermanent.getControllerId()); if (opponent != null) { FilterPermanent filter = new FilterPermanent("permanent controlled by " + controller.getName()); - filter.add(new PlayerIdPredicate(controller.getId())); + filter.add(new ControllerIdPredicate(controller.getId())); TargetPermanent target = new TargetPermanent(1, 1, filter, true); Permanent chosenPermanent = null; if (target.chooseTarget(outcome, opponent.getId(), source, game)) { diff --git a/Mage.Sets/src/mage/cards/s/Skybind.java b/Mage.Sets/src/mage/cards/s/Skybind.java index 713b9b3c91a..a464bdd26f9 100644 --- a/Mage.Sets/src/mage/cards/s/Skybind.java +++ b/Mage.Sets/src/mage/cards/s/Skybind.java @@ -31,19 +31,20 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.abilityword.ConstellationAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -58,7 +59,7 @@ public class Skybind extends CardImpl { } public Skybind(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}"); // Constellation — When Skybind or another enchantment enters the battlefield under your control, exile target nonenchantment permanent. Return that card to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new ConstellationAbility(new SkybindEffect(), false); @@ -94,8 +95,10 @@ class SkybindEffect extends OneShotEffect { if (permanent != null && sourcePermanent != null) { if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) { //create delayed triggered ability - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(getTargetPointer().getFirst(game, source), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/s/Soulflayer.java b/Mage.Sets/src/mage/cards/s/Soulflayer.java index 5e70c397964..0f530d9dd7f 100644 --- a/Mage.Sets/src/mage/cards/s/Soulflayer.java +++ b/Mage.Sets/src/mage/cards/s/Soulflayer.java @@ -28,7 +28,6 @@ package mage.cards.s; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.UUID; import mage.MageInt; @@ -52,6 +51,7 @@ import mage.abilities.keyword.VigilanceAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.Cards; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -69,7 +69,7 @@ import mage.util.CardUtil; public class Soulflayer extends CardImpl { public Soulflayer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); this.subtype.add("Demon"); this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -92,7 +92,6 @@ public class Soulflayer extends CardImpl { } } - class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { private Set abilitiesToAdd; @@ -126,13 +125,13 @@ class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { abilitiesToAdd = new HashSet<>(); this.objectReference = new MageObjectReference(permanent, game); String keyString = CardUtil.getCardZoneString("delvedCards", source.getSourceId(), game, true); - List delvedCards = (List) game.getState().getValue(keyString); + Cards delvedCards = (Cards) game.getState().getValue(keyString); if (delvedCards != null) { - for(Card card: delvedCards) { + for (Card card : delvedCards.getCards(game)) { if (!card.getCardType().contains(CardType.CREATURE)) { continue; } - for (Ability cardAbility: card.getAbilities()) { + for (Ability cardAbility : card.getAbilities()) { if (cardAbility instanceof FlyingAbility) { abilitiesToAdd.add(FlyingAbility.getInstance()); } @@ -170,14 +169,12 @@ class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { } } } - for (Ability ability: abilitiesToAdd) { + for (Ability ability : abilitiesToAdd) { permanent.addAbility(ability, source.getSourceId(), game); } return true; - } else { - if (abilitiesToAdd != null) { - abilitiesToAdd = null; - } + } else if (abilitiesToAdd != null) { + abilitiesToAdd = null; } return false; } diff --git a/Mage.Sets/src/mage/cards/s/StandardBearer.java b/Mage.Sets/src/mage/cards/s/StandardBearer.java new file mode 100644 index 00000000000..111bc6b1d64 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/StandardBearer.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.s; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ruleModifying.TargetsHaveToTargetPermanentIfAbleEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; + +/** + * + * @author LevelX2 + */ +public class StandardBearer extends CardImpl { + + public StandardBearer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + + this.subtype.add("Human"); + this.subtype.add("Flagbearer"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TargetsHaveToTargetPermanentIfAbleEffect(new FilterPermanent("Flagbearer", "one Flagbearer")))); + } + + public StandardBearer(final StandardBearer card) { + super(card); + } + + @Override + public StandardBearer copy() { + return new StandardBearer(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java b/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java index d7735122bbc..4a4581d7c2d 100644 --- a/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java +++ b/Mage.Sets/src/mage/cards/s/SuddenDisappearance.java @@ -27,23 +27,27 @@ */ package mage.cards.s; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.filter.common.FilterNonlandPermanent; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPlayer; +import mage.target.targetpointer.FixedTargets; /** * @@ -52,7 +56,7 @@ import mage.target.TargetPlayer; public class SuddenDisappearance extends CardImpl { public SuddenDisappearance(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{W}"); // Exile all nonland permanents target player controls. Return the exiled cards to the battlefield under their owner's control at the beginning of the next end step. this.getSpellAbility().addEffect(new SuddenDisappearanceEffect()); @@ -88,14 +92,17 @@ class SuddenDisappearanceEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = source.getSourceObject(game); if (controller != null && sourceObject != null) { - List perms = game.getBattlefield().getAllActivePermanents(filter, source.getFirstTarget(), game); - if (perms.size() > 0) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getFirstTarget(), game)) { - controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); + Set permsSet = new HashSet<>(game.getBattlefield().getAllActivePermanents(filter, source.getFirstTarget(), game)); + if (permsSet.size() > 0) { + controller.moveCardsToExile(permsSet, source, game, true, source.getSourceId(), sourceObject.getIdName()); + Cards targets = new CardsImpl(); + for (Card card : permsSet) { + targets.add(card.getId()); } - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); - game.addDelayedTriggeredAbility(delayedAbility, source); - + Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); + effect.setText("Return the exiled cards to the battlefield under their owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTargets(targets, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); } return true; } diff --git a/Mage.Sets/src/mage/cards/t/Tamanoa.java b/Mage.Sets/src/mage/cards/t/Tamanoa.java new file mode 100644 index 00000000000..893bd2d0b78 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/Tamanoa.java @@ -0,0 +1,114 @@ +/* + * 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.t; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.dynamicvalue.common.NumericSetToEffectValues; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author LevelX2 + */ +public class Tamanoa extends CardImpl { + + public Tamanoa(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}{W}"); + + this.subtype.add("Spirit"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Whenever a noncreature source you control deals damage, you gain that much life. + Ability ability = new TamanoaDealsDamageTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(new NumericSetToEffectValues("that much", "damage")), false); + + this.addAbility(ability); + } + + public Tamanoa(final Tamanoa card) { + super(card); + } + + @Override + public Tamanoa copy() { + return new Tamanoa(this); + } +} + +class TamanoaDealsDamageTriggeredAbility extends TriggeredAbilityImpl { + + public TamanoaDealsDamageTriggeredAbility(Zone zone, Effect effect, boolean optional) { + super(zone, effect, optional); + } + + public TamanoaDealsDamageTriggeredAbility(final TamanoaDealsDamageTriggeredAbility ability) { + super(ability); + } + + @Override + public TamanoaDealsDamageTriggeredAbility copy() { + return new TamanoaDealsDamageTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.DAMAGED_CREATURE) + || event.getType().equals(GameEvent.EventType.DAMAGED_PLAYER) + || event.getType().equals(GameEvent.EventType.DAMAGED_PLANESWALKER); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + MageObject eventSourceObject = game.getObject(event.getSourceId()); + if (eventSourceObject != null && !eventSourceObject.getCardType().contains(CardType.CREATURE)) { + if (getControllerId().equals(game.getControllerId(event.getSourceId()))) { + this.getEffects().stream().forEach((effect) -> { + effect.setValue("damage", event.getAmount()); + }); + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a noncreature source you control deals damage, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/cards/t/TamiyosJournal.java b/Mage.Sets/src/mage/cards/t/TamiyosJournal.java index ed83d0d5467..e56cc2ba74f 100644 --- a/Mage.Sets/src/mage/cards/t/TamiyosJournal.java +++ b/Mage.Sets/src/mage/cards/t/TamiyosJournal.java @@ -50,18 +50,18 @@ import mage.target.common.TargetControlledPermanent; * @author fireshoes */ public class TamiyosJournal extends CardImpl { - + private static final FilterControlledPermanent filter = new FilterControlledPermanent("three Clues"); - + static { filter.add(new SubtypePredicate("Clue")); } public TamiyosJournal(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); this.supertype.add("Legendary"); - // At the beginning of your upkeep, investigate. + // At the beginning of your upkeep, investigate (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new InvestigateEffect(), TargetController.YOU, false)); // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. diff --git a/Mage.Sets/src/mage/cards/t/TwilekSeductess.java b/Mage.Sets/src/mage/cards/t/TwilekSeductess.java index 527792ea106..3ff8ee3d696 100644 --- a/Mage.Sets/src/mage/cards/t/TwilekSeductess.java +++ b/Mage.Sets/src/mage/cards/t/TwilekSeductess.java @@ -41,13 +41,13 @@ import mage.constants.CardType; public class TwilekSeductess extends CardImpl { public TwilekSeductess(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add("Twi'lek"); this.power = new MageInt(2); this.toughness = new MageInt(2); // Whenever Twi'lek Seductess attacks, you may have target creature defending player controls untap and block it if able. - this.addAbility(new ProvokeAbility()); + this.addAbility(new ProvokeAbility("Whenever {this} attacks, you may have target creature defending player controls untap and block it if able.")); } diff --git a/Mage.Sets/src/mage/cards/u/UbaMask.java b/Mage.Sets/src/mage/cards/u/UbaMask.java index 1913e259745..8c310390549 100644 --- a/Mage.Sets/src/mage/cards/u/UbaMask.java +++ b/Mage.Sets/src/mage/cards/u/UbaMask.java @@ -27,10 +27,7 @@ */ package mage.cards.u; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; -import java.util.Set; import java.util.UUID; import mage.MageObject; import mage.MageObjectReference; @@ -59,7 +56,7 @@ public class UbaMask extends CardImpl { public final static String UBA_MASK_VALUE_KEY = "ubaMaskExiledCards"; public UbaMask(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // If a player would draw a card, that player exiles that card face up instead. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UbaMaskReplacementEffect())); @@ -97,7 +94,9 @@ class UbaMaskReplacementEffect extends ReplacementEffectImpl { @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { if (event.getType().equals(GameEvent.EventType.PLAY_TURN)) { - game.getState().setValue(UbaMask.UBA_MASK_VALUE_KEY, null); + for (UUID playerId : game.getPlayerList()) { + game.getState().setValue(UbaMask.UBA_MASK_VALUE_KEY + source.getSourceId() + playerId, null); + } return false; } MageObject sourceObject = source.getSourceObject(game); @@ -106,15 +105,10 @@ class UbaMaskReplacementEffect extends ReplacementEffectImpl { Card card = player.getLibrary().getFromTop(game); if (card != null) { player.moveCardsToExile(card, source, game, true, source.getId(), sourceObject.getIdName()); - Map> exiledCards = (Map) game.getState().getValue(UbaMask.UBA_MASK_VALUE_KEY); - if (exiledCards == null) { - exiledCards = new HashMap<>(); - game.getState().setValue(UbaMask.UBA_MASK_VALUE_KEY, exiledCards); - } - HashSet exiledCardsByPlayer = exiledCards.get(event.getPlayerId()); + HashSet exiledCardsByPlayer = (HashSet) game.getState().getValue(UbaMask.UBA_MASK_VALUE_KEY + event.getPlayerId()); if (exiledCardsByPlayer == null) { exiledCardsByPlayer = new HashSet<>(); - exiledCards.put(event.getPlayerId(), exiledCardsByPlayer); + game.getState().setValue(UbaMask.UBA_MASK_VALUE_KEY + event.getPlayerId(), exiledCardsByPlayer); } exiledCardsByPlayer.add(new MageObjectReference(card.getId(), game)); } @@ -158,12 +152,9 @@ class UbaMaskPlayEffect extends AsThoughEffectImpl { public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { Card card = game.getCard(objectId); if (card != null && affectedControllerId.equals(card.getOwnerId()) && game.getState().getZone(card.getId()) == Zone.EXILED) { - Map> exiledCards = (Map) game.getState().getValue(UbaMask.UBA_MASK_VALUE_KEY); - if (exiledCards != null) { - Set exiledCardsByPlayer = exiledCards.get(affectedControllerId); - if (exiledCardsByPlayer != null) { - return exiledCardsByPlayer.contains(new MageObjectReference(card, game)); - } + HashSet exiledCardsByPlayer = (HashSet) game.getState().getValue(UbaMask.UBA_MASK_VALUE_KEY + affectedControllerId); + if (exiledCardsByPlayer != null) { + return exiledCardsByPlayer.contains(new MageObjectReference(card, game)); } } return false; diff --git a/Mage.Sets/src/mage/cards/v/VedalkenBlademaster.java b/Mage.Sets/src/mage/cards/v/VedalkenBlademaster.java index 801d13116fa..383ac2ab26c 100644 --- a/Mage.Sets/src/mage/cards/v/VedalkenBlademaster.java +++ b/Mage.Sets/src/mage/cards/v/VedalkenBlademaster.java @@ -42,8 +42,8 @@ public class VedalkenBlademaster extends CardImpl { public VedalkenBlademaster(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); - this.subtype.add("Vedaklen"); - this.subtype.add("Solider"); + this.subtype.add("Vedalken"); + this.subtype.add("Soldier"); this.power = new MageInt(2); this.toughness = new MageInt(3); diff --git a/Mage.Sets/src/mage/cards/v/VenserTheSojourner.java b/Mage.Sets/src/mage/cards/v/VenserTheSojourner.java index aa983cc3555..2f134772ffa 100644 --- a/Mage.Sets/src/mage/cards/v/VenserTheSojourner.java +++ b/Mage.Sets/src/mage/cards/v/VenserTheSojourner.java @@ -38,7 +38,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.effects.common.GetEmblemEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.abilities.effects.common.combat.CantBeBlockedAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -74,7 +74,7 @@ public class VenserTheSojourner extends CardImpl { } public VenserTheSojourner(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{W}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{W}{U}"); this.subtype.add("Venser"); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); @@ -127,8 +127,10 @@ class VenserTheSojournerEffect extends OneShotEffect { if (permanent != null) { if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)), source); + Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(); + effect.setText("Return it to the battlefield under your control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(permanent.getId(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/v/VesselOfNascency.java b/Mage.Sets/src/mage/cards/v/VesselOfNascency.java index c0a8d40d57e..214a8e29160 100644 --- a/Mage.Sets/src/mage/cards/v/VesselOfNascency.java +++ b/Mage.Sets/src/mage/cards/v/VesselOfNascency.java @@ -56,7 +56,7 @@ import mage.target.TargetCard; public class VesselOfNascency extends CardImpl { public VesselOfNascency(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); // {1}{G}, Sacrifice Vessel of Nascency: Reveal the top four cards of your library. You may put an artifact, creature, enchantment, land, or // planeswalker card from among them into your hand. Put the rest into your graveyard. diff --git a/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java b/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java index a666a7fc3a0..7364a7ee4e5 100644 --- a/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java +++ b/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java @@ -58,7 +58,7 @@ public class VesuvanDoppelganger extends CardImpl { private static final String rule = "You may have {this} enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains \"At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.\""; public VesuvanDoppelganger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); this.subtype.add("Shapeshifter"); this.power = new MageInt(0); this.toughness = new MageInt(0); @@ -94,7 +94,11 @@ class VesuvanDoppelgangerCopyEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - final Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent == null) { + permanent = game.getPermanentEntering(source.getSourceId()); + } + final Permanent sourcePermanent = permanent; if (controller != null && sourcePermanent != null) { Target target = new TargetPermanent(new FilterCreaturePermanent("target creature (you copy from)")); target.setRequired(true); diff --git a/Mage.Sets/src/mage/cards/v/VoyagerStaff.java b/Mage.Sets/src/mage/cards/v/VoyagerStaff.java index 287260a2be5..5308eb294e1 100644 --- a/Mage.Sets/src/mage/cards/v/VoyagerStaff.java +++ b/Mage.Sets/src/mage/cards/v/VoyagerStaff.java @@ -33,8 +33,9 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -44,6 +45,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -52,7 +54,7 @@ import mage.target.common.TargetCreaturePermanent; public class VoyagerStaff extends CardImpl { public VoyagerStaff(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); // {2}, Sacrifice Voyager Staff: Exile target creature. Return the exiled card to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new VoyagerStaffEffect(), new GenericManaCost(2)); @@ -90,8 +92,10 @@ class VoyagerStaffEffect extends OneShotEffect { if (controller != null && creature != null && sourcePermanent != null) { if (controller.moveCardToExileWithInfo(creature, source.getSourceId(), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)), source); + Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(); + effect.setText("Return the exiled card to the battlefield under its owner's control at the beginning of the next end step"); + effect.setTargetPointer(new FixedTarget(creature.getId(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/cards/w/WarCadence.java b/Mage.Sets/src/mage/cards/w/WarCadence.java index 8db1ee29bab..76dd94dfbb4 100644 --- a/Mage.Sets/src/mage/cards/w/WarCadence.java +++ b/Mage.Sets/src/mage/cards/w/WarCadence.java @@ -51,11 +51,10 @@ import mage.players.Player; public class WarCadence extends CardImpl { public WarCadence(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); // {X}{R}: This turn, creatures can't block unless their controller pays {X} for each blocking creature he or she controls. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WarCadenceReplacementEffect(), new ManaCostsImpl("{X}{R}") )); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WarCadenceReplacementEffect(), new ManaCostsImpl("{X}{R}"))); } @@ -73,12 +72,12 @@ class WarCadenceReplacementEffect extends ReplacementEffectImpl { DynamicValue xCosts = new ManacostVariableValue(); - WarCadenceReplacementEffect ( ) { + WarCadenceReplacementEffect() { super(Duration.EndOfTurn, Outcome.Neutral); staticText = "This turn, creatures can't block unless their controller pays {X} for each blocking creature he or she controls"; } - WarCadenceReplacementEffect ( WarCadenceReplacementEffect effect ) { + WarCadenceReplacementEffect(WarCadenceReplacementEffect effect) { super(effect); } @@ -88,10 +87,10 @@ class WarCadenceReplacementEffect extends ReplacementEffectImpl { if (player != null) { int amount = xCosts.calculate(game, source, this); if (amount > 0) { - String mana = new StringBuilder("{").append(amount).append("}").toString(); + String mana = "{" + amount + "}"; ManaCostsImpl cost = new ManaCostsImpl(mana); - if ( cost.canPay(source, source.getSourceId(), event.getPlayerId(), game) && - player.chooseUse(Outcome.Benefit, new StringBuilder("Pay ").append(mana).append(" to declare blocker?").toString(), source, game) ) { + if (cost.canPay(source, source.getSourceId(), event.getPlayerId(), game) + && player.chooseUse(Outcome.Benefit, "Pay " + mana + " to declare blocker?", source, game)) { if (cost.payOrRollback(source, game, source.getSourceId(), event.getPlayerId())) { return false; } @@ -106,7 +105,7 @@ class WarCadenceReplacementEffect extends ReplacementEffectImpl { public boolean checksEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.DECLARE_BLOCKER; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { return true; diff --git a/Mage.Sets/src/mage/cards/w/WarTax.java b/Mage.Sets/src/mage/cards/w/WarTax.java new file mode 100644 index 00000000000..2beac05396a --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WarTax.java @@ -0,0 +1,118 @@ +/* + * 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.w; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.ReplacementEffectImpl; +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.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; + +/** + * + * + * @author HCrescent original code by LevelX2 edited from War Cadence + */ +public class WarTax extends CardImpl { + + public WarTax(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + // {X}{U}: This turn, creatures can't attack unless their controller pays {X} for each attacking creature he or she controls. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WarTaxReplacementEffect(), new ManaCostsImpl("{X}{U}"))); + } + + public WarTax(final WarTax card) { + super(card); + } + + @Override + public WarTax copy() { + return new WarTax(this); + } +} + +class WarTaxReplacementEffect extends ReplacementEffectImpl { + + DynamicValue xCosts = new ManacostVariableValue(); + + WarTaxReplacementEffect() { + super(Duration.EndOfTurn, Outcome.Neutral); + staticText = "This turn, creatures can't attack unless their controller pays {X} for each attacking creature he or she controls"; + } + + WarTaxReplacementEffect(WarTaxReplacementEffect effect) { + super(effect); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if (player != null) { + int amount = xCosts.calculate(game, source, this); + if (amount > 0) { + String mana = "{" + amount + "}"; + ManaCostsImpl cost = new ManaCostsImpl(mana); + if (cost.canPay(source, source.getSourceId(), event.getPlayerId(), game) + && player.chooseUse(Outcome.Benefit, "Pay " + mana + " to declare attacker?", source, game)) { + if (cost.payOrRollback(source, game, source.getSourceId(), event.getPlayerId())) { + return false; + } + } + return true; + } + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public WarTaxReplacementEffect copy() { + return new WarTaxReplacementEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/w/WretchedGryff.java b/Mage.Sets/src/mage/cards/w/WretchedGryff.java index dc14bae6b0f..abad76feaef 100644 --- a/Mage.Sets/src/mage/cards/w/WretchedGryff.java +++ b/Mage.Sets/src/mage/cards/w/WretchedGryff.java @@ -45,18 +45,18 @@ import mage.constants.CardType; public class WretchedGryff extends CardImpl { public WretchedGryff(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{7}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}"); this.subtype.add("Eldrazi"); this.subtype.add("Hippogriff"); this.power = new MageInt(3); this.toughness = new MageInt(4); - // Emerge {5}{U} + // Emerge {5}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost.) this.addAbility(new EmergeAbility(this, new ManaCostsImpl<>("{5}{U}"))); // When you cast Wretched Gryff, draw a card. this.addAbility(new CastSourceTriggeredAbility(new DrawCardSourceControllerEffect(1))); - + // Flying this.addAbility(FlyingAbility.getInstance()); } diff --git a/Mage.Sets/src/mage/cards/y/YodaJediMaster.java b/Mage.Sets/src/mage/cards/y/YodaJediMaster.java index 90243070b8a..0f6d7935b53 100644 --- a/Mage.Sets/src/mage/cards/y/YodaJediMaster.java +++ b/Mage.Sets/src/mage/cards/y/YodaJediMaster.java @@ -38,7 +38,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; -import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControllerEffect; import mage.abilities.keyword.HexproofAbility; @@ -58,6 +58,7 @@ import mage.game.Game; import mage.game.command.Emblem; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; /** * @@ -73,7 +74,7 @@ public class YodaJediMaster extends CardImpl { } public YodaJediMaster(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{G}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{U}"); this.subtype.add("Yoda"); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); @@ -108,7 +109,7 @@ class YodaJediMasterEffect extends OneShotEffect { public YodaJediMasterEffect() { super(Outcome.Detriment); - staticText = "Exile another target permanent you own. Return that card to the battlefield under your control at the beggining of your next end step"; + staticText = "Exile another target permanent you own. Return that card to the battlefield under your control at the beginning of your next end step"; } public YodaJediMasterEffect(final YodaJediMasterEffect effect) { @@ -122,8 +123,10 @@ class YodaJediMasterEffect extends OneShotEffect { if (permanent != null && sourcePermanent != null) { if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) { //create delayed triggered ability - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); - game.addDelayedTriggeredAbility(delayedAbility, source); + Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(); + effect.setText("Return that card to the battlefield under your control at the beginning of your next end step"); + effect.setTargetPointer(new FixedTarget(permanent.getId(), game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); return true; } } diff --git a/Mage.Sets/src/mage/sets/AetherRevolt.java b/Mage.Sets/src/mage/sets/AetherRevolt.java index 6907a28cd60..6f3887a87d4 100644 --- a/Mage.Sets/src/mage/sets/AetherRevolt.java +++ b/Mage.Sets/src/mage/sets/AetherRevolt.java @@ -28,14 +28,12 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import mage.constants.SetType; -import mage.constants.Rarity; /** * @@ -52,7 +50,7 @@ public class AetherRevolt extends ExpansionSet { protected final List savedSpecialLand = new ArrayList<>(); private AetherRevolt() { - super("Aether Revolt", "AER", "mage.sets.aetherrevolt", new GregorianCalendar(2017, 1, 20).getTime(), SetType.EXPANSION); + super("Aether Revolt", "AER", ExpansionSet.buildDate(2017, 1, 20), SetType.EXPANSION); this.blockName = "Kaladesh"; this.hasBoosters = true; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/AjaniVsNicolBolas.java b/Mage.Sets/src/mage/sets/AjaniVsNicolBolas.java index bf4809c244c..8e1b36ac4cc 100644 --- a/Mage.Sets/src/mage/sets/AjaniVsNicolBolas.java +++ b/Mage.Sets/src/mage/sets/AjaniVsNicolBolas.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class AjaniVsNicolBolas extends ExpansionSet { } private AjaniVsNicolBolas() { - super("Duel Decks: Ajani vs. Nicol Bolas", "DDH", "mage.sets.ajanivsnicolbolas", new GregorianCalendar(2011, 9, 2).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Ajani vs. Nicol Bolas", "DDH", ExpansionSet.buildDate(2011, 9, 2), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Ageless Entity", 18, Rarity.RARE, mage.cards.a.AgelessEntity.class)); diff --git a/Mage.Sets/src/mage/sets/AlaraReborn.java b/Mage.Sets/src/mage/sets/AlaraReborn.java index 4ce9b174786..5ac7e1bc0ce 100644 --- a/Mage.Sets/src/mage/sets/AlaraReborn.java +++ b/Mage.Sets/src/mage/sets/AlaraReborn.java @@ -27,7 +27,6 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.Rarity; import mage.constants.SetType; @@ -45,7 +44,7 @@ public class AlaraReborn extends ExpansionSet { } private AlaraReborn() { - super("Alara Reborn", "ARB", "mage.sets.alarareborn", new GregorianCalendar(2009, 3, 25).getTime(), SetType.EXPANSION); + super("Alara Reborn", "ARB", ExpansionSet.buildDate(2009, 3, 25), SetType.EXPANSION); this.blockName = "Shards of Alara"; this.parentSet = ShardsOfAlara.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Alliances.java b/Mage.Sets/src/mage/sets/Alliances.java index cc9a3ecb4fb..84436f2de2f 100644 --- a/Mage.Sets/src/mage/sets/Alliances.java +++ b/Mage.Sets/src/mage/sets/Alliances.java @@ -3,12 +3,8 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class Alliances extends ExpansionSet { private static final Alliances fINSTANCE = new Alliances(); @@ -18,7 +14,7 @@ public class Alliances extends ExpansionSet { } private Alliances() { - super("Alliances", "ALL", "mage.sets.alliances", new GregorianCalendar(1996, 6, 10).getTime(), SetType.EXPANSION); + super("Alliances", "ALL", ExpansionSet.buildDate(1996, 6, 10), SetType.EXPANSION); this.blockName = "Ice Age"; this.parentSet = IceAge.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Amonkhet.java b/Mage.Sets/src/mage/sets/Amonkhet.java index 10428b067dd..902bdd5d843 100644 --- a/Mage.Sets/src/mage/sets/Amonkhet.java +++ b/Mage.Sets/src/mage/sets/Amonkhet.java @@ -27,11 +27,8 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +43,7 @@ public class Amonkhet extends ExpansionSet { } private Amonkhet() { - super("Amonkhet", "AKH", "mage.sets.amonkhet", new GregorianCalendar(2017, 4, 28).getTime(), SetType.EXPANSION); + super("Amonkhet", "AKH", ExpansionSet.buildDate(2017, 4, 28), SetType.EXPANSION); this.blockName = "Amonkhet"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java b/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java index 2b8ac0d9fcf..0271f023e1d 100644 --- a/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java +++ b/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java @@ -27,20 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class AnthologyDivineVsDemonic extends ExpansionSet { + private static final AnthologyDivineVsDemonic fINSTANCE = new AnthologyDivineVsDemonic(); public static AnthologyDivineVsDemonic getInstance() { @@ -48,7 +45,7 @@ public class AnthologyDivineVsDemonic extends ExpansionSet { } private AnthologyDivineVsDemonic() { - super("Duel Decks: Anthology, Divine vs. Demonic", "DD3DVD", "mage.sets.anthologydivinevsdemonic", new GregorianCalendar(2014, 12, 5).getTime(), + super("Duel Decks: Anthology, Divine vs. Demonic", "DD3DVD", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java b/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java index 6b59651062e..658947e58de 100644 --- a/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java +++ b/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java @@ -27,20 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class AnthologyElvesVsGoblins extends ExpansionSet { + private static final AnthologyElvesVsGoblins fINSTANCE = new AnthologyElvesVsGoblins(); public static AnthologyElvesVsGoblins getInstance() { @@ -48,7 +45,7 @@ public class AnthologyElvesVsGoblins extends ExpansionSet { } private AnthologyElvesVsGoblins() { - super("Duel Decks: Anthology, Elves vs. Goblins", "DD3EVG", "mage.sets.anthologyelvesvsgoblins", new GregorianCalendar(2014, 12, 5).getTime(), + super("Duel Decks: Anthology, Elves vs. Goblins", "DD3EVG", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java b/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java index 014a80dab45..12db89ee5e3 100644 --- a/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java +++ b/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java @@ -27,20 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class AnthologyGarrukVsLiliana extends ExpansionSet { + private static final AnthologyGarrukVsLiliana fINSTANCE = new AnthologyGarrukVsLiliana(); public static AnthologyGarrukVsLiliana getInstance() { @@ -48,7 +45,7 @@ public class AnthologyGarrukVsLiliana extends ExpansionSet { } private AnthologyGarrukVsLiliana() { - super("Duel Decks: Anthology, Garruk vs. Liliana", "DD3GVL", "mage.sets.anthologygarrukvsliliana", new GregorianCalendar(2014, 12, 5).getTime(), + super("Duel Decks: Anthology, Garruk vs. Liliana", "DD3GVL", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java b/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java index 142eef89ffc..111ca0739ca 100644 --- a/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java @@ -27,20 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class AnthologyJaceVsChandra extends ExpansionSet { + private static final AnthologyJaceVsChandra fINSTANCE = new AnthologyJaceVsChandra(); public static AnthologyJaceVsChandra getInstance() { @@ -48,7 +45,7 @@ public class AnthologyJaceVsChandra extends ExpansionSet { } private AnthologyJaceVsChandra() { - super("Duel Decks: Anthology, Jace vs. Chandra", "DD3JVC", "mage.sets.anthologyjacevschandra", new GregorianCalendar(2014, 12, 5).getTime(), + super("Duel Decks: Anthology, Jace vs. Chandra", "DD3JVC", ExpansionSet.buildDate(2014, 12, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks: Anthology"; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Antiquities.java b/Mage.Sets/src/mage/sets/Antiquities.java index b0c3dbebf52..c939d1c7093 100644 --- a/Mage.Sets/src/mage/sets/Antiquities.java +++ b/Mage.Sets/src/mage/sets/Antiquities.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class Antiquities extends ExpansionSet { } private Antiquities() { - super("Antiquities", "ATQ", "mage.sets.antiquities", new GregorianCalendar(1994, 2, 1).getTime(), SetType.EXPANSION); + super("Antiquities", "ATQ", ExpansionSet.buildDate(1994, 2, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Apocalypse.java b/Mage.Sets/src/mage/sets/Apocalypse.java index 17383d68040..db131c49984 100644 --- a/Mage.Sets/src/mage/sets/Apocalypse.java +++ b/Mage.Sets/src/mage/sets/Apocalypse.java @@ -1,151 +1,151 @@ -package mage.sets; - -import java.util.GregorianCalendar; - -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; - -public class Apocalypse extends ExpansionSet { - private static final Apocalypse fINSTANCE = new Apocalypse(); - - public static Apocalypse getInstance() { - return fINSTANCE; - } - - private Apocalypse() { - super("Apocalypse", "APC", "mage.sets.apocalypse", new GregorianCalendar(2001, 5, 1).getTime(), SetType.EXPANSION); - this.blockName = "Invasion"; - this.parentSet = Invasion.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aether Mutation", 91, Rarity.UNCOMMON, mage.cards.a.AetherMutation.class)); - cards.add(new SetCardInfo("Ana Disciple", 73, Rarity.COMMON, mage.cards.a.AnaDisciple.class)); - cards.add(new SetCardInfo("Anavolver", 75, Rarity.RARE, mage.cards.a.Anavolver.class)); - cards.add(new SetCardInfo("Angelfire Crusader", 1, Rarity.COMMON, mage.cards.a.AngelfireCrusader.class)); - cards.add(new SetCardInfo("Battlefield Forge", 139, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); - cards.add(new SetCardInfo("Bloodfire Colossus", 55, Rarity.RARE, mage.cards.b.BloodfireColossus.class)); - cards.add(new SetCardInfo("Bloodfire Dwarf", 56, Rarity.COMMON, mage.cards.b.BloodfireDwarf.class)); - cards.add(new SetCardInfo("Bloodfire Kavu", 58, Rarity.UNCOMMON, mage.cards.b.BloodfireKavu.class)); - cards.add(new SetCardInfo("Bog Gnarr", 76, Rarity.COMMON, mage.cards.b.BogGnarr.class)); - cards.add(new SetCardInfo("Brass Herald", 133, Rarity.UNCOMMON, mage.cards.b.BrassHerald.class)); - cards.add(new SetCardInfo("Caves of Koilos", 140, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); - cards.add(new SetCardInfo("Ceta Disciple", 19, Rarity.COMMON, mage.cards.c.CetaDisciple.class)); - cards.add(new SetCardInfo("Cetavolver", 21, Rarity.RARE, mage.cards.c.Cetavolver.class)); - cards.add(new SetCardInfo("Coastal Drake", 22, Rarity.COMMON, mage.cards.c.CoastalDrake.class)); - cards.add(new SetCardInfo("Consume Strength", 93, Rarity.COMMON, mage.cards.c.ConsumeStrength.class)); - cards.add(new SetCardInfo("Cromat", 94, Rarity.RARE, mage.cards.c.Cromat.class)); - cards.add(new SetCardInfo("Dead Ringers", 37, Rarity.COMMON, mage.cards.d.DeadRingers.class)); - cards.add(new SetCardInfo("Death Grasp", 95, Rarity.RARE, mage.cards.d.DeathGrasp.class)); - cards.add(new SetCardInfo("Death Mutation", 96, Rarity.UNCOMMON, mage.cards.d.DeathMutation.class)); - cards.add(new SetCardInfo("Dega Disciple", 4, Rarity.COMMON, mage.cards.d.DegaDisciple.class)); - cards.add(new SetCardInfo("Degavolver", 6, Rarity.RARE, mage.cards.d.Degavolver.class)); - cards.add(new SetCardInfo("Desolation Angel", 38, Rarity.RARE, mage.cards.d.DesolationAngel.class)); - cards.add(new SetCardInfo("Desolation Giant", 59, Rarity.RARE, mage.cards.d.DesolationGiant.class)); - cards.add(new SetCardInfo("Diversionary Tactics", 7, Rarity.UNCOMMON, mage.cards.d.DiversionaryTactics.class)); - cards.add(new SetCardInfo("Divine Light", 8, Rarity.COMMON, mage.cards.d.DivineLight.class)); - cards.add(new SetCardInfo("Dodecapod", 134, Rarity.UNCOMMON, mage.cards.d.Dodecapod.class)); - cards.add(new SetCardInfo("Dragon Arch", 135, Rarity.UNCOMMON, mage.cards.d.DragonArch.class)); - cards.add(new SetCardInfo("Dwarven Landslide", 60, Rarity.COMMON, mage.cards.d.DwarvenLandslide.class)); - cards.add(new SetCardInfo("Dwarven Patrol", 61, Rarity.UNCOMMON, mage.cards.d.DwarvenPatrol.class)); - cards.add(new SetCardInfo("Ebony Treefolk", 97, Rarity.UNCOMMON, mage.cards.e.EbonyTreefolk.class)); - cards.add(new SetCardInfo("Enlistment Officer", 9, Rarity.UNCOMMON, mage.cards.e.EnlistmentOfficer.class)); - cards.add(new SetCardInfo("Evasive Action", 23, Rarity.UNCOMMON, mage.cards.e.EvasiveAction.class)); - cards.add(new SetCardInfo("Fervent Charge", 98, Rarity.RARE, mage.cards.f.FerventCharge.class)); - cards.add(new SetCardInfo("Fire // Ice", 128, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); - cards.add(new SetCardInfo("Flowstone Charger", 99, Rarity.UNCOMMON, mage.cards.f.FlowstoneCharger.class)); - cards.add(new SetCardInfo("Foul Presence", 39, Rarity.UNCOMMON, mage.cards.f.FoulPresence.class)); - cards.add(new SetCardInfo("Fungal Shambler", 100, Rarity.RARE, mage.cards.f.FungalShambler.class)); - cards.add(new SetCardInfo("Gaea's Skyfolk", 101, Rarity.COMMON, mage.cards.g.GaeasSkyfolk.class)); - cards.add(new SetCardInfo("Gerrard Capashen", 11, Rarity.RARE, mage.cards.g.GerrardCapashen.class)); - cards.add(new SetCardInfo("Gerrard's Verdict", 102, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); - cards.add(new SetCardInfo("Glade Gnarr", 78, Rarity.COMMON, mage.cards.g.GladeGnarr.class)); - cards.add(new SetCardInfo("Goblin Legionnaire", 103, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); - cards.add(new SetCardInfo("Goblin Ringleader", 62, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); - cards.add(new SetCardInfo("Goblin Trenches", 104, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); - cards.add(new SetCardInfo("Grave Defiler", 40, Rarity.UNCOMMON, mage.cards.g.GraveDefiler.class)); - cards.add(new SetCardInfo("Haunted Angel", 12, Rarity.UNCOMMON, mage.cards.h.HauntedAngel.class)); - cards.add(new SetCardInfo("Helionaut", 13, Rarity.COMMON, mage.cards.h.Helionaut.class)); - cards.add(new SetCardInfo("Illuminate", 63, Rarity.UNCOMMON, mage.cards.i.Illuminate.class)); - cards.add(new SetCardInfo("Illusion // Reality", 129, Rarity.UNCOMMON, mage.cards.i.IllusionReality.class)); - cards.add(new SetCardInfo("Index", 25, Rarity.COMMON, mage.cards.i.Index.class)); - cards.add(new SetCardInfo("Jilt", 27, Rarity.COMMON, mage.cards.j.Jilt.class)); - cards.add(new SetCardInfo("Jungle Barrier", 106, Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); - cards.add(new SetCardInfo("Kavu Glider", 64, Rarity.COMMON, mage.cards.k.KavuGlider.class)); - cards.add(new SetCardInfo("Kavu Howler", 79, Rarity.UNCOMMON, mage.cards.k.KavuHowler.class)); - cards.add(new SetCardInfo("Kavu Mauler", 80, Rarity.RARE, mage.cards.k.KavuMauler.class)); - cards.add(new SetCardInfo("Last Caress", 41, Rarity.COMMON, mage.cards.l.LastCaress.class)); - cards.add(new SetCardInfo("Last Stand", 107, Rarity.RARE, mage.cards.l.LastStand.class)); - cards.add(new SetCardInfo("Lay of the Land", 81, Rarity.COMMON, mage.cards.l.LayOfTheLand.class)); - cards.add(new SetCardInfo("Legacy Weapon", 137, Rarity.RARE, mage.cards.l.LegacyWeapon.class)); - cards.add(new SetCardInfo("Life // Death", 130, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); - cards.add(new SetCardInfo("Lightning Angel", 108, Rarity.RARE, mage.cards.l.LightningAngel.class)); - cards.add(new SetCardInfo("Living Airship", 28, Rarity.COMMON, mage.cards.l.LivingAirship.class)); - cards.add(new SetCardInfo("Llanowar Dead", 109, Rarity.COMMON, mage.cards.l.LlanowarDead.class)); - cards.add(new SetCardInfo("Llanowar Wastes", 141, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); - cards.add(new SetCardInfo("Manacles of Decay", 14, Rarity.COMMON, mage.cards.m.ManaclesOfDecay.class)); - cards.add(new SetCardInfo("Martyrs' Tomb", 110, Rarity.UNCOMMON, mage.cards.m.MartyrsTomb.class)); - cards.add(new SetCardInfo("Mask of Intolerance", 138, Rarity.RARE, mage.cards.m.MaskOfIntolerance.class)); - cards.add(new SetCardInfo("Minotaur Illusionist", 111, Rarity.UNCOMMON, mage.cards.m.MinotaurIllusionist.class)); - cards.add(new SetCardInfo("Minotaur Tactician", 65, Rarity.COMMON, mage.cards.m.MinotaurTactician.class)); - cards.add(new SetCardInfo("Mournful Zombie", 43, Rarity.COMMON, mage.cards.m.MournfulZombie.class)); - cards.add(new SetCardInfo("Mystic Snake", 112, Rarity.RARE, mage.cards.m.MysticSnake.class)); - cards.add(new SetCardInfo("Necra Disciple", 44, Rarity.COMMON, mage.cards.n.NecraDisciple.class)); - cards.add(new SetCardInfo("Necravolver", 46, Rarity.RARE, mage.cards.n.Necravolver.class)); - cards.add(new SetCardInfo("Night // Day", 131, Rarity.UNCOMMON, mage.cards.n.NightDay.class)); - cards.add(new SetCardInfo("Order // Chaos", 132, Rarity.UNCOMMON, mage.cards.o.OrderChaos.class)); - cards.add(new SetCardInfo("Orim's Thunder", 15, Rarity.COMMON, mage.cards.o.OrimsThunder.class)); - cards.add(new SetCardInfo("Overgrown Estate", 113, Rarity.RARE, mage.cards.o.OvergrownEstate.class)); - cards.add(new SetCardInfo("Penumbra Bobcat", 82, Rarity.COMMON, mage.cards.p.PenumbraBobcat.class)); - cards.add(new SetCardInfo("Penumbra Kavu", 83, Rarity.UNCOMMON, mage.cards.p.PenumbraKavu.class)); - cards.add(new SetCardInfo("Penumbra Wurm", 84, Rarity.RARE, mage.cards.p.PenumbraWurm.class)); - cards.add(new SetCardInfo("Pernicious Deed", 114, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); - cards.add(new SetCardInfo("Phyrexian Arena", 47, Rarity.RARE, mage.cards.p.PhyrexianArena.class)); - cards.add(new SetCardInfo("Phyrexian Gargantua", 48, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); - cards.add(new SetCardInfo("Phyrexian Rager", 49, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - cards.add(new SetCardInfo("Planar Despair", 50, Rarity.RARE, mage.cards.p.PlanarDespair.class)); - cards.add(new SetCardInfo("Prophetic Bolt", 116, Rarity.RARE, mage.cards.p.PropheticBolt.class)); - cards.add(new SetCardInfo("Putrid Warrior", 117, Rarity.COMMON, mage.cards.p.PutridWarrior.class)); - cards.add(new SetCardInfo("Quagmire Druid", 51, Rarity.COMMON, mage.cards.q.QuagmireDruid.class)); - cards.add(new SetCardInfo("Quicksilver Dagger", 118, Rarity.COMMON, mage.cards.q.QuicksilverDagger.class)); - cards.add(new SetCardInfo("Raka Disciple", 66, Rarity.COMMON, mage.cards.r.RakaDisciple.class)); - cards.add(new SetCardInfo("Rakavolver", 68, Rarity.RARE, mage.cards.r.Rakavolver.class)); - cards.add(new SetCardInfo("Razorfin Hunter", 119, Rarity.COMMON, mage.cards.r.RazorfinHunter.class)); - cards.add(new SetCardInfo("Reef Shaman", 29, Rarity.COMMON, mage.cards.r.ReefShaman.class)); - cards.add(new SetCardInfo("Savage Gorilla", 85, Rarity.COMMON, mage.cards.s.SavageGorilla.class)); - cards.add(new SetCardInfo("Shield of Duty and Reason", 16, Rarity.COMMON, mage.cards.s.ShieldOfDutyAndReason.class)); - cards.add(new SetCardInfo("Shimmering Mirage", 30, Rarity.COMMON, mage.cards.s.ShimmeringMirage.class)); - cards.add(new SetCardInfo("Shivan Reef", 142, Rarity.RARE, mage.cards.s.ShivanReef.class)); - cards.add(new SetCardInfo("Smash", 69, Rarity.COMMON, mage.cards.s.Smash.class)); - cards.add(new SetCardInfo("Soul Link", 120, Rarity.COMMON, mage.cards.s.SoulLink.class)); - cards.add(new SetCardInfo("Spectral Lynx", 17, Rarity.RARE, mage.cards.s.SpectralLynx.class)); - cards.add(new SetCardInfo("Spiritmonger", 121, Rarity.RARE, mage.cards.s.Spiritmonger.class)); - cards.add(new SetCardInfo("Squee's Embrace", 122, Rarity.COMMON, mage.cards.s.SqueesEmbrace.class)); - cards.add(new SetCardInfo("Squee's Revenge", 123, Rarity.UNCOMMON, mage.cards.s.SqueesRevenge.class)); - cards.add(new SetCardInfo("Strength of Night", 86, Rarity.COMMON, mage.cards.s.StrengthOfNight.class)); - cards.add(new SetCardInfo("Suffocating Blast", 124, Rarity.RARE, mage.cards.s.SuffocatingBlast.class)); - cards.add(new SetCardInfo("Sylvan Messenger", 87, Rarity.UNCOMMON, mage.cards.s.SylvanMessenger.class)); - cards.add(new SetCardInfo("Symbiotic Deployment", 88, Rarity.RARE, mage.cards.s.SymbioticDeployment.class)); - cards.add(new SetCardInfo("Temporal Spring", 125, Rarity.COMMON, mage.cards.t.TemporalSpring.class)); - cards.add(new SetCardInfo("Tidal Courier", 31, Rarity.UNCOMMON, mage.cards.t.TidalCourier.class)); - cards.add(new SetCardInfo("Tranquil Path", 89, Rarity.COMMON, mage.cards.t.TranquilPath.class)); - cards.add(new SetCardInfo("Tundra Kavu", 71, Rarity.COMMON, mage.cards.t.TundraKavu.class)); - cards.add(new SetCardInfo("Unnatural Selection", 32, Rarity.RARE, mage.cards.u.UnnaturalSelection.class)); - cards.add(new SetCardInfo("Urborg Elf", 90, Rarity.COMMON, mage.cards.u.UrborgElf.class)); - cards.add(new SetCardInfo("Urborg Uprising", 53, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); - cards.add(new SetCardInfo("Vindicate", 126, Rarity.RARE, mage.cards.v.Vindicate.class)); - cards.add(new SetCardInfo("Vodalian Mystic", 33, Rarity.UNCOMMON, mage.cards.v.VodalianMystic.class)); - cards.add(new SetCardInfo("Whirlpool Drake", 34, Rarity.UNCOMMON, mage.cards.w.WhirlpoolDrake.class)); - cards.add(new SetCardInfo("Whirlpool Rider", 35, Rarity.COMMON, mage.cards.w.WhirlpoolRider.class)); - cards.add(new SetCardInfo("Whirlpool Warrior", 36, Rarity.RARE, mage.cards.w.WhirlpoolWarrior.class)); - cards.add(new SetCardInfo("Wild Research", 72, Rarity.RARE, mage.cards.w.WildResearch.class)); - cards.add(new SetCardInfo("Yavimaya Coast", 143, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); - cards.add(new SetCardInfo("Yavimaya's Embrace", 127, Rarity.RARE, mage.cards.y.YavimayasEmbrace.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.SetType; +import mage.constants.Rarity; + +public class Apocalypse extends ExpansionSet { + private static final Apocalypse fINSTANCE = new Apocalypse(); + + public static Apocalypse getInstance() { + return fINSTANCE; + } + + private Apocalypse() { + super("Apocalypse", "APC", ExpansionSet.buildDate(2001, 5, 1), SetType.EXPANSION); + this.blockName = "Invasion"; + this.parentSet = Invasion.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aether Mutation", 91, Rarity.UNCOMMON, mage.cards.a.AetherMutation.class)); + cards.add(new SetCardInfo("Ana Disciple", 73, Rarity.COMMON, mage.cards.a.AnaDisciple.class)); + cards.add(new SetCardInfo("Anavolver", 75, Rarity.RARE, mage.cards.a.Anavolver.class)); + cards.add(new SetCardInfo("Angelfire Crusader", 1, Rarity.COMMON, mage.cards.a.AngelfireCrusader.class)); + cards.add(new SetCardInfo("Battlefield Forge", 139, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); + cards.add(new SetCardInfo("Bloodfire Colossus", 55, Rarity.RARE, mage.cards.b.BloodfireColossus.class)); + cards.add(new SetCardInfo("Bloodfire Dwarf", 56, Rarity.COMMON, mage.cards.b.BloodfireDwarf.class)); + cards.add(new SetCardInfo("Bloodfire Kavu", 58, Rarity.UNCOMMON, mage.cards.b.BloodfireKavu.class)); + cards.add(new SetCardInfo("Bog Gnarr", 76, Rarity.COMMON, mage.cards.b.BogGnarr.class)); + cards.add(new SetCardInfo("Brass Herald", 133, Rarity.UNCOMMON, mage.cards.b.BrassHerald.class)); + cards.add(new SetCardInfo("Caves of Koilos", 140, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); + cards.add(new SetCardInfo("Ceta Disciple", 19, Rarity.COMMON, mage.cards.c.CetaDisciple.class)); + cards.add(new SetCardInfo("Cetavolver", 21, Rarity.RARE, mage.cards.c.Cetavolver.class)); + cards.add(new SetCardInfo("Coalition Flag", 2, Rarity.UNCOMMON, mage.cards.c.CoalitionFlag.class)); + cards.add(new SetCardInfo("Coalition Honor Guard", 3, Rarity.COMMON, mage.cards.c.CoalitionHonorGuard.class)); + cards.add(new SetCardInfo("Coastal Drake", 22, Rarity.COMMON, mage.cards.c.CoastalDrake.class)); + cards.add(new SetCardInfo("Consume Strength", 93, Rarity.COMMON, mage.cards.c.ConsumeStrength.class)); + cards.add(new SetCardInfo("Cromat", 94, Rarity.RARE, mage.cards.c.Cromat.class)); + cards.add(new SetCardInfo("Dead Ringers", 37, Rarity.COMMON, mage.cards.d.DeadRingers.class)); + cards.add(new SetCardInfo("Death Grasp", 95, Rarity.RARE, mage.cards.d.DeathGrasp.class)); + cards.add(new SetCardInfo("Death Mutation", 96, Rarity.UNCOMMON, mage.cards.d.DeathMutation.class)); + cards.add(new SetCardInfo("Dega Disciple", 4, Rarity.COMMON, mage.cards.d.DegaDisciple.class)); + cards.add(new SetCardInfo("Degavolver", 6, Rarity.RARE, mage.cards.d.Degavolver.class)); + cards.add(new SetCardInfo("Desolation Angel", 38, Rarity.RARE, mage.cards.d.DesolationAngel.class)); + cards.add(new SetCardInfo("Desolation Giant", 59, Rarity.RARE, mage.cards.d.DesolationGiant.class)); + cards.add(new SetCardInfo("Diversionary Tactics", 7, Rarity.UNCOMMON, mage.cards.d.DiversionaryTactics.class)); + cards.add(new SetCardInfo("Divine Light", 8, Rarity.COMMON, mage.cards.d.DivineLight.class)); + cards.add(new SetCardInfo("Dodecapod", 134, Rarity.UNCOMMON, mage.cards.d.Dodecapod.class)); + cards.add(new SetCardInfo("Dragon Arch", 135, Rarity.UNCOMMON, mage.cards.d.DragonArch.class)); + cards.add(new SetCardInfo("Dwarven Landslide", 60, Rarity.COMMON, mage.cards.d.DwarvenLandslide.class)); + cards.add(new SetCardInfo("Dwarven Patrol", 61, Rarity.UNCOMMON, mage.cards.d.DwarvenPatrol.class)); + cards.add(new SetCardInfo("Ebony Treefolk", 97, Rarity.UNCOMMON, mage.cards.e.EbonyTreefolk.class)); + cards.add(new SetCardInfo("Enlistment Officer", 9, Rarity.UNCOMMON, mage.cards.e.EnlistmentOfficer.class)); + cards.add(new SetCardInfo("Evasive Action", 23, Rarity.UNCOMMON, mage.cards.e.EvasiveAction.class)); + cards.add(new SetCardInfo("Fervent Charge", 98, Rarity.RARE, mage.cards.f.FerventCharge.class)); + cards.add(new SetCardInfo("Fire // Ice", 128, Rarity.UNCOMMON, mage.cards.f.FireIce.class)); + cards.add(new SetCardInfo("Flowstone Charger", 99, Rarity.UNCOMMON, mage.cards.f.FlowstoneCharger.class)); + cards.add(new SetCardInfo("Foul Presence", 39, Rarity.UNCOMMON, mage.cards.f.FoulPresence.class)); + cards.add(new SetCardInfo("Fungal Shambler", 100, Rarity.RARE, mage.cards.f.FungalShambler.class)); + cards.add(new SetCardInfo("Gaea's Skyfolk", 101, Rarity.COMMON, mage.cards.g.GaeasSkyfolk.class)); + cards.add(new SetCardInfo("Gerrard Capashen", 11, Rarity.RARE, mage.cards.g.GerrardCapashen.class)); + cards.add(new SetCardInfo("Gerrard's Verdict", 102, Rarity.UNCOMMON, mage.cards.g.GerrardsVerdict.class)); + cards.add(new SetCardInfo("Glade Gnarr", 78, Rarity.COMMON, mage.cards.g.GladeGnarr.class)); + cards.add(new SetCardInfo("Goblin Legionnaire", 103, Rarity.COMMON, mage.cards.g.GoblinLegionnaire.class)); + cards.add(new SetCardInfo("Goblin Ringleader", 62, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class)); + cards.add(new SetCardInfo("Goblin Trenches", 104, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); + cards.add(new SetCardInfo("Grave Defiler", 40, Rarity.UNCOMMON, mage.cards.g.GraveDefiler.class)); + cards.add(new SetCardInfo("Haunted Angel", 12, Rarity.UNCOMMON, mage.cards.h.HauntedAngel.class)); + cards.add(new SetCardInfo("Helionaut", 13, Rarity.COMMON, mage.cards.h.Helionaut.class)); + cards.add(new SetCardInfo("Illuminate", 63, Rarity.UNCOMMON, mage.cards.i.Illuminate.class)); + cards.add(new SetCardInfo("Illusion // Reality", 129, Rarity.UNCOMMON, mage.cards.i.IllusionReality.class)); + cards.add(new SetCardInfo("Index", 25, Rarity.COMMON, mage.cards.i.Index.class)); + cards.add(new SetCardInfo("Jilt", 27, Rarity.COMMON, mage.cards.j.Jilt.class)); + cards.add(new SetCardInfo("Jungle Barrier", 106, Rarity.UNCOMMON, mage.cards.j.JungleBarrier.class)); + cards.add(new SetCardInfo("Kavu Glider", 64, Rarity.COMMON, mage.cards.k.KavuGlider.class)); + cards.add(new SetCardInfo("Kavu Howler", 79, Rarity.UNCOMMON, mage.cards.k.KavuHowler.class)); + cards.add(new SetCardInfo("Kavu Mauler", 80, Rarity.RARE, mage.cards.k.KavuMauler.class)); + cards.add(new SetCardInfo("Last Caress", 41, Rarity.COMMON, mage.cards.l.LastCaress.class)); + cards.add(new SetCardInfo("Last Stand", 107, Rarity.RARE, mage.cards.l.LastStand.class)); + cards.add(new SetCardInfo("Lay of the Land", 81, Rarity.COMMON, mage.cards.l.LayOfTheLand.class)); + cards.add(new SetCardInfo("Legacy Weapon", 137, Rarity.RARE, mage.cards.l.LegacyWeapon.class)); + cards.add(new SetCardInfo("Life // Death", 130, Rarity.UNCOMMON, mage.cards.l.LifeDeath.class)); + cards.add(new SetCardInfo("Lightning Angel", 108, Rarity.RARE, mage.cards.l.LightningAngel.class)); + cards.add(new SetCardInfo("Living Airship", 28, Rarity.COMMON, mage.cards.l.LivingAirship.class)); + cards.add(new SetCardInfo("Llanowar Dead", 109, Rarity.COMMON, mage.cards.l.LlanowarDead.class)); + cards.add(new SetCardInfo("Llanowar Wastes", 141, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); + cards.add(new SetCardInfo("Manacles of Decay", 14, Rarity.COMMON, mage.cards.m.ManaclesOfDecay.class)); + cards.add(new SetCardInfo("Martyrs' Tomb", 110, Rarity.UNCOMMON, mage.cards.m.MartyrsTomb.class)); + cards.add(new SetCardInfo("Mask of Intolerance", 138, Rarity.RARE, mage.cards.m.MaskOfIntolerance.class)); + cards.add(new SetCardInfo("Minotaur Illusionist", 111, Rarity.UNCOMMON, mage.cards.m.MinotaurIllusionist.class)); + cards.add(new SetCardInfo("Minotaur Tactician", 65, Rarity.COMMON, mage.cards.m.MinotaurTactician.class)); + cards.add(new SetCardInfo("Mournful Zombie", 43, Rarity.COMMON, mage.cards.m.MournfulZombie.class)); + cards.add(new SetCardInfo("Mystic Snake", 112, Rarity.RARE, mage.cards.m.MysticSnake.class)); + cards.add(new SetCardInfo("Necra Disciple", 44, Rarity.COMMON, mage.cards.n.NecraDisciple.class)); + cards.add(new SetCardInfo("Necravolver", 46, Rarity.RARE, mage.cards.n.Necravolver.class)); + cards.add(new SetCardInfo("Night // Day", 131, Rarity.UNCOMMON, mage.cards.n.NightDay.class)); + cards.add(new SetCardInfo("Order // Chaos", 132, Rarity.UNCOMMON, mage.cards.o.OrderChaos.class)); + cards.add(new SetCardInfo("Orim's Thunder", 15, Rarity.COMMON, mage.cards.o.OrimsThunder.class)); + cards.add(new SetCardInfo("Overgrown Estate", 113, Rarity.RARE, mage.cards.o.OvergrownEstate.class)); + cards.add(new SetCardInfo("Penumbra Bobcat", 82, Rarity.COMMON, mage.cards.p.PenumbraBobcat.class)); + cards.add(new SetCardInfo("Penumbra Kavu", 83, Rarity.UNCOMMON, mage.cards.p.PenumbraKavu.class)); + cards.add(new SetCardInfo("Penumbra Wurm", 84, Rarity.RARE, mage.cards.p.PenumbraWurm.class)); + cards.add(new SetCardInfo("Pernicious Deed", 114, Rarity.RARE, mage.cards.p.PerniciousDeed.class)); + cards.add(new SetCardInfo("Phyrexian Arena", 47, Rarity.RARE, mage.cards.p.PhyrexianArena.class)); + cards.add(new SetCardInfo("Phyrexian Gargantua", 48, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); + cards.add(new SetCardInfo("Phyrexian Rager", 49, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); + cards.add(new SetCardInfo("Planar Despair", 50, Rarity.RARE, mage.cards.p.PlanarDespair.class)); + cards.add(new SetCardInfo("Prophetic Bolt", 116, Rarity.RARE, mage.cards.p.PropheticBolt.class)); + cards.add(new SetCardInfo("Putrid Warrior", 117, Rarity.COMMON, mage.cards.p.PutridWarrior.class)); + cards.add(new SetCardInfo("Quagmire Druid", 51, Rarity.COMMON, mage.cards.q.QuagmireDruid.class)); + cards.add(new SetCardInfo("Quicksilver Dagger", 118, Rarity.COMMON, mage.cards.q.QuicksilverDagger.class)); + cards.add(new SetCardInfo("Raka Disciple", 66, Rarity.COMMON, mage.cards.r.RakaDisciple.class)); + cards.add(new SetCardInfo("Rakavolver", 68, Rarity.RARE, mage.cards.r.Rakavolver.class)); + cards.add(new SetCardInfo("Razorfin Hunter", 119, Rarity.COMMON, mage.cards.r.RazorfinHunter.class)); + cards.add(new SetCardInfo("Reef Shaman", 29, Rarity.COMMON, mage.cards.r.ReefShaman.class)); + cards.add(new SetCardInfo("Savage Gorilla", 85, Rarity.COMMON, mage.cards.s.SavageGorilla.class)); + cards.add(new SetCardInfo("Shield of Duty and Reason", 16, Rarity.COMMON, mage.cards.s.ShieldOfDutyAndReason.class)); + cards.add(new SetCardInfo("Shimmering Mirage", 30, Rarity.COMMON, mage.cards.s.ShimmeringMirage.class)); + cards.add(new SetCardInfo("Shivan Reef", 142, Rarity.RARE, mage.cards.s.ShivanReef.class)); + cards.add(new SetCardInfo("Smash", 69, Rarity.COMMON, mage.cards.s.Smash.class)); + cards.add(new SetCardInfo("Soul Link", 120, Rarity.COMMON, mage.cards.s.SoulLink.class)); + cards.add(new SetCardInfo("Spectral Lynx", 17, Rarity.RARE, mage.cards.s.SpectralLynx.class)); + cards.add(new SetCardInfo("Spiritmonger", 121, Rarity.RARE, mage.cards.s.Spiritmonger.class)); + cards.add(new SetCardInfo("Squee's Embrace", 122, Rarity.COMMON, mage.cards.s.SqueesEmbrace.class)); + cards.add(new SetCardInfo("Squee's Revenge", 123, Rarity.UNCOMMON, mage.cards.s.SqueesRevenge.class)); + cards.add(new SetCardInfo("Standard Bearer", 18, Rarity.COMMON, mage.cards.s.StandardBearer.class)); + cards.add(new SetCardInfo("Strength of Night", 86, Rarity.COMMON, mage.cards.s.StrengthOfNight.class)); + cards.add(new SetCardInfo("Suffocating Blast", 124, Rarity.RARE, mage.cards.s.SuffocatingBlast.class)); + cards.add(new SetCardInfo("Sylvan Messenger", 87, Rarity.UNCOMMON, mage.cards.s.SylvanMessenger.class)); + cards.add(new SetCardInfo("Symbiotic Deployment", 88, Rarity.RARE, mage.cards.s.SymbioticDeployment.class)); + cards.add(new SetCardInfo("Temporal Spring", 125, Rarity.COMMON, mage.cards.t.TemporalSpring.class)); + cards.add(new SetCardInfo("Tidal Courier", 31, Rarity.UNCOMMON, mage.cards.t.TidalCourier.class)); + cards.add(new SetCardInfo("Tranquil Path", 89, Rarity.COMMON, mage.cards.t.TranquilPath.class)); + cards.add(new SetCardInfo("Tundra Kavu", 71, Rarity.COMMON, mage.cards.t.TundraKavu.class)); + cards.add(new SetCardInfo("Unnatural Selection", 32, Rarity.RARE, mage.cards.u.UnnaturalSelection.class)); + cards.add(new SetCardInfo("Urborg Elf", 90, Rarity.COMMON, mage.cards.u.UrborgElf.class)); + cards.add(new SetCardInfo("Urborg Uprising", 53, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); + cards.add(new SetCardInfo("Vindicate", 126, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Vodalian Mystic", 33, Rarity.UNCOMMON, mage.cards.v.VodalianMystic.class)); + cards.add(new SetCardInfo("Whirlpool Drake", 34, Rarity.UNCOMMON, mage.cards.w.WhirlpoolDrake.class)); + cards.add(new SetCardInfo("Whirlpool Rider", 35, Rarity.COMMON, mage.cards.w.WhirlpoolRider.class)); + cards.add(new SetCardInfo("Whirlpool Warrior", 36, Rarity.RARE, mage.cards.w.WhirlpoolWarrior.class)); + cards.add(new SetCardInfo("Wild Research", 72, Rarity.RARE, mage.cards.w.WildResearch.class)); + cards.add(new SetCardInfo("Yavimaya Coast", 143, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); + cards.add(new SetCardInfo("Yavimaya's Embrace", 127, Rarity.RARE, mage.cards.y.YavimayasEmbrace.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/ArabianNights.java b/Mage.Sets/src/mage/sets/ArabianNights.java index 774ea7e507d..1fd04d72760 100644 --- a/Mage.Sets/src/mage/sets/ArabianNights.java +++ b/Mage.Sets/src/mage/sets/ArabianNights.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class ArabianNights extends ExpansionSet { } private ArabianNights() { - super("Arabian Nights", "ARN", "mage.sets.arabiannights", new GregorianCalendar(1993, 11, 1).getTime(), SetType.EXPANSION); + super("Arabian Nights", "ARN", ExpansionSet.buildDate(1993, 11, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Archenemy.java b/Mage.Sets/src/mage/sets/Archenemy.java index 0a49c4faa07..d60c5432034 100644 --- a/Mage.Sets/src/mage/sets/Archenemy.java +++ b/Mage.Sets/src/mage/sets/Archenemy.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Archenemy extends ExpansionSet { } private Archenemy() { - super("Archenemy", "ARC", "mage.sets.archenemy", new GregorianCalendar(2010, 6, 18).getTime(), SetType.SUPPLEMENTAL); + super("Archenemy", "ARC", ExpansionSet.buildDate(2010, 6, 18), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Aether Spellbomb", 102, Rarity.COMMON, mage.cards.a.AetherSpellbomb.class)); cards.add(new SetCardInfo("Agony Warp", 76, Rarity.COMMON, mage.cards.a.AgonyWarp.class)); diff --git a/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java b/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java index d64500df296..314a4899a41 100644 --- a/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java +++ b/Mage.Sets/src/mage/sets/ArchenemyNicolBolas.java @@ -27,11 +27,8 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class ArchenemyNicolBolas extends ExpansionSet { } private ArchenemyNicolBolas() { - super("Archenemy: Nicol Bolas", "ANB", "mage.sets.archenemynicolbolas", new GregorianCalendar(2017, 6, 16).getTime(), SetType.SUPPLEMENTAL); + super("Archenemy: Nicol Bolas", "ANB", ExpansionSet.buildDate(2017, 6, 16), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; } diff --git a/Mage.Sets/src/mage/sets/ArenaLeague.java b/Mage.Sets/src/mage/sets/ArenaLeague.java index 810f3e953fe..08adde01e10 100644 --- a/Mage.Sets/src/mage/sets/ArenaLeague.java +++ b/Mage.Sets/src/mage/sets/ArenaLeague.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class ArenaLeague extends ExpansionSet { } private ArenaLeague() { - super("Arena League", "ARENA", "mage.sets.arenaleague", new GregorianCalendar(1996, 7, 4).getTime(), SetType.PROMOTIONAL); + super("Arena League", "ARENA", ExpansionSet.buildDate(1996, 7, 4), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Arc Lightning", 42, Rarity.COMMON, mage.cards.a.ArcLightning.class)); cards.add(new SetCardInfo("Bonesplitter", 52, Rarity.COMMON, mage.cards.b.Bonesplitter.class)); diff --git a/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java b/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java index d4486c33d6c..7de9f11d104 100644 --- a/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java +++ b/Mage.Sets/src/mage/sets/AsiaPacificLandProgram.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class AsiaPacificLandProgram extends ExpansionSet { } private AsiaPacificLandProgram() { - super("Asia Pacific Land Program", "APAC", "mage.sets.asiapacificlandprogram", new GregorianCalendar(1997, 10, 13).getTime(), SetType.PROMOTIONAL); + super("Asia Pacific Land Program", "APAC", ExpansionSet.buildDate(1997, 10, 13), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); cards.add(new SetCardInfo("Forest", 6, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); diff --git a/Mage.Sets/src/mage/sets/AvacynRestored.java b/Mage.Sets/src/mage/sets/AvacynRestored.java index 88981fe7d33..c746321d73d 100644 --- a/Mage.Sets/src/mage/sets/AvacynRestored.java +++ b/Mage.Sets/src/mage/sets/AvacynRestored.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class AvacynRestored extends ExpansionSet { } private AvacynRestored() { - super("Avacyn Restored", "AVR", "mage.sets.avacynrestored", new GregorianCalendar(2012, 4, 4).getTime(), SetType.EXPANSION); + super("Avacyn Restored", "AVR", ExpansionSet.buildDate(2012, 4, 4), SetType.EXPANSION); this.blockName = "Innistrad"; this.parentSet = Innistrad.getInstance(); this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/BattleForZendikar.java b/Mage.Sets/src/mage/sets/BattleForZendikar.java index 0c862a51fc6..372e401770e 100644 --- a/Mage.Sets/src/mage/sets/BattleForZendikar.java +++ b/Mage.Sets/src/mage/sets/BattleForZendikar.java @@ -28,7 +28,6 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; @@ -36,7 +35,6 @@ import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import mage.constants.SetType; import mage.constants.Rarity; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; import mage.cards.FrameStyle; @@ -55,7 +53,7 @@ public class BattleForZendikar extends ExpansionSet { protected final List savedSpecialLand = new ArrayList<>(); private BattleForZendikar() { - super("Battle for Zendikar", "BFZ", "mage.sets.battleforzendikar", new GregorianCalendar(2015, 10, 2).getTime(), SetType.EXPANSION); + super("Battle for Zendikar", "BFZ", ExpansionSet.buildDate(2015, 10, 2), SetType.EXPANSION); this.blockName = "Battle for Zendikar"; this.hasBoosters = true; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/BetrayersOfKamigawa.java b/Mage.Sets/src/mage/sets/BetrayersOfKamigawa.java index 242dc914119..bdd03c8740b 100644 --- a/Mage.Sets/src/mage/sets/BetrayersOfKamigawa.java +++ b/Mage.Sets/src/mage/sets/BetrayersOfKamigawa.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class BetrayersOfKamigawa extends ExpansionSet { } private BetrayersOfKamigawa() { - super("Betrayers of Kamigawa", "BOK", "mage.sets.betrayersofkamigawa", new GregorianCalendar(2005, 1, 4).getTime(), SetType.EXPANSION); + super("Betrayers of Kamigawa", "BOK", ExpansionSet.buildDate(2005, 1, 4), SetType.EXPANSION); this.blockName = "Kamigawa"; this.parentSet = ChampionsOfKamigawa.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/BlessedVsCursed.java b/Mage.Sets/src/mage/sets/BlessedVsCursed.java index 3c6d9984ddf..93009338625 100644 --- a/Mage.Sets/src/mage/sets/BlessedVsCursed.java +++ b/Mage.Sets/src/mage/sets/BlessedVsCursed.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -48,7 +44,7 @@ public class BlessedVsCursed extends ExpansionSet { } private BlessedVsCursed() { - super("Duel Decks: Blessed vs. Cursed", "DDQ", "mage.sets.blessedvscursed", new GregorianCalendar(2016, 2, 26).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Blessed vs. Cursed", "DDQ", ExpansionSet.buildDate(2016, 2, 26), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Abattoir Ghoul", 50, Rarity.UNCOMMON, mage.cards.a.AbattoirGhoul.class)); diff --git a/Mage.Sets/src/mage/sets/BornOfTheGods.java b/Mage.Sets/src/mage/sets/BornOfTheGods.java index 9f9cdf268fe..aca88a1b397 100644 --- a/Mage.Sets/src/mage/sets/BornOfTheGods.java +++ b/Mage.Sets/src/mage/sets/BornOfTheGods.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class BornOfTheGods extends ExpansionSet { } private BornOfTheGods() { - super("Born of the Gods", "BNG", "mage.sets.bornofthegods", new GregorianCalendar(2014, 2, 7).getTime(), SetType.EXPANSION); + super("Born of the Gods", "BNG", ExpansionSet.buildDate(2014, 2, 7), SetType.EXPANSION); this.blockName = "Theros"; this.parentSet = Theros.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/ChampionsOfKamigawa.java b/Mage.Sets/src/mage/sets/ChampionsOfKamigawa.java index c957adf2451..5e63a238760 100644 --- a/Mage.Sets/src/mage/sets/ChampionsOfKamigawa.java +++ b/Mage.Sets/src/mage/sets/ChampionsOfKamigawa.java @@ -1,13 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class ChampionsOfKamigawa extends ExpansionSet { private static final ChampionsOfKamigawa fINSTANCE = new ChampionsOfKamigawa(); @@ -17,7 +13,7 @@ public class ChampionsOfKamigawa extends ExpansionSet { } private ChampionsOfKamigawa() { - super("Champions of Kamigawa", "CHK", "mage.sets.championsofkamigawa", new GregorianCalendar(2004, 9, 1).getTime(), SetType.EXPANSION); + super("Champions of Kamigawa", "CHK", ExpansionSet.buildDate(2004, 9, 1), SetType.EXPANSION); this.blockName = "Kamigawa"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/Champs.java b/Mage.Sets/src/mage/sets/Champs.java index 8ab0d58e407..8156e4cee2f 100644 --- a/Mage.Sets/src/mage/sets/Champs.java +++ b/Mage.Sets/src/mage/sets/Champs.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class Champs extends ExpansionSet { } private Champs() { - super("Champs", "CP", "mage.sets.champs", new GregorianCalendar(2006, 3, 18).getTime(), SetType.PROMOTIONAL); + super("Champs", "CP", ExpansionSet.buildDate(2006, 3, 18), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Blood Knight", 7, Rarity.SPECIAL, mage.cards.b.BloodKnight.class)); cards.add(new SetCardInfo("Bramblewood Paragon", 11, Rarity.SPECIAL, mage.cards.b.BramblewoodParagon.class)); diff --git a/Mage.Sets/src/mage/sets/Chronicles.java b/Mage.Sets/src/mage/sets/Chronicles.java index 5df8a150623..2d269dd6d89 100644 --- a/Mage.Sets/src/mage/sets/Chronicles.java +++ b/Mage.Sets/src/mage/sets/Chronicles.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Chronicles extends ExpansionSet { } private Chronicles() { - super("Chronicles", "CHR", "mage.sets.chronicles", new GregorianCalendar(1995, 6, 1).getTime(), SetType.SUPPLEMENTAL); + super("Chronicles", "CHR", ExpansionSet.buildDate(1995, 6, 1), SetType.SUPPLEMENTAL); this.blockName = "Reprint"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/ClashPack.java b/Mage.Sets/src/mage/sets/ClashPack.java index 4f6f89d0fa0..606c1dd1d19 100644 --- a/Mage.Sets/src/mage/sets/ClashPack.java +++ b/Mage.Sets/src/mage/sets/ClashPack.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class ClashPack extends ExpansionSet { } private ClashPack() { - super("Clash Pack", "CLASH", "mage.sets.clashpack", new GregorianCalendar(2014, 7, 18).getTime(), SetType.SUPPLEMENTAL); + super("Clash Pack", "CLASH", ExpansionSet.buildDate(2014, 7, 18), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Courser of Kruphix", 12, Rarity.SPECIAL, mage.cards.c.CourserOfKruphix.class)); cards.add(new SetCardInfo("Fated Intervention", 2, Rarity.SPECIAL, mage.cards.f.FatedIntervention.class)); diff --git a/Mage.Sets/src/mage/sets/ClassicSixthEdition.java b/Mage.Sets/src/mage/sets/ClassicSixthEdition.java index 23a2d84785c..d2efedf32a3 100644 --- a/Mage.Sets/src/mage/sets/ClassicSixthEdition.java +++ b/Mage.Sets/src/mage/sets/ClassicSixthEdition.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class ClassicSixthEdition extends ExpansionSet { } private ClassicSixthEdition() { - super("Classic Sixth Edition", "6ED", "mage.sets.classicsixthedition", new GregorianCalendar(1999, 3, 28).getTime(), SetType.CORE); + super("Classic Sixth Edition", "6ED", ExpansionSet.buildDate(1999, 3, 28), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/Coldsnap.java b/Mage.Sets/src/mage/sets/Coldsnap.java index 80152768299..c7456b5fc8b 100644 --- a/Mage.Sets/src/mage/sets/Coldsnap.java +++ b/Mage.Sets/src/mage/sets/Coldsnap.java @@ -1,179 +1,178 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.sets; - -import java.util.GregorianCalendar; - -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; - -/** - * - * @author North - */ -public class Coldsnap extends ExpansionSet { - - private static final Coldsnap fINSTANCE = new Coldsnap(); - - public static Coldsnap getInstance() { - return fINSTANCE; - } - - private Coldsnap() { - super("Coldsnap", "CSP", "mage.sets.coldsnap", new GregorianCalendar(2006, 6, 21).getTime(), SetType.EXPANSION); - this.blockName = "Ice Age"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - this.parentSet = IceAge.getInstance(); - this.hasBasicLands = false; - cards.add(new SetCardInfo("Adarkar Valkyrie", 1, Rarity.RARE, mage.cards.a.AdarkarValkyrie.class)); - cards.add(new SetCardInfo("Adarkar Windform", 26, Rarity.UNCOMMON, mage.cards.a.AdarkarWindform.class)); - cards.add(new SetCardInfo("Allosaurus Rider", 101, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); - cards.add(new SetCardInfo("Arctic Flats", 143, Rarity.UNCOMMON, mage.cards.a.ArcticFlats.class)); - cards.add(new SetCardInfo("Arcum Dagsson", 27, Rarity.RARE, mage.cards.a.ArcumDagsson.class)); - cards.add(new SetCardInfo("Aurochs Herd", 103, Rarity.COMMON, mage.cards.a.AurochsHerd.class)); - cards.add(new SetCardInfo("Balduvian Rage", 76, Rarity.UNCOMMON, mage.cards.b.BalduvianRage.class)); - cards.add(new SetCardInfo("Blizzard Specter", 126, Rarity.UNCOMMON, mage.cards.b.BlizzardSpecter.class)); - cards.add(new SetCardInfo("Boreal Centaur", 104, Rarity.COMMON, mage.cards.b.BorealCentaur.class)); - cards.add(new SetCardInfo("Boreal Druid", 105, Rarity.COMMON, mage.cards.b.BorealDruid.class)); - cards.add(new SetCardInfo("Boreal Griffin", 2, Rarity.COMMON, mage.cards.b.BorealGriffin.class)); - cards.add(new SetCardInfo("Boreal Shelf", 144, Rarity.UNCOMMON, mage.cards.b.BorealShelf.class)); - cards.add(new SetCardInfo("Braid of Fire", 78, Rarity.RARE, mage.cards.b.BraidOfFire.class)); - cards.add(new SetCardInfo("Brooding Saurian", 106, Rarity.RARE, mage.cards.b.BroodingSaurian.class)); - cards.add(new SetCardInfo("Bull Aurochs", 107, Rarity.COMMON, mage.cards.b.BullAurochs.class)); - cards.add(new SetCardInfo("Chilling Shade", 53, Rarity.COMMON, mage.cards.c.ChillingShade.class)); - cards.add(new SetCardInfo("Chill to the Bone", 52, Rarity.COMMON, mage.cards.c.ChillToTheBone.class)); - cards.add(new SetCardInfo("Coldsteel Heart", 136, Rarity.UNCOMMON, mage.cards.c.ColdsteelHeart.class)); - cards.add(new SetCardInfo("Commandeer", 29, Rarity.RARE, mage.cards.c.Commandeer.class)); - cards.add(new SetCardInfo("Controvert", 30, Rarity.UNCOMMON, mage.cards.c.Controvert.class)); - cards.add(new SetCardInfo("Counterbalance", 31, Rarity.UNCOMMON, mage.cards.c.Counterbalance.class)); - cards.add(new SetCardInfo("Cryoclasm", 79, Rarity.UNCOMMON, mage.cards.c.Cryoclasm.class)); - cards.add(new SetCardInfo("Darien, King of Kjeldor", 4, Rarity.RARE, mage.cards.d.DarienKingOfKjeldor.class)); - cards.add(new SetCardInfo("Dark Depths", 145, Rarity.RARE, mage.cards.d.DarkDepths.class)); - cards.add(new SetCardInfo("Deathmark", 54, Rarity.UNCOMMON, mage.cards.d.Deathmark.class)); - cards.add(new SetCardInfo("Deepfire Elemental", 127, Rarity.UNCOMMON, mage.cards.d.DeepfireElemental.class)); - cards.add(new SetCardInfo("Diamond Faerie", 128, Rarity.RARE, mage.cards.d.DiamondFaerie.class)); - cards.add(new SetCardInfo("Disciple of Tevesh Szat", 55, Rarity.COMMON, mage.cards.d.DiscipleOfTeveshSzat.class)); - cards.add(new SetCardInfo("Drelnoch", 32, Rarity.COMMON, mage.cards.d.Drelnoch.class)); - cards.add(new SetCardInfo("Field Marshal", 5, Rarity.RARE, mage.cards.f.FieldMarshal.class)); - cards.add(new SetCardInfo("Flashfreeze", 33, Rarity.UNCOMMON, mage.cards.f.Flashfreeze.class)); - cards.add(new SetCardInfo("Frost Marsh", 146, Rarity.UNCOMMON, mage.cards.f.FrostMarsh.class)); - cards.add(new SetCardInfo("Frost Raptor", 34, Rarity.COMMON, mage.cards.f.FrostRaptor.class)); - cards.add(new SetCardInfo("Frozen Solid", 35, Rarity.COMMON, mage.cards.f.FrozenSolid.class)); - cards.add(new SetCardInfo("Fury of the Horde", 81, Rarity.RARE, mage.cards.f.FuryOfTheHorde.class)); - cards.add(new SetCardInfo("Garza Zol, Plague Queen", 129, Rarity.RARE, mage.cards.g.GarzaZolPlagueQueen.class)); - cards.add(new SetCardInfo("Gelid Shackles", 6, Rarity.COMMON, mage.cards.g.GelidShackles.class)); - cards.add(new SetCardInfo("Greater Stone Spirit", 84, Rarity.UNCOMMON, mage.cards.g.GreaterStoneSpirit.class)); - cards.add(new SetCardInfo("Grim Harvest", 58, Rarity.COMMON, mage.cards.g.GrimHarvest.class)); - cards.add(new SetCardInfo("Gristle Grinner", 59, Rarity.UNCOMMON, mage.cards.g.GristleGrinner.class)); - cards.add(new SetCardInfo("Gutless Ghoul", 60, Rarity.COMMON, mage.cards.g.GutlessGhoul.class)); - cards.add(new SetCardInfo("Haakon, Stromgald Scourge", 61, Rarity.RARE, mage.cards.h.HaakonStromgaldScourge.class)); - cards.add(new SetCardInfo("Heidar, Rimewind Master", 36, Rarity.RARE, mage.cards.h.HeidarRimewindMaster.class)); - cards.add(new SetCardInfo("Hibernation's End", 110, Rarity.RARE, mage.cards.h.HibernationsEnd.class)); - cards.add(new SetCardInfo("Highland Weald", 147, Rarity.UNCOMMON, mage.cards.h.HighlandWeald.class)); - cards.add(new SetCardInfo("Icefall", 85, Rarity.COMMON, mage.cards.i.Icefall.class)); - cards.add(new SetCardInfo("Into the North", 111, Rarity.COMMON, mage.cards.i.IntoTheNorth.class)); - cards.add(new SetCardInfo("Jester's Scepter", 137, Rarity.RARE, mage.cards.j.JestersScepter.class)); - cards.add(new SetCardInfo("Jokulmorder", 37, Rarity.RARE, mage.cards.j.Jokulmorder.class)); - cards.add(new SetCardInfo("Jotun Grunt", 8, Rarity.UNCOMMON, mage.cards.j.JotunGrunt.class)); - cards.add(new SetCardInfo("Juniper Order Ranger", 130, Rarity.UNCOMMON, mage.cards.j.JuniperOrderRanger.class)); - cards.add(new SetCardInfo("Karplusan Strider", 112, Rarity.UNCOMMON, mage.cards.k.KarplusanStrider.class)); - cards.add(new SetCardInfo("Karplusan Wolverine", 87, Rarity.COMMON, mage.cards.k.KarplusanWolverine.class)); - cards.add(new SetCardInfo("Kjeldoran Gargoyle", 10, Rarity.UNCOMMON, mage.cards.k.KjeldoranGargoyle.class)); - cards.add(new SetCardInfo("Kjeldoran Outrider", 12, Rarity.COMMON, mage.cards.k.KjeldoranOutrider.class)); - cards.add(new SetCardInfo("Krovikan Mist", 38, Rarity.COMMON, mage.cards.k.KrovikanMist.class)); - cards.add(new SetCardInfo("Krovikan Rot", 63, Rarity.UNCOMMON, mage.cards.k.KrovikanRot.class)); - cards.add(new SetCardInfo("Krovikan Scoundrel", 64, Rarity.COMMON, mage.cards.k.KrovikanScoundrel.class)); - cards.add(new SetCardInfo("Lightning Serpent", 88, Rarity.RARE, mage.cards.l.LightningSerpent.class)); - cards.add(new SetCardInfo("Lightning Storm", 89, Rarity.UNCOMMON, mage.cards.l.LightningStorm.class)); - cards.add(new SetCardInfo("Lovisa Coldeyes", 90, Rarity.RARE, mage.cards.l.LovisaColdeyes.class)); - cards.add(new SetCardInfo("Martyr of Ashes", 92, Rarity.COMMON, mage.cards.m.MartyrOfAshes.class)); - cards.add(new SetCardInfo("Martyr of Bones", 65, Rarity.COMMON, mage.cards.m.MartyrOfBones.class)); - cards.add(new SetCardInfo("Martyr of Frost", 40, Rarity.COMMON, mage.cards.m.MartyrOfFrost.class)); - cards.add(new SetCardInfo("Martyr of Sands", 15, Rarity.COMMON, mage.cards.m.MartyrOfSands.class)); - cards.add(new SetCardInfo("Martyr of Spores", 113, Rarity.COMMON, mage.cards.m.MartyrOfSpores.class)); - cards.add(new SetCardInfo("Mishra's Bauble", 138, Rarity.UNCOMMON, mage.cards.m.MishrasBauble.class)); - cards.add(new SetCardInfo("Mouth of Ronom", 148, Rarity.UNCOMMON, mage.cards.m.MouthOfRonom.class)); - cards.add(new SetCardInfo("Mystic Melting", 114, Rarity.UNCOMMON, mage.cards.m.MysticMelting.class)); - cards.add(new SetCardInfo("Ohran Viper", 115, Rarity.RARE, mage.cards.o.OhranViper.class)); - cards.add(new SetCardInfo("Ohran Yeti", 93, Rarity.COMMON, mage.cards.o.OhranYeti.class)); - cards.add(new SetCardInfo("Orcish Bloodpainter", 94, Rarity.COMMON, mage.cards.o.OrcishBloodpainter.class)); - cards.add(new SetCardInfo("Perilous Research", 41, Rarity.UNCOMMON, mage.cards.p.PerilousResearch.class)); - cards.add(new SetCardInfo("Phobian Phantasm", 66, Rarity.UNCOMMON, mage.cards.p.PhobianPhantasm.class)); - cards.add(new SetCardInfo("Phyrexian Ironfoot", 139, Rarity.UNCOMMON, mage.cards.p.PhyrexianIronfoot.class)); - cards.add(new SetCardInfo("Phyrexian Snowcrusher", 140, Rarity.UNCOMMON, mage.cards.p.PhyrexianSnowcrusher.class)); - cards.add(new SetCardInfo("Phyrexian Soulgorger", 141, Rarity.RARE, mage.cards.p.PhyrexianSoulgorger.class)); - cards.add(new SetCardInfo("Resize", 117, Rarity.UNCOMMON, mage.cards.r.Resize.class)); - cards.add(new SetCardInfo("Rimebound Dead", 69, Rarity.COMMON, mage.cards.r.RimeboundDead.class)); - cards.add(new SetCardInfo("Rime Transfusion", 68, Rarity.UNCOMMON, mage.cards.r.RimeTransfusion.class)); - cards.add(new SetCardInfo("Rimewind Cryomancer", 43, Rarity.UNCOMMON, mage.cards.r.RimewindCryomancer.class)); - cards.add(new SetCardInfo("Rimewind Taskmage", 44, Rarity.COMMON, mage.cards.r.RimewindTaskmage.class)); - cards.add(new SetCardInfo("Rite of Flame", 96, Rarity.COMMON, mage.cards.r.RiteOfFlame.class)); - cards.add(new SetCardInfo("Ronom Hulk", 119, Rarity.COMMON, mage.cards.r.RonomHulk.class)); - cards.add(new SetCardInfo("Ronom Unicorn", 16, Rarity.COMMON, mage.cards.r.RonomUnicorn.class)); - cards.add(new SetCardInfo("Rune Snag", 46, Rarity.COMMON, mage.cards.r.RuneSnag.class)); - cards.add(new SetCardInfo("Scrying Sheets", 149, Rarity.RARE, mage.cards.s.ScryingSheets.class)); - cards.add(new SetCardInfo("Sek'Kuar, Deathkeeper", 131, Rarity.RARE, mage.cards.s.SekKuarDeathkeeper.class)); - cards.add(new SetCardInfo("Sheltering Ancient", 121, Rarity.UNCOMMON, mage.cards.s.ShelteringAncient.class)); - cards.add(new SetCardInfo("Simian Brawler", 122, Rarity.COMMON, mage.cards.s.SimianBrawler.class)); - cards.add(new SetCardInfo("Skred", 97, Rarity.COMMON, mage.cards.s.Skred.class)); - cards.add(new SetCardInfo("Snow-Covered Forest", 155, Rarity.COMMON, mage.cards.s.SnowCoveredForest.class)); - cards.add(new SetCardInfo("Snow-Covered Island", 152, Rarity.COMMON, mage.cards.s.SnowCoveredIsland.class)); - cards.add(new SetCardInfo("Snow-Covered Mountain", 154, Rarity.COMMON, mage.cards.s.SnowCoveredMountain.class)); - cards.add(new SetCardInfo("Snow-Covered Plains", 151, Rarity.COMMON, mage.cards.s.SnowCoveredPlains.class)); - cards.add(new SetCardInfo("Snow-Covered Swamp", 153, Rarity.COMMON, mage.cards.s.SnowCoveredSwamp.class)); - cards.add(new SetCardInfo("Soul Spike", 70, Rarity.RARE, mage.cards.s.SoulSpike.class)); - cards.add(new SetCardInfo("Squall Drifter", 17, Rarity.COMMON, mage.cards.s.SquallDrifter.class)); - cards.add(new SetCardInfo("Steam Spitter", 124, Rarity.UNCOMMON, mage.cards.s.SteamSpitter.class)); - cards.add(new SetCardInfo("Stromgald Crusader", 71, Rarity.UNCOMMON, mage.cards.s.StromgaldCrusader.class)); - cards.add(new SetCardInfo("Sun's Bounty", 18, Rarity.COMMON, mage.cards.s.SunsBounty.class)); - cards.add(new SetCardInfo("Sunscour", 19, Rarity.RARE, mage.cards.s.Sunscour.class)); - cards.add(new SetCardInfo("Surging Aether", 47, Rarity.COMMON, mage.cards.s.SurgingAether.class)); - cards.add(new SetCardInfo("Surging Dementia", 72, Rarity.COMMON, mage.cards.s.SurgingDementia.class)); - cards.add(new SetCardInfo("Surging Flame", 99, Rarity.COMMON, mage.cards.s.SurgingFlame.class)); - cards.add(new SetCardInfo("Surging Might", 125, Rarity.COMMON, mage.cards.s.SurgingMight.class)); - cards.add(new SetCardInfo("Surging Sentinels", 20, Rarity.COMMON, mage.cards.s.SurgingSentinels.class)); - cards.add(new SetCardInfo("Swift Maneuver", 21, Rarity.COMMON, mage.cards.s.SwiftManeuver.class)); - cards.add(new SetCardInfo("Thermopod", 100, Rarity.COMMON, mage.cards.t.Thermopod.class)); - cards.add(new SetCardInfo("Thrumming Stone", 142, Rarity.RARE, mage.cards.t.ThrummingStone.class)); - cards.add(new SetCardInfo("Tresserhorn Sinks", 150, Rarity.UNCOMMON, mage.cards.t.TresserhornSinks.class)); - cards.add(new SetCardInfo("Ursine Fylgja", 22, Rarity.UNCOMMON, mage.cards.u.UrsineFylgja.class)); - cards.add(new SetCardInfo("Vanish into Memory", 133, Rarity.UNCOMMON, mage.cards.v.VanishIntoMemory.class)); - cards.add(new SetCardInfo("Wall of Shards", 23, Rarity.UNCOMMON, mage.cards.w.WallOfShards.class)); - cards.add(new SetCardInfo("White Shield Crusader", 24, Rarity.UNCOMMON, mage.cards.w.WhiteShieldCrusader.class)); - cards.add(new SetCardInfo("Wilderness Elemental", 134, Rarity.UNCOMMON, mage.cards.w.WildernessElemental.class)); - cards.add(new SetCardInfo("Woolly Razorback", 25, Rarity.RARE, mage.cards.w.WoollyRazorback.class)); - cards.add(new SetCardInfo("Zur the Enchanter", 135, Rarity.RARE, mage.cards.z.ZurTheEnchanter.class)); - } -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.SetType; +import mage.constants.Rarity; + +/** + * + * @author North + */ +public class Coldsnap extends ExpansionSet { + + private static final Coldsnap fINSTANCE = new Coldsnap(); + + public static Coldsnap getInstance() { + return fINSTANCE; + } + + private Coldsnap() { + super("Coldsnap", "CSP", ExpansionSet.buildDate(2006, 6, 21), SetType.EXPANSION); + this.blockName = "Ice Age"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + this.parentSet = IceAge.getInstance(); + this.hasBasicLands = false; + cards.add(new SetCardInfo("Adarkar Valkyrie", 1, Rarity.RARE, mage.cards.a.AdarkarValkyrie.class)); + cards.add(new SetCardInfo("Adarkar Windform", 26, Rarity.UNCOMMON, mage.cards.a.AdarkarWindform.class)); + cards.add(new SetCardInfo("Allosaurus Rider", 101, Rarity.RARE, mage.cards.a.AllosaurusRider.class)); + cards.add(new SetCardInfo("Arctic Flats", 143, Rarity.UNCOMMON, mage.cards.a.ArcticFlats.class)); + cards.add(new SetCardInfo("Arcum Dagsson", 27, Rarity.RARE, mage.cards.a.ArcumDagsson.class)); + cards.add(new SetCardInfo("Aurochs Herd", 103, Rarity.COMMON, mage.cards.a.AurochsHerd.class)); + cards.add(new SetCardInfo("Balduvian Rage", 76, Rarity.UNCOMMON, mage.cards.b.BalduvianRage.class)); + cards.add(new SetCardInfo("Blizzard Specter", 126, Rarity.UNCOMMON, mage.cards.b.BlizzardSpecter.class)); + cards.add(new SetCardInfo("Boreal Centaur", 104, Rarity.COMMON, mage.cards.b.BorealCentaur.class)); + cards.add(new SetCardInfo("Boreal Druid", 105, Rarity.COMMON, mage.cards.b.BorealDruid.class)); + cards.add(new SetCardInfo("Boreal Griffin", 2, Rarity.COMMON, mage.cards.b.BorealGriffin.class)); + cards.add(new SetCardInfo("Boreal Shelf", 144, Rarity.UNCOMMON, mage.cards.b.BorealShelf.class)); + cards.add(new SetCardInfo("Braid of Fire", 78, Rarity.RARE, mage.cards.b.BraidOfFire.class)); + cards.add(new SetCardInfo("Brooding Saurian", 106, Rarity.RARE, mage.cards.b.BroodingSaurian.class)); + cards.add(new SetCardInfo("Bull Aurochs", 107, Rarity.COMMON, mage.cards.b.BullAurochs.class)); + cards.add(new SetCardInfo("Chilling Shade", 53, Rarity.COMMON, mage.cards.c.ChillingShade.class)); + cards.add(new SetCardInfo("Chill to the Bone", 52, Rarity.COMMON, mage.cards.c.ChillToTheBone.class)); + cards.add(new SetCardInfo("Coldsteel Heart", 136, Rarity.UNCOMMON, mage.cards.c.ColdsteelHeart.class)); + cards.add(new SetCardInfo("Commandeer", 29, Rarity.RARE, mage.cards.c.Commandeer.class)); + cards.add(new SetCardInfo("Controvert", 30, Rarity.UNCOMMON, mage.cards.c.Controvert.class)); + cards.add(new SetCardInfo("Counterbalance", 31, Rarity.UNCOMMON, mage.cards.c.Counterbalance.class)); + cards.add(new SetCardInfo("Cryoclasm", 79, Rarity.UNCOMMON, mage.cards.c.Cryoclasm.class)); + cards.add(new SetCardInfo("Darien, King of Kjeldor", 4, Rarity.RARE, mage.cards.d.DarienKingOfKjeldor.class)); + cards.add(new SetCardInfo("Dark Depths", 145, Rarity.RARE, mage.cards.d.DarkDepths.class)); + cards.add(new SetCardInfo("Deathmark", 54, Rarity.UNCOMMON, mage.cards.d.Deathmark.class)); + cards.add(new SetCardInfo("Deepfire Elemental", 127, Rarity.UNCOMMON, mage.cards.d.DeepfireElemental.class)); + cards.add(new SetCardInfo("Diamond Faerie", 128, Rarity.RARE, mage.cards.d.DiamondFaerie.class)); + cards.add(new SetCardInfo("Disciple of Tevesh Szat", 55, Rarity.COMMON, mage.cards.d.DiscipleOfTeveshSzat.class)); + cards.add(new SetCardInfo("Drelnoch", 32, Rarity.COMMON, mage.cards.d.Drelnoch.class)); + cards.add(new SetCardInfo("Field Marshal", 5, Rarity.RARE, mage.cards.f.FieldMarshal.class)); + cards.add(new SetCardInfo("Flashfreeze", 33, Rarity.UNCOMMON, mage.cards.f.Flashfreeze.class)); + cards.add(new SetCardInfo("Frost Marsh", 146, Rarity.UNCOMMON, mage.cards.f.FrostMarsh.class)); + cards.add(new SetCardInfo("Frost Raptor", 34, Rarity.COMMON, mage.cards.f.FrostRaptor.class)); + cards.add(new SetCardInfo("Frozen Solid", 35, Rarity.COMMON, mage.cards.f.FrozenSolid.class)); + cards.add(new SetCardInfo("Fury of the Horde", 81, Rarity.RARE, mage.cards.f.FuryOfTheHorde.class)); + cards.add(new SetCardInfo("Garza Zol, Plague Queen", 129, Rarity.RARE, mage.cards.g.GarzaZolPlagueQueen.class)); + cards.add(new SetCardInfo("Gelid Shackles", 6, Rarity.COMMON, mage.cards.g.GelidShackles.class)); + cards.add(new SetCardInfo("Greater Stone Spirit", 84, Rarity.UNCOMMON, mage.cards.g.GreaterStoneSpirit.class)); + cards.add(new SetCardInfo("Grim Harvest", 58, Rarity.COMMON, mage.cards.g.GrimHarvest.class)); + cards.add(new SetCardInfo("Gristle Grinner", 59, Rarity.UNCOMMON, mage.cards.g.GristleGrinner.class)); + cards.add(new SetCardInfo("Gutless Ghoul", 60, Rarity.COMMON, mage.cards.g.GutlessGhoul.class)); + cards.add(new SetCardInfo("Haakon, Stromgald Scourge", 61, Rarity.RARE, mage.cards.h.HaakonStromgaldScourge.class)); + cards.add(new SetCardInfo("Heidar, Rimewind Master", 36, Rarity.RARE, mage.cards.h.HeidarRimewindMaster.class)); + cards.add(new SetCardInfo("Herald of Leshrac", 62, Rarity.RARE, mage.cards.h.HeraldOfLeshrac.class)); + cards.add(new SetCardInfo("Hibernation's End", 110, Rarity.RARE, mage.cards.h.HibernationsEnd.class)); + cards.add(new SetCardInfo("Highland Weald", 147, Rarity.UNCOMMON, mage.cards.h.HighlandWeald.class)); + cards.add(new SetCardInfo("Icefall", 85, Rarity.COMMON, mage.cards.i.Icefall.class)); + cards.add(new SetCardInfo("Into the North", 111, Rarity.COMMON, mage.cards.i.IntoTheNorth.class)); + cards.add(new SetCardInfo("Jester's Scepter", 137, Rarity.RARE, mage.cards.j.JestersScepter.class)); + cards.add(new SetCardInfo("Jokulmorder", 37, Rarity.RARE, mage.cards.j.Jokulmorder.class)); + cards.add(new SetCardInfo("Jotun Grunt", 8, Rarity.UNCOMMON, mage.cards.j.JotunGrunt.class)); + cards.add(new SetCardInfo("Juniper Order Ranger", 130, Rarity.UNCOMMON, mage.cards.j.JuniperOrderRanger.class)); + cards.add(new SetCardInfo("Karplusan Strider", 112, Rarity.UNCOMMON, mage.cards.k.KarplusanStrider.class)); + cards.add(new SetCardInfo("Karplusan Wolverine", 87, Rarity.COMMON, mage.cards.k.KarplusanWolverine.class)); + cards.add(new SetCardInfo("Kjeldoran Gargoyle", 10, Rarity.UNCOMMON, mage.cards.k.KjeldoranGargoyle.class)); + cards.add(new SetCardInfo("Kjeldoran Outrider", 12, Rarity.COMMON, mage.cards.k.KjeldoranOutrider.class)); + cards.add(new SetCardInfo("Krovikan Mist", 38, Rarity.COMMON, mage.cards.k.KrovikanMist.class)); + cards.add(new SetCardInfo("Krovikan Rot", 63, Rarity.UNCOMMON, mage.cards.k.KrovikanRot.class)); + cards.add(new SetCardInfo("Krovikan Scoundrel", 64, Rarity.COMMON, mage.cards.k.KrovikanScoundrel.class)); + cards.add(new SetCardInfo("Lightning Serpent", 88, Rarity.RARE, mage.cards.l.LightningSerpent.class)); + cards.add(new SetCardInfo("Lightning Storm", 89, Rarity.UNCOMMON, mage.cards.l.LightningStorm.class)); + cards.add(new SetCardInfo("Lovisa Coldeyes", 90, Rarity.RARE, mage.cards.l.LovisaColdeyes.class)); + cards.add(new SetCardInfo("Martyr of Ashes", 92, Rarity.COMMON, mage.cards.m.MartyrOfAshes.class)); + cards.add(new SetCardInfo("Martyr of Bones", 65, Rarity.COMMON, mage.cards.m.MartyrOfBones.class)); + cards.add(new SetCardInfo("Martyr of Frost", 40, Rarity.COMMON, mage.cards.m.MartyrOfFrost.class)); + cards.add(new SetCardInfo("Martyr of Sands", 15, Rarity.COMMON, mage.cards.m.MartyrOfSands.class)); + cards.add(new SetCardInfo("Martyr of Spores", 113, Rarity.COMMON, mage.cards.m.MartyrOfSpores.class)); + cards.add(new SetCardInfo("Mishra's Bauble", 138, Rarity.UNCOMMON, mage.cards.m.MishrasBauble.class)); + cards.add(new SetCardInfo("Mouth of Ronom", 148, Rarity.UNCOMMON, mage.cards.m.MouthOfRonom.class)); + cards.add(new SetCardInfo("Mystic Melting", 114, Rarity.UNCOMMON, mage.cards.m.MysticMelting.class)); + cards.add(new SetCardInfo("Ohran Viper", 115, Rarity.RARE, mage.cards.o.OhranViper.class)); + cards.add(new SetCardInfo("Ohran Yeti", 93, Rarity.COMMON, mage.cards.o.OhranYeti.class)); + cards.add(new SetCardInfo("Orcish Bloodpainter", 94, Rarity.COMMON, mage.cards.o.OrcishBloodpainter.class)); + cards.add(new SetCardInfo("Perilous Research", 41, Rarity.UNCOMMON, mage.cards.p.PerilousResearch.class)); + cards.add(new SetCardInfo("Phobian Phantasm", 66, Rarity.UNCOMMON, mage.cards.p.PhobianPhantasm.class)); + cards.add(new SetCardInfo("Phyrexian Ironfoot", 139, Rarity.UNCOMMON, mage.cards.p.PhyrexianIronfoot.class)); + cards.add(new SetCardInfo("Phyrexian Snowcrusher", 140, Rarity.UNCOMMON, mage.cards.p.PhyrexianSnowcrusher.class)); + cards.add(new SetCardInfo("Phyrexian Soulgorger", 141, Rarity.RARE, mage.cards.p.PhyrexianSoulgorger.class)); + cards.add(new SetCardInfo("Resize", 117, Rarity.UNCOMMON, mage.cards.r.Resize.class)); + cards.add(new SetCardInfo("Rimebound Dead", 69, Rarity.COMMON, mage.cards.r.RimeboundDead.class)); + cards.add(new SetCardInfo("Rime Transfusion", 68, Rarity.UNCOMMON, mage.cards.r.RimeTransfusion.class)); + cards.add(new SetCardInfo("Rimewind Cryomancer", 43, Rarity.UNCOMMON, mage.cards.r.RimewindCryomancer.class)); + cards.add(new SetCardInfo("Rimewind Taskmage", 44, Rarity.COMMON, mage.cards.r.RimewindTaskmage.class)); + cards.add(new SetCardInfo("Rite of Flame", 96, Rarity.COMMON, mage.cards.r.RiteOfFlame.class)); + cards.add(new SetCardInfo("Ronom Hulk", 119, Rarity.COMMON, mage.cards.r.RonomHulk.class)); + cards.add(new SetCardInfo("Ronom Unicorn", 16, Rarity.COMMON, mage.cards.r.RonomUnicorn.class)); + cards.add(new SetCardInfo("Rune Snag", 46, Rarity.COMMON, mage.cards.r.RuneSnag.class)); + cards.add(new SetCardInfo("Scrying Sheets", 149, Rarity.RARE, mage.cards.s.ScryingSheets.class)); + cards.add(new SetCardInfo("Sek'Kuar, Deathkeeper", 131, Rarity.RARE, mage.cards.s.SekKuarDeathkeeper.class)); + cards.add(new SetCardInfo("Sheltering Ancient", 121, Rarity.UNCOMMON, mage.cards.s.ShelteringAncient.class)); + cards.add(new SetCardInfo("Simian Brawler", 122, Rarity.COMMON, mage.cards.s.SimianBrawler.class)); + cards.add(new SetCardInfo("Skred", 97, Rarity.COMMON, mage.cards.s.Skred.class)); + cards.add(new SetCardInfo("Snow-Covered Forest", 155, Rarity.COMMON, mage.cards.s.SnowCoveredForest.class)); + cards.add(new SetCardInfo("Snow-Covered Island", 152, Rarity.COMMON, mage.cards.s.SnowCoveredIsland.class)); + cards.add(new SetCardInfo("Snow-Covered Mountain", 154, Rarity.COMMON, mage.cards.s.SnowCoveredMountain.class)); + cards.add(new SetCardInfo("Snow-Covered Plains", 151, Rarity.COMMON, mage.cards.s.SnowCoveredPlains.class)); + cards.add(new SetCardInfo("Snow-Covered Swamp", 153, Rarity.COMMON, mage.cards.s.SnowCoveredSwamp.class)); + cards.add(new SetCardInfo("Soul Spike", 70, Rarity.RARE, mage.cards.s.SoulSpike.class)); + cards.add(new SetCardInfo("Squall Drifter", 17, Rarity.COMMON, mage.cards.s.SquallDrifter.class)); + cards.add(new SetCardInfo("Steam Spitter", 124, Rarity.UNCOMMON, mage.cards.s.SteamSpitter.class)); + cards.add(new SetCardInfo("Stromgald Crusader", 71, Rarity.UNCOMMON, mage.cards.s.StromgaldCrusader.class)); + cards.add(new SetCardInfo("Sun's Bounty", 18, Rarity.COMMON, mage.cards.s.SunsBounty.class)); + cards.add(new SetCardInfo("Sunscour", 19, Rarity.RARE, mage.cards.s.Sunscour.class)); + cards.add(new SetCardInfo("Surging Aether", 47, Rarity.COMMON, mage.cards.s.SurgingAether.class)); + cards.add(new SetCardInfo("Surging Dementia", 72, Rarity.COMMON, mage.cards.s.SurgingDementia.class)); + cards.add(new SetCardInfo("Surging Flame", 99, Rarity.COMMON, mage.cards.s.SurgingFlame.class)); + cards.add(new SetCardInfo("Surging Might", 125, Rarity.COMMON, mage.cards.s.SurgingMight.class)); + cards.add(new SetCardInfo("Surging Sentinels", 20, Rarity.COMMON, mage.cards.s.SurgingSentinels.class)); + cards.add(new SetCardInfo("Swift Maneuver", 21, Rarity.COMMON, mage.cards.s.SwiftManeuver.class)); + cards.add(new SetCardInfo("Tamanoa", 132, Rarity.RARE, mage.cards.t.Tamanoa.class)); + cards.add(new SetCardInfo("Thermopod", 100, Rarity.COMMON, mage.cards.t.Thermopod.class)); + cards.add(new SetCardInfo("Thrumming Stone", 142, Rarity.RARE, mage.cards.t.ThrummingStone.class)); + cards.add(new SetCardInfo("Tresserhorn Sinks", 150, Rarity.UNCOMMON, mage.cards.t.TresserhornSinks.class)); + cards.add(new SetCardInfo("Ursine Fylgja", 22, Rarity.UNCOMMON, mage.cards.u.UrsineFylgja.class)); + cards.add(new SetCardInfo("Vanish into Memory", 133, Rarity.UNCOMMON, mage.cards.v.VanishIntoMemory.class)); + cards.add(new SetCardInfo("Wall of Shards", 23, Rarity.UNCOMMON, mage.cards.w.WallOfShards.class)); + cards.add(new SetCardInfo("White Shield Crusader", 24, Rarity.UNCOMMON, mage.cards.w.WhiteShieldCrusader.class)); + cards.add(new SetCardInfo("Wilderness Elemental", 134, Rarity.UNCOMMON, mage.cards.w.WildernessElemental.class)); + cards.add(new SetCardInfo("Woolly Razorback", 25, Rarity.RARE, mage.cards.w.WoollyRazorback.class)); + cards.add(new SetCardInfo("Zur the Enchanter", 135, Rarity.RARE, mage.cards.z.ZurTheEnchanter.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Commander.java b/Mage.Sets/src/mage/sets/Commander.java index 4916af74ecf..f9151b63334 100644 --- a/Mage.Sets/src/mage/sets/Commander.java +++ b/Mage.Sets/src/mage/sets/Commander.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -51,7 +47,7 @@ public class Commander extends ExpansionSet { } private Commander() { - super("Commander", "CMD", "mage.sets.commander", new GregorianCalendar(2011, 6, 17).getTime(), SetType.SUPPLEMENTAL); + super("Commander", "CMD", ExpansionSet.buildDate(2011, 6, 17), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Acidic Slime", 140, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); cards.add(new SetCardInfo("Acorn Catapult", 241, Rarity.RARE, mage.cards.a.AcornCatapult.class)); diff --git a/Mage.Sets/src/mage/sets/Commander2013.java b/Mage.Sets/src/mage/sets/Commander2013.java index 983cbce2dab..ee010562fd3 100644 --- a/Mage.Sets/src/mage/sets/Commander2013.java +++ b/Mage.Sets/src/mage/sets/Commander2013.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -51,7 +47,7 @@ public class Commander2013 extends ExpansionSet { } private Commander2013() { - super("Commander 2013 Edition", "C13", "mage.sets.commander2013", new GregorianCalendar(2013, 11, 01).getTime(), SetType.SUPPLEMENTAL); + super("Commander 2013 Edition", "C13", ExpansionSet.buildDate(2013, 11, 01), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Acidic Slime", 134, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); cards.add(new SetCardInfo("Act of Authority", 1, Rarity.RARE, mage.cards.a.ActOfAuthority.class)); diff --git a/Mage.Sets/src/mage/sets/Commander2014.java b/Mage.Sets/src/mage/sets/Commander2014.java index 55bbdec34dc..cb979dbbe7c 100644 --- a/Mage.Sets/src/mage/sets/Commander2014.java +++ b/Mage.Sets/src/mage/sets/Commander2014.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Commander2014 extends ExpansionSet { } private Commander2014() { - super("Commander 2014 Edition", "C14", "mage.sets.commander2014", new GregorianCalendar(2014, 11, 07).getTime(), SetType.SUPPLEMENTAL); + super("Commander 2014 Edition", "C14", ExpansionSet.buildDate(2014, 11, 07), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Abyssal Persecutor", 132, Rarity.MYTHIC, mage.cards.a.AbyssalPersecutor.class)); cards.add(new SetCardInfo("Adarkar Valkyrie", 63, Rarity.RARE, mage.cards.a.AdarkarValkyrie.class)); diff --git a/Mage.Sets/src/mage/sets/Commander2015.java b/Mage.Sets/src/mage/sets/Commander2015.java index 8f3d5d88f3b..975c7862203 100644 --- a/Mage.Sets/src/mage/sets/Commander2015.java +++ b/Mage.Sets/src/mage/sets/Commander2015.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Commander2015 extends ExpansionSet { } private Commander2015() { - super("Commander 2015 Edition", "C15", "mage.sets.commander2015", new GregorianCalendar(2015, 11, 13).getTime(), SetType.SUPPLEMENTAL); + super("Commander 2015 Edition", "C15", ExpansionSet.buildDate(2015, 11, 13), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Acidic Slime", 173, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); cards.add(new SetCardInfo("Act of Aggression", 141, Rarity.UNCOMMON, mage.cards.a.ActOfAggression.class)); diff --git a/Mage.Sets/src/mage/sets/Commander2016.java b/Mage.Sets/src/mage/sets/Commander2016.java index 62a3b70b9e5..04080f76cbf 100644 --- a/Mage.Sets/src/mage/sets/Commander2016.java +++ b/Mage.Sets/src/mage/sets/Commander2016.java @@ -27,11 +27,8 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class Commander2016 extends ExpansionSet { } private Commander2016() { - super("Commander 2016 Edition", "C16", "mage.sets.commander2016", new GregorianCalendar(2016, 11, 11).getTime(), SetType.SUPPLEMENTAL); + super("Commander 2016 Edition", "C16", ExpansionSet.buildDate(2016, 11, 11), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; } diff --git a/Mage.Sets/src/mage/sets/CommanderAnthology.java b/Mage.Sets/src/mage/sets/CommanderAnthology.java index 19d1076bee8..8f3be139860 100644 --- a/Mage.Sets/src/mage/sets/CommanderAnthology.java +++ b/Mage.Sets/src/mage/sets/CommanderAnthology.java @@ -27,11 +27,8 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -45,7 +42,7 @@ public class CommanderAnthology extends ExpansionSet { } private CommanderAnthology() { - super("Commander Anthology", "CMA2", "mage.sets.commanderanthology", new GregorianCalendar(2017, 6, 9).getTime(), SetType.SUPPLEMENTAL); + super("Commander Anthology", "CMA2", ExpansionSet.buildDate(2017, 6, 9), SetType.SUPPLEMENTAL); this.blockName = "Commander Anthology"; this.hasBasicLands = false; } diff --git a/Mage.Sets/src/mage/sets/CommandersArsenal.java b/Mage.Sets/src/mage/sets/CommandersArsenal.java index 23aee349668..3ab6d25a9a6 100644 --- a/Mage.Sets/src/mage/sets/CommandersArsenal.java +++ b/Mage.Sets/src/mage/sets/CommandersArsenal.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class CommandersArsenal extends ExpansionSet { } private CommandersArsenal() { - super("Commander's Arsenal", "CMA", "mage.sets.commandersarsenal", new GregorianCalendar(2012, 11, 2).getTime(), SetType.SUPPLEMENTAL); + super("Commander's Arsenal", "CMA", ExpansionSet.buildDate(2012, 11, 2), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Chaos Warp", 1, Rarity.SPECIAL, mage.cards.c.ChaosWarp.class)); cards.add(new SetCardInfo("Command Tower", 2, Rarity.COMMON, mage.cards.c.CommandTower.class)); diff --git a/Mage.Sets/src/mage/sets/Conflux.java b/Mage.Sets/src/mage/sets/Conflux.java index 36a0ba55385..260a72ccb94 100644 --- a/Mage.Sets/src/mage/sets/Conflux.java +++ b/Mage.Sets/src/mage/sets/Conflux.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class Conflux extends ExpansionSet { } private Conflux() { - super("Conflux", "CON", "mage.sets.conflux", new GregorianCalendar(2009, 0, 31).getTime(), SetType.EXPANSION); + super("Conflux", "CON", ExpansionSet.buildDate(2009, 0, 31), SetType.EXPANSION); this.blockName = "Shards of Alara"; this.parentSet = ShardsOfAlara.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Conspiracy.java b/Mage.Sets/src/mage/sets/Conspiracy.java index 88102cfcb81..178a8c34aab 100644 --- a/Mage.Sets/src/mage/sets/Conspiracy.java +++ b/Mage.Sets/src/mage/sets/Conspiracy.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -48,7 +46,7 @@ public class Conspiracy extends ExpansionSet { } private Conspiracy() { - super("Conspiracy", "CNS", "mage.sets.conspiracy", new GregorianCalendar(2014, 6, 6).getTime(), SetType.SUPPLEMENTAL); + super("Conspiracy", "CNS", ExpansionSet.buildDate(2014, 6, 6), SetType.SUPPLEMENTAL); this.blockName = "Conspiracy"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/ConspiracyTakeTheCrown.java b/Mage.Sets/src/mage/sets/ConspiracyTakeTheCrown.java index 5a3641de2e2..52e109aa85b 100644 --- a/Mage.Sets/src/mage/sets/ConspiracyTakeTheCrown.java +++ b/Mage.Sets/src/mage/sets/ConspiracyTakeTheCrown.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -48,7 +46,7 @@ public class ConspiracyTakeTheCrown extends ExpansionSet { } private ConspiracyTakeTheCrown() { - super("Conspiracy: Take the Crown", "CN2", "mage.sets.conspiracytakethecrown", new GregorianCalendar(2016, 8, 26).getTime(), SetType.SUPPLEMENTAL); + super("Conspiracy: Take the Crown", "CN2", ExpansionSet.buildDate(2016, 8, 26), SetType.SUPPLEMENTAL); this.blockName = "Conspiracy"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/DarkAscension.java b/Mage.Sets/src/mage/sets/DarkAscension.java index 87d13ba6e54..41df025c45e 100644 --- a/Mage.Sets/src/mage/sets/DarkAscension.java +++ b/Mage.Sets/src/mage/sets/DarkAscension.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class DarkAscension extends ExpansionSet { } private DarkAscension() { - super("Dark Ascension", "DKA", "mage.sets.darkascension", new GregorianCalendar(2012, 1, 3).getTime(), SetType.EXPANSION); + super("Dark Ascension", "DKA", ExpansionSet.buildDate(2012, 1, 3), SetType.EXPANSION); this.blockName = "Innistrad"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Darksteel.java b/Mage.Sets/src/mage/sets/Darksteel.java index 6745097d4a1..13fcfcb373f 100644 --- a/Mage.Sets/src/mage/sets/Darksteel.java +++ b/Mage.Sets/src/mage/sets/Darksteel.java @@ -3,9 +3,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; public class Darksteel extends ExpansionSet { @@ -16,7 +14,7 @@ public class Darksteel extends ExpansionSet { } public Darksteel() { - super("Darksteel", "DST", "mage.sets.darksteel", new GregorianCalendar(2004, 1, 6).getTime(), SetType.EXPANSION); + super("Darksteel", "DST", ExpansionSet.buildDate(2004, 1, 6), SetType.EXPANSION); this.blockName = "Mirrodin"; this.parentSet = Mirrodin.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Dissension.java b/Mage.Sets/src/mage/sets/Dissension.java index 7dcde42f525..1f0970959e4 100644 --- a/Mage.Sets/src/mage/sets/Dissension.java +++ b/Mage.Sets/src/mage/sets/Dissension.java @@ -30,9 +30,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; /** * Created by IntelliJ IDEA. User: Loki Date: 20.12.10 Time: 21:40 @@ -46,7 +44,7 @@ public class Dissension extends ExpansionSet { } private Dissension() { - super("Dissension", "DIS", "mage.sets.dissension", new GregorianCalendar(2006, 4, 5).getTime(), SetType.EXPANSION); + super("Dissension", "DIS", ExpansionSet.buildDate(2006, 4, 5), SetType.EXPANSION); this.blockName = "Ravnica"; this.parentSet = RavnicaCityOfGuilds.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/DivineVsDemonic.java b/Mage.Sets/src/mage/sets/DivineVsDemonic.java index cb61b8ab71c..5f0bdc454b1 100644 --- a/Mage.Sets/src/mage/sets/DivineVsDemonic.java +++ b/Mage.Sets/src/mage/sets/DivineVsDemonic.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class DivineVsDemonic extends ExpansionSet { } private DivineVsDemonic() { - super("Duel Decks: Divine vs. Demonic", "DDC", "mage.sets.divinevsdemonic", new GregorianCalendar(2009, 04, 10).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Divine vs. Demonic", "DDC", ExpansionSet.buildDate(2009, 04, 10), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Abyssal Gatekeeper", 31, Rarity.COMMON, mage.cards.a.AbyssalGatekeeper.class)); diff --git a/Mage.Sets/src/mage/sets/DragonsMaze.java b/Mage.Sets/src/mage/sets/DragonsMaze.java index b8605766029..a8152eec148 100644 --- a/Mage.Sets/src/mage/sets/DragonsMaze.java +++ b/Mage.Sets/src/mage/sets/DragonsMaze.java @@ -29,7 +29,6 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.constants.CardType; @@ -56,7 +55,7 @@ public class DragonsMaze extends ExpansionSet { List savedSpecialRares = new ArrayList<>(); private DragonsMaze() { - super("Dragon's Maze", "DGM", "mage.sets.dragonsmaze", new GregorianCalendar(2013, 5, 03).getTime(), SetType.EXPANSION); + super("Dragon's Maze", "DGM", ExpansionSet.buildDate(2013, 5, 03), SetType.EXPANSION); this.blockName = "Return to Ravnica"; this.hasBoosters = true; this.numBoosterSpecial = 1; diff --git a/Mage.Sets/src/mage/sets/DragonsOfTarkir.java b/Mage.Sets/src/mage/sets/DragonsOfTarkir.java index 9abeed5301a..fc012985b1c 100644 --- a/Mage.Sets/src/mage/sets/DragonsOfTarkir.java +++ b/Mage.Sets/src/mage/sets/DragonsOfTarkir.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -51,7 +47,7 @@ public class DragonsOfTarkir extends ExpansionSet { } private DragonsOfTarkir() { - super("Dragons of Tarkir", "DTK", "mage.sets.dragonsoftarkir", new GregorianCalendar(2015, 3, 27).getTime(), SetType.EXPANSION); + super("Dragons of Tarkir", "DTK", ExpansionSet.buildDate(2015, 3, 27), SetType.EXPANSION); this.blockName = "Khans of Tarkir"; this.hasBoosters = true; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers.java b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers.java index 7f176a53eea..e05b6a82bb9 100644 --- a/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers.java +++ b/Mage.Sets/src/mage/sets/DuelsOfThePlaneswalkers.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class DuelsOfThePlaneswalkers extends ExpansionSet { } private DuelsOfThePlaneswalkers() { - super("Duels of the Planeswalkers", "DPA", "mage.sets.duelsoftheplaneswalkers", new GregorianCalendar(2010, 6, 4).getTime(), SetType.SUPPLEMENTAL); + super("Duels of the Planeswalkers", "DPA", ExpansionSet.buildDate(2010, 6, 4), SetType.SUPPLEMENTAL); cards.add(new SetCardInfo("The Rack", 95, Rarity.UNCOMMON, mage.cards.t.TheRack.class)); } } diff --git a/Mage.Sets/src/mage/sets/EighthEdition.java b/Mage.Sets/src/mage/sets/EighthEdition.java index 3e2f5dc38f3..00910ea0666 100644 --- a/Mage.Sets/src/mage/sets/EighthEdition.java +++ b/Mage.Sets/src/mage/sets/EighthEdition.java @@ -1,13 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class EighthEdition extends ExpansionSet { @@ -18,7 +14,7 @@ public class EighthEdition extends ExpansionSet { } private EighthEdition() { - super("Eighth Edition", "8ED", "mage.sets.eighthedition", new GregorianCalendar(2003, 7, 28).getTime(), SetType.CORE); + super("Eighth Edition", "8ED", ExpansionSet.buildDate(2003, 7, 28), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/EldritchMoon.java b/Mage.Sets/src/mage/sets/EldritchMoon.java index 4762a40d405..c7a39754b24 100644 --- a/Mage.Sets/src/mage/sets/EldritchMoon.java +++ b/Mage.Sets/src/mage/sets/EldritchMoon.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -46,7 +44,7 @@ public class EldritchMoon extends ExpansionSet { } private EldritchMoon() { - super("Eldritch Moon", "EMN", "mage.sets.eldritchmoon", new GregorianCalendar(2016, 7, 26).getTime(), SetType.EXPANSION); + super("Eldritch Moon", "EMN", ExpansionSet.buildDate(2016, 7, 22), SetType.EXPANSION); this.blockName = "Shadows over Innistrad"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/ElspethVsKiora.java b/Mage.Sets/src/mage/sets/ElspethVsKiora.java index 85147d6bdec..0c76067dd56 100644 --- a/Mage.Sets/src/mage/sets/ElspethVsKiora.java +++ b/Mage.Sets/src/mage/sets/ElspethVsKiora.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -48,7 +44,7 @@ public class ElspethVsKiora extends ExpansionSet { } private ElspethVsKiora() { - super("Duel Decks: Elspeth vs. Kiora", "DDO", "mage.sets.elspethvskiora", new GregorianCalendar(2015, 2, 27).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Elspeth vs. Kiora", "DDO", ExpansionSet.buildDate(2015, 2, 27), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Accumulated Knowledge", 35, Rarity.COMMON, mage.cards.a.AccumulatedKnowledge.class)); diff --git a/Mage.Sets/src/mage/sets/ElspethVsTezzeret.java b/Mage.Sets/src/mage/sets/ElspethVsTezzeret.java index 34745319d21..c3bcf5bba28 100644 --- a/Mage.Sets/src/mage/sets/ElspethVsTezzeret.java +++ b/Mage.Sets/src/mage/sets/ElspethVsTezzeret.java @@ -3,12 +3,8 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class ElspethVsTezzeret extends ExpansionSet { private static final ElspethVsTezzeret fINSTANCE = new ElspethVsTezzeret(); @@ -18,7 +14,7 @@ public class ElspethVsTezzeret extends ExpansionSet { } private ElspethVsTezzeret() { - super("Duel Decks: Elspeth vs. Tezzeret", "DDF", "mage.sets.elspethvstezzeret", new GregorianCalendar(2010, 8, 3).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Elspeth vs. Tezzeret", "DDF", ExpansionSet.buildDate(2010, 8, 3), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Abolish", 29, Rarity.UNCOMMON, mage.cards.a.Abolish.class)); diff --git a/Mage.Sets/src/mage/sets/ElvesVsGoblins.java b/Mage.Sets/src/mage/sets/ElvesVsGoblins.java index dafe42dbff6..07e315269ad 100644 --- a/Mage.Sets/src/mage/sets/ElvesVsGoblins.java +++ b/Mage.Sets/src/mage/sets/ElvesVsGoblins.java @@ -6,14 +6,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -28,7 +24,7 @@ public class ElvesVsGoblins extends ExpansionSet { } private ElvesVsGoblins() { - super("Duel Decks: Elves vs. Goblins", "EVG", "mage.sets.elvesvsgoblins", new GregorianCalendar(2007, 11, 16).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Elves vs. Goblins", "EVG", ExpansionSet.buildDate(2007, 11, 16), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Akki Coalflinger", 33, Rarity.UNCOMMON, mage.cards.a.AkkiCoalflinger.class)); diff --git a/Mage.Sets/src/mage/sets/EternalMasters.java b/Mage.Sets/src/mage/sets/EternalMasters.java index a265d9b4c9d..823dc7577d8 100644 --- a/Mage.Sets/src/mage/sets/EternalMasters.java +++ b/Mage.Sets/src/mage/sets/EternalMasters.java @@ -1,309 +1,308 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.sets; - -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; - -/** - * - * @author fireshoes - */ -public class EternalMasters extends ExpansionSet { - - private static final EternalMasters fINSTANCE = new EternalMasters(); - - public static EternalMasters getInstance() { - return fINSTANCE; - } - - private EternalMasters() { - super("Eternal Masters", "EMA", "mage.sets.eternalmasters", new GregorianCalendar(2016, 6, 10).getTime(), SetType.SUPPLEMENTAL); - this.blockName = "Reprint"; - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 8; - cards.add(new SetCardInfo("Abundant Growth", 156, Rarity.COMMON, mage.cards.a.AbundantGrowth.class)); - cards.add(new SetCardInfo("Ancestral Mask", 157, Rarity.UNCOMMON, mage.cards.a.AncestralMask.class)); - cards.add(new SetCardInfo("Animate Dead", 78, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); - cards.add(new SetCardInfo("Annihilate", 79, Rarity.UNCOMMON, mage.cards.a.Annihilate.class)); - cards.add(new SetCardInfo("Arcanis the Omnipotent", 39, Rarity.RARE, mage.cards.a.ArcanisTheOmnipotent.class)); - cards.add(new SetCardInfo("Argothian Enchantress", 158, Rarity.MYTHIC, mage.cards.a.ArgothianEnchantress.class)); - cards.add(new SetCardInfo("Armadillo Cloak", 195, Rarity.UNCOMMON, mage.cards.a.ArmadilloCloak.class)); - cards.add(new SetCardInfo("Ashnod's Altar", 218, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); - cards.add(new SetCardInfo("Avarax", 117, Rarity.COMMON, mage.cards.a.Avarax.class)); - cards.add(new SetCardInfo("Aven Riftwatcher", 1, Rarity.COMMON, mage.cards.a.AvenRiftwatcher.class)); - cards.add(new SetCardInfo("Balance", 2, Rarity.MYTHIC, mage.cards.b.Balance.class)); - cards.add(new SetCardInfo("Baleful Strix", 196, Rarity.RARE, mage.cards.b.BalefulStrix.class)); - cards.add(new SetCardInfo("Ballynock Cohort", 3, Rarity.COMMON, mage.cards.b.BallynockCohort.class)); - cards.add(new SetCardInfo("Battle Squadron", 118, Rarity.UNCOMMON, mage.cards.b.BattleSquadron.class)); - cards.add(new SetCardInfo("Beetleback Chief", 119, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class)); - cards.add(new SetCardInfo("Benevolent Bodyguard", 4, Rarity.COMMON, mage.cards.b.BenevolentBodyguard.class)); - cards.add(new SetCardInfo("Blightsoil Druid", 80, Rarity.COMMON, mage.cards.b.BlightsoilDruid.class)); - cards.add(new SetCardInfo("Blood Artist", 81, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class)); - cards.add(new SetCardInfo("Bloodbraid Elf", 197, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); - cards.add(new SetCardInfo("Bloodfell Caves", 236, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); - cards.add(new SetCardInfo("Blossoming Sands", 237, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); - cards.add(new SetCardInfo("Borderland Marauder", 120, Rarity.COMMON, mage.cards.b.BorderlandMarauder.class)); - cards.add(new SetCardInfo("Brago, King Eternal", 198, Rarity.RARE, mage.cards.b.BragoKingEternal.class)); - cards.add(new SetCardInfo("Braids, Cabal Minion", 82, Rarity.RARE, mage.cards.b.BraidsCabalMinion.class)); - cards.add(new SetCardInfo("Brainstorm", 40, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Brawn", 159, Rarity.UNCOMMON, mage.cards.b.Brawn.class)); - cards.add(new SetCardInfo("Burning Vengeance", 121, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); - cards.add(new SetCardInfo("Cabal Therapy", 83, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); - cards.add(new SetCardInfo("Calciderm", 5, Rarity.UNCOMMON, mage.cards.c.Calciderm.class)); - cards.add(new SetCardInfo("Call the Skybreaker", 214, Rarity.RARE, mage.cards.c.CallTheSkybreaker.class)); - cards.add(new SetCardInfo("Carbonize", 122, Rarity.COMMON, mage.cards.c.Carbonize.class)); - cards.add(new SetCardInfo("Carrion Feeder", 84, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); - cards.add(new SetCardInfo("Centaur Chieftain", 160, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); - cards.add(new SetCardInfo("Cephalid Sage", 41, Rarity.COMMON, mage.cards.c.CephalidSage.class)); - cards.add(new SetCardInfo("Chain Lightning", 123, Rarity.UNCOMMON, mage.cards.c.ChainLightning.class)); - cards.add(new SetCardInfo("Chrome Mox", 219, Rarity.MYTHIC, mage.cards.c.ChromeMox.class)); - cards.add(new SetCardInfo("Civic Wayfinder", 161, Rarity.COMMON, mage.cards.c.CivicWayfinder.class)); - cards.add(new SetCardInfo("Commune with the Gods", 162, Rarity.COMMON, mage.cards.c.CommuneWithTheGods.class)); - cards.add(new SetCardInfo("Control Magic", 42, Rarity.RARE, mage.cards.c.ControlMagic.class)); - cards.add(new SetCardInfo("Counterspell", 43, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crater Hellion", 124, Rarity.RARE, mage.cards.c.CraterHellion.class)); - cards.add(new SetCardInfo("Dack Fayden", 199, Rarity.MYTHIC, mage.cards.d.DackFayden.class)); - cards.add(new SetCardInfo("Daze", 44, Rarity.UNCOMMON, mage.cards.d.Daze.class)); - cards.add(new SetCardInfo("Deadbridge Shaman", 85, Rarity.COMMON, mage.cards.d.DeadbridgeShaman.class)); - cards.add(new SetCardInfo("Deathrite Shaman", 215, Rarity.RARE, mage.cards.d.DeathriteShaman.class)); - cards.add(new SetCardInfo("Deep Analysis", 45, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); - cards.add(new SetCardInfo("Desperate Ravings", 125, Rarity.COMMON, mage.cards.d.DesperateRavings.class)); - cards.add(new SetCardInfo("Diminishing Returns", 46, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); - cards.add(new SetCardInfo("Dismal Backwater", 238, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); - cards.add(new SetCardInfo("Dragon Egg", 126, Rarity.COMMON, mage.cards.d.DragonEgg.class)); - cards.add(new SetCardInfo("Dream Twist", 47, Rarity.COMMON, mage.cards.d.DreamTwist.class)); - cards.add(new SetCardInfo("Dualcaster Mage", 127, Rarity.RARE, mage.cards.d.DualcasterMage.class)); - cards.add(new SetCardInfo("Duplicant", 220, Rarity.RARE, mage.cards.d.Duplicant.class)); - cards.add(new SetCardInfo("Duress", 86, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Eight-and-a-Half-Tails", 7, Rarity.RARE, mage.cards.e.EightAndAHalfTails.class)); - cards.add(new SetCardInfo("Elephant Guide", 163, Rarity.COMMON, mage.cards.e.ElephantGuide.class)); - cards.add(new SetCardInfo("Elite Vanguard", 8, Rarity.COMMON, mage.cards.e.EliteVanguard.class)); - cards.add(new SetCardInfo("Elvish Vanguard", 164, Rarity.COMMON, mage.cards.e.ElvishVanguard.class)); - cards.add(new SetCardInfo("Emmessi Tome", 221, Rarity.UNCOMMON, mage.cards.e.EmmessiTome.class)); - cards.add(new SetCardInfo("Emperor Crocodile", 165, Rarity.COMMON, mage.cards.e.EmperorCrocodile.class)); - cards.add(new SetCardInfo("Enlightened Tutor", 9, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); - cards.add(new SetCardInfo("Entomb", 87, Rarity.RARE, mage.cards.e.Entomb.class)); - cards.add(new SetCardInfo("Extract from Darkness", 200, Rarity.UNCOMMON, mage.cards.e.ExtractFromDarkness.class)); - cards.add(new SetCardInfo("Eyeblight's Ending", 88, Rarity.COMMON, mage.cards.e.EyeblightsEnding.class)); - cards.add(new SetCardInfo("Fact or Fiction", 48, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); - cards.add(new SetCardInfo("Faithless Looting", 128, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); - cards.add(new SetCardInfo("Faith's Fetters", 10, Rarity.UNCOMMON, mage.cards.f.FaithsFetters.class)); - cards.add(new SetCardInfo("Fervent Cathar", 129, Rarity.COMMON, mage.cards.f.FerventCathar.class)); - cards.add(new SetCardInfo("Field of Souls", 11, Rarity.UNCOMMON, mage.cards.f.FieldOfSouls.class)); - cards.add(new SetCardInfo("Firebolt", 130, Rarity.COMMON, mage.cards.f.Firebolt.class)); - cards.add(new SetCardInfo("Flame Jab", 131, Rarity.UNCOMMON, mage.cards.f.FlameJab.class)); - cards.add(new SetCardInfo("Flame-Kin Zealot", 201, Rarity.UNCOMMON, mage.cards.f.FlameKinZealot.class)); - cards.add(new SetCardInfo("Flinthoof Boar", 166, Rarity.UNCOMMON, mage.cards.f.FlinthoofBoar.class)); - cards.add(new SetCardInfo("Fog", 167, Rarity.COMMON, mage.cards.f.Fog.class)); - cards.add(new SetCardInfo("Force of Will", 49, Rarity.MYTHIC, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Future Sight", 50, Rarity.RARE, mage.cards.f.FutureSight.class)); - cards.add(new SetCardInfo("Gaea's Blessing", 168, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); - cards.add(new SetCardInfo("Gamble", 132, Rarity.RARE, mage.cards.g.Gamble.class)); - cards.add(new SetCardInfo("Gaseous Form", 51, Rarity.COMMON, mage.cards.g.GaseousForm.class)); - cards.add(new SetCardInfo("Ghitu Slinger", 133, Rarity.UNCOMMON, mage.cards.g.GhituSlinger.class)); - cards.add(new SetCardInfo("Giant Solifuge", 216, Rarity.RARE, mage.cards.g.GiantSolifuge.class)); - cards.add(new SetCardInfo("Giant Tortoise", 52, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); - cards.add(new SetCardInfo("Glacial Wall", 53, Rarity.COMMON, mage.cards.g.GlacialWall.class)); - cards.add(new SetCardInfo("Glare of Subdual", 202, Rarity.RARE, mage.cards.g.GlareOfSubdual.class)); - cards.add(new SetCardInfo("Glimmerpoint Stag", 12, Rarity.UNCOMMON, mage.cards.g.GlimmerpointStag.class)); - cards.add(new SetCardInfo("Goblin Charbelcher", 222, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); - cards.add(new SetCardInfo("Goblin Trenches", 203, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); - cards.add(new SetCardInfo("Gravedigger", 89, Rarity.COMMON, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Green Sun's Zenith", 169, Rarity.RARE, mage.cards.g.GreenSunsZenith.class)); - cards.add(new SetCardInfo("Harmonize", 170, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); - cards.add(new SetCardInfo("Havoc Demon", 90, Rarity.UNCOMMON, mage.cards.h.HavocDemon.class)); - cards.add(new SetCardInfo("Heritage Druid", 171, Rarity.RARE, mage.cards.h.HeritageDruid.class)); - cards.add(new SetCardInfo("Honden of Cleansing Fire", 13, Rarity.UNCOMMON, mage.cards.h.HondenOfCleansingFire.class)); - cards.add(new SetCardInfo("Honden of Infinite Rage", 134, Rarity.UNCOMMON, mage.cards.h.HondenOfInfiniteRage.class)); - cards.add(new SetCardInfo("Honden of Life's Web", 172, Rarity.UNCOMMON, mage.cards.h.HondenOfLifesWeb.class)); - cards.add(new SetCardInfo("Honden of Night's Reach", 91, Rarity.UNCOMMON, mage.cards.h.HondenOfNightsReach.class)); - cards.add(new SetCardInfo("Honden of Seeing Winds", 54, Rarity.UNCOMMON, mage.cards.h.HondenOfSeeingWinds.class)); - cards.add(new SetCardInfo("Humble", 14, Rarity.COMMON, mage.cards.h.Humble.class)); - cards.add(new SetCardInfo("Hydroblast", 55, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); - cards.add(new SetCardInfo("Hymn to Tourach", 92, Rarity.UNCOMMON, mage.cards.h.HymnToTourach1.class)); - cards.add(new SetCardInfo("Ichorid", 93, Rarity.RARE, mage.cards.i.Ichorid.class)); - cards.add(new SetCardInfo("Imperious Perfect", 173, Rarity.RARE, mage.cards.i.ImperiousPerfect.class)); - cards.add(new SetCardInfo("Inkwell Leviathan", 56, Rarity.RARE, mage.cards.i.InkwellLeviathan.class)); - cards.add(new SetCardInfo("Innocent Blood", 94, Rarity.COMMON, mage.cards.i.InnocentBlood.class)); - cards.add(new SetCardInfo("Intangible Virtue", 15, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); - cards.add(new SetCardInfo("Invigorate", 174, Rarity.UNCOMMON, mage.cards.i.Invigorate.class)); - cards.add(new SetCardInfo("Isochron Scepter", 223, Rarity.RARE, mage.cards.i.IsochronScepter.class)); - cards.add(new SetCardInfo("Jace, the Mind Sculptor", 57, Rarity.MYTHIC, mage.cards.j.JaceTheMindSculptor.class)); - cards.add(new SetCardInfo("Jareth, Leonine Titan", 16, Rarity.RARE, mage.cards.j.JarethLeonineTitan.class)); - cards.add(new SetCardInfo("Jetting Glasskite", 58, Rarity.UNCOMMON, mage.cards.j.JettingGlasskite.class)); - cards.add(new SetCardInfo("Juggernaut", 224, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); - cards.add(new SetCardInfo("Jungle Hollow", 239, Rarity.COMMON, mage.cards.j.JungleHollow.class)); - cards.add(new SetCardInfo("Karakas", 240, Rarity.MYTHIC, mage.cards.k.Karakas.class)); - cards.add(new SetCardInfo("Karmic Guide", 17, Rarity.RARE, mage.cards.k.KarmicGuide.class)); - cards.add(new SetCardInfo("Keldon Champion", 135, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); - cards.add(new SetCardInfo("Keldon Marauders", 136, Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); - cards.add(new SetCardInfo("Kird Ape", 137, Rarity.COMMON, mage.cards.k.KirdApe.class)); - cards.add(new SetCardInfo("Kor Hookmaster", 18, Rarity.COMMON, mage.cards.k.KorHookmaster.class)); - cards.add(new SetCardInfo("Llanowar Elves", 175, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Lys Alana Huntmaster", 176, Rarity.COMMON, mage.cards.l.LysAlanaHuntmaster.class)); - cards.add(new SetCardInfo("Lys Alana Scarblade", 95, Rarity.UNCOMMON, mage.cards.l.LysAlanaScarblade.class)); - cards.add(new SetCardInfo("Maelstrom Wanderer", 204, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class)); - cards.add(new SetCardInfo("Malicious Affliction", 96, Rarity.RARE, mage.cards.m.MaliciousAffliction.class)); - cards.add(new SetCardInfo("Mana Crypt", 225, Rarity.MYTHIC, mage.cards.m.ManaCrypt.class)); - cards.add(new SetCardInfo("Man-o'-War", 59, Rarity.COMMON, mage.cards.m.ManOWar.class)); - cards.add(new SetCardInfo("Maze of Ith", 241, Rarity.RARE, mage.cards.m.MazeOfIth.class)); - cards.add(new SetCardInfo("Memory Lapse", 60, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); - cards.add(new SetCardInfo("Merfolk Looter", 61, Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); - cards.add(new SetCardInfo("Mesa Enchantress", 19, Rarity.UNCOMMON, mage.cards.m.MesaEnchantress.class)); - cards.add(new SetCardInfo("Millikin", 226, Rarity.UNCOMMON, mage.cards.m.Millikin.class)); - cards.add(new SetCardInfo("Mindless Automaton", 227, Rarity.UNCOMMON, mage.cards.m.MindlessAutomaton.class)); - cards.add(new SetCardInfo("Mishra's Factory", 242, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); - cards.add(new SetCardInfo("Mistral Charger", 20, Rarity.COMMON, mage.cards.m.MistralCharger.class)); - cards.add(new SetCardInfo("Mogg Fanatic", 138, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); - cards.add(new SetCardInfo("Mogg War Marshal", 139, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); - cards.add(new SetCardInfo("Monk Idealist", 21, Rarity.COMMON, mage.cards.m.MonkIdealist.class)); - cards.add(new SetCardInfo("Mother of Runes", 22, Rarity.RARE, mage.cards.m.MotherOfRunes.class)); - cards.add(new SetCardInfo("Mystical Tutor", 62, Rarity.RARE, mage.cards.m.MysticalTutor.class)); - cards.add(new SetCardInfo("Natural Order", 177, Rarity.MYTHIC, mage.cards.n.NaturalOrder.class)); - cards.add(new SetCardInfo("Nature's Claim", 178, Rarity.COMMON, mage.cards.n.NaturesClaim.class)); - cards.add(new SetCardInfo("Nausea", 97, Rarity.COMMON, mage.cards.n.Nausea.class)); - cards.add(new SetCardInfo("Necropotence", 98, Rarity.MYTHIC, mage.cards.n.Necropotence.class)); - cards.add(new SetCardInfo("Nekrataal", 99, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); - cards.add(new SetCardInfo("Nevinyrral's Disk", 228, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); - cards.add(new SetCardInfo("Night's Whisper", 100, Rarity.COMMON, mage.cards.n.NightsWhisper.class)); - cards.add(new SetCardInfo("Nimble Mongoose", 179, Rarity.COMMON, mage.cards.n.NimbleMongoose.class)); - cards.add(new SetCardInfo("Oona's Grace", 63, Rarity.COMMON, mage.cards.o.OonasGrace.class)); - cards.add(new SetCardInfo("Orcish Oriflamme", 140, Rarity.COMMON, mage.cards.o.OrcishOriflamme.class)); - cards.add(new SetCardInfo("Pacifism", 23, Rarity.COMMON, mage.cards.p.Pacifism.class)); - cards.add(new SetCardInfo("Peregrine Drake", 64, Rarity.COMMON, mage.cards.p.PeregrineDrake.class)); - cards.add(new SetCardInfo("Phantom Monster", 65, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); - cards.add(new SetCardInfo("Phyrexian Gargantua", 101, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); - cards.add(new SetCardInfo("Phyrexian Ingester", 66, Rarity.UNCOMMON, mage.cards.p.PhyrexianIngester.class)); - cards.add(new SetCardInfo("Phyrexian Rager", 102, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); - cards.add(new SetCardInfo("Pilgrim's Eye", 229, Rarity.COMMON, mage.cards.p.PilgrimsEye.class)); - cards.add(new SetCardInfo("Plague Witch", 103, Rarity.COMMON, mage.cards.p.PlagueWitch.class)); - cards.add(new SetCardInfo("Price of Progress", 141, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); - cards.add(new SetCardInfo("Prismatic Lens", 230, Rarity.UNCOMMON, mage.cards.p.PrismaticLens.class)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 67, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Prowling Pangolin", 104, Rarity.COMMON, mage.cards.p.ProwlingPangolin.class)); - cards.add(new SetCardInfo("Pyroblast", 142, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); - cards.add(new SetCardInfo("Pyrokinesis", 143, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); - cards.add(new SetCardInfo("Quiet Speculation", 68, Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); - cards.add(new SetCardInfo("Raise the Alarm", 24, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); - cards.add(new SetCardInfo("Rally the Peasants", 25, Rarity.COMMON, mage.cards.r.RallyThePeasants.class)); - cards.add(new SetCardInfo("Rancor", 180, Rarity.UNCOMMON, mage.cards.r.Rancor.class)); - cards.add(new SetCardInfo("Reckless Charge", 144, Rarity.COMMON, mage.cards.r.RecklessCharge.class)); - cards.add(new SetCardInfo("Regal Force", 181, Rarity.RARE, mage.cards.r.RegalForce.class)); - cards.add(new SetCardInfo("Relic of Progenitus", 231, Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class)); - cards.add(new SetCardInfo("Roar of the Wurm", 182, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); - cards.add(new SetCardInfo("Roots", 183, Rarity.COMMON, mage.cards.r.Roots.class)); - cards.add(new SetCardInfo("Rorix Bladewing", 145, Rarity.RARE, mage.cards.r.RorixBladewing.class)); - cards.add(new SetCardInfo("Rugged Highlands", 243, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); - cards.add(new SetCardInfo("Scoured Barrens", 244, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); - cards.add(new SetCardInfo("Screeching Skaab", 69, Rarity.COMMON, mage.cards.s.ScreechingSkaab.class)); - cards.add(new SetCardInfo("Seal of Cleansing", 26, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); - cards.add(new SetCardInfo("Seal of Strength", 184, Rarity.COMMON, mage.cards.s.SealOfStrength.class)); - cards.add(new SetCardInfo("Second Thoughts", 27, Rarity.COMMON, mage.cards.s.SecondThoughts.class)); - cards.add(new SetCardInfo("Seismic Stomp", 146, Rarity.COMMON, mage.cards.s.SeismicStomp.class)); - cards.add(new SetCardInfo("Sengir Autocrat", 105, Rarity.UNCOMMON, mage.cards.s.SengirAutocrat.class)); - cards.add(new SetCardInfo("Sensei's Divining Top", 232, Rarity.RARE, mage.cards.s.SenseisDiviningTop.class)); - cards.add(new SetCardInfo("Sentinel Spider", 185, Rarity.COMMON, mage.cards.s.SentinelSpider.class)); - cards.add(new SetCardInfo("Serendib Efreet", 70, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); - cards.add(new SetCardInfo("Serra Angel", 28, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); - cards.add(new SetCardInfo("Shaman of the Pack", 205, Rarity.UNCOMMON, mage.cards.s.ShamanOfThePack.class)); - cards.add(new SetCardInfo("Shardless Agent", 206, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); - cards.add(new SetCardInfo("Shelter", 29, Rarity.COMMON, mage.cards.s.Shelter.class)); - cards.add(new SetCardInfo("Shoreline Ranger", 71, Rarity.COMMON, mage.cards.s.ShorelineRanger.class)); - cards.add(new SetCardInfo("Siege-Gang Commander", 147, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); - cards.add(new SetCardInfo("Silent Departure", 72, Rarity.COMMON, mage.cards.s.SilentDeparture.class)); - cards.add(new SetCardInfo("Silvos, Rogue Elemental", 186, Rarity.RARE, mage.cards.s.SilvosRogueElemental.class)); - cards.add(new SetCardInfo("Sinkhole", 106, Rarity.RARE, mage.cards.s.Sinkhole.class)); - cards.add(new SetCardInfo("Skulking Ghost", 107, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); - cards.add(new SetCardInfo("Sneak Attack", 148, Rarity.MYTHIC, mage.cards.s.SneakAttack.class)); - cards.add(new SetCardInfo("Soulcatcher", 30, Rarity.UNCOMMON, mage.cards.s.Soulcatcher.class)); - cards.add(new SetCardInfo("Sphinx of the Steel Wind", 207, Rarity.MYTHIC, mage.cards.s.SphinxOfTheSteelWind.class)); - cards.add(new SetCardInfo("Sprite Noble", 73, Rarity.UNCOMMON, mage.cards.s.SpriteNoble.class)); - cards.add(new SetCardInfo("Squadron Hawk", 31, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); - cards.add(new SetCardInfo("Stingscourger", 149, Rarity.COMMON, mage.cards.s.Stingscourger.class)); - cards.add(new SetCardInfo("Stupefying Touch", 74, Rarity.COMMON, mage.cards.s.StupefyingTouch.class)); - cards.add(new SetCardInfo("Sulfuric Vortex", 150, Rarity.RARE, mage.cards.s.SulfuricVortex.class)); - cards.add(new SetCardInfo("Swiftwater Cliffs", 245, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 32, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Sylvan Library", 187, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Sylvan Might", 188, Rarity.COMMON, mage.cards.s.SylvanMight.class)); - cards.add(new SetCardInfo("Thornweald Archer", 189, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); - cards.add(new SetCardInfo("Thornwood Falls", 246, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); - cards.add(new SetCardInfo("Thunderclap Wyvern", 208, Rarity.UNCOMMON, mage.cards.t.ThunderclapWyvern.class)); - cards.add(new SetCardInfo("Ticking Gnomes", 233, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); - cards.add(new SetCardInfo("Tidal Wave", 75, Rarity.COMMON, mage.cards.t.TidalWave.class)); - cards.add(new SetCardInfo("Timberwatch Elf", 190, Rarity.UNCOMMON, mage.cards.t.TimberwatchElf.class)); - cards.add(new SetCardInfo("Tooth and Claw", 151, Rarity.UNCOMMON, mage.cards.t.ToothAndClaw.class)); - cards.add(new SetCardInfo("Torrent of Souls", 217, Rarity.UNCOMMON, mage.cards.t.TorrentOfSouls.class)); - cards.add(new SetCardInfo("Toxic Deluge", 108, Rarity.RARE, mage.cards.t.ToxicDeluge.class)); - cards.add(new SetCardInfo("Tragic Slip", 109, Rarity.COMMON, mage.cards.t.TragicSlip.class)); - cards.add(new SetCardInfo("Tranquil Cove", 247, Rarity.COMMON, mage.cards.t.TranquilCove.class)); - cards.add(new SetCardInfo("Trygon Predator", 209, Rarity.UNCOMMON, mage.cards.t.TrygonPredator.class)); - cards.add(new SetCardInfo("Twisted Abomination", 110, Rarity.COMMON, mage.cards.t.TwistedAbomination.class)); - cards.add(new SetCardInfo("Undying Rage", 152, Rarity.COMMON, mage.cards.u.UndyingRage.class)); - cards.add(new SetCardInfo("Unexpectedly Absent", 33, Rarity.RARE, mage.cards.u.UnexpectedlyAbsent.class)); - cards.add(new SetCardInfo("Urborg Uprising", 111, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); - cards.add(new SetCardInfo("Vampiric Tutor", 112, Rarity.MYTHIC, mage.cards.v.VampiricTutor.class)); - cards.add(new SetCardInfo("Victimize", 113, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); - cards.add(new SetCardInfo("Vindicate", 210, Rarity.RARE, mage.cards.v.Vindicate.class)); - cards.add(new SetCardInfo("Visara the Dreadful", 114, Rarity.RARE, mage.cards.v.VisaraTheDreadful.class)); - cards.add(new SetCardInfo("Void", 211, Rarity.RARE, mage.cards.v.Void.class)); - cards.add(new SetCardInfo("Wakedancer", 116, Rarity.COMMON, mage.cards.w.Wakedancer.class)); - cards.add(new SetCardInfo("Wake of Vultures", 115, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); - cards.add(new SetCardInfo("Wall of Omens", 34, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); - cards.add(new SetCardInfo("Warden of Evos Isle", 76, Rarity.COMMON, mage.cards.w.WardenOfEvosIsle.class)); - cards.add(new SetCardInfo("War Priest of Thune", 35, Rarity.UNCOMMON, mage.cards.w.WarPriestOfThune.class)); - cards.add(new SetCardInfo("Wasteland", 248, Rarity.RARE, mage.cards.w.Wasteland.class)); - cards.add(new SetCardInfo("Wee Dragonauts", 212, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class)); - cards.add(new SetCardInfo("Welkin Guide", 36, Rarity.COMMON, mage.cards.w.WelkinGuide.class)); - cards.add(new SetCardInfo("Werebear", 191, Rarity.COMMON, mage.cards.w.Werebear.class)); - cards.add(new SetCardInfo("Whitemane Lion", 37, Rarity.COMMON, mage.cards.w.WhitemaneLion.class)); - cards.add(new SetCardInfo("Wildfire Emissary", 153, Rarity.COMMON, mage.cards.w.WildfireEmissary.class)); - cards.add(new SetCardInfo("Wind-Scarred Crag", 249, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); - cards.add(new SetCardInfo("Winter Orb", 234, Rarity.RARE, mage.cards.w.WinterOrb.class)); - cards.add(new SetCardInfo("Wirewood Symbiote", 192, Rarity.UNCOMMON, mage.cards.w.WirewoodSymbiote.class)); - cards.add(new SetCardInfo("Wonder", 77, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); - cards.add(new SetCardInfo("Worldgorger Dragon", 154, Rarity.MYTHIC, mage.cards.w.WorldgorgerDragon.class)); - cards.add(new SetCardInfo("Worn Powerstone", 235, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); - cards.add(new SetCardInfo("Wrath of God", 38, Rarity.RARE, mage.cards.w.WrathOfGod.class)); - cards.add(new SetCardInfo("Xantid Swarm", 193, Rarity.RARE, mage.cards.x.XantidSwarm.class)); - cards.add(new SetCardInfo("Yavimaya Enchantress", 194, Rarity.COMMON, mage.cards.y.YavimayaEnchantress.class)); - cards.add(new SetCardInfo("Young Pyromancer", 155, Rarity.UNCOMMON, mage.cards.y.YoungPyromancer.class)); - cards.add(new SetCardInfo("Zealous Persecution", 213, Rarity.UNCOMMON, mage.cards.z.ZealousPersecution.class)); - } - -} +/* +* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.SetType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class EternalMasters extends ExpansionSet { + + private static final EternalMasters fINSTANCE = new EternalMasters(); + + public static EternalMasters getInstance() { + return fINSTANCE; + } + + private EternalMasters() { + super("Eternal Masters", "EMA", ExpansionSet.buildDate(2016, 6, 10), SetType.SUPPLEMENTAL); + this.blockName = "Reprint"; + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + cards.add(new SetCardInfo("Abundant Growth", 156, Rarity.COMMON, mage.cards.a.AbundantGrowth.class)); + cards.add(new SetCardInfo("Ancestral Mask", 157, Rarity.UNCOMMON, mage.cards.a.AncestralMask.class)); + cards.add(new SetCardInfo("Animate Dead", 78, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Annihilate", 79, Rarity.UNCOMMON, mage.cards.a.Annihilate.class)); + cards.add(new SetCardInfo("Arcanis the Omnipotent", 39, Rarity.RARE, mage.cards.a.ArcanisTheOmnipotent.class)); + cards.add(new SetCardInfo("Argothian Enchantress", 158, Rarity.MYTHIC, mage.cards.a.ArgothianEnchantress.class)); + cards.add(new SetCardInfo("Armadillo Cloak", 195, Rarity.UNCOMMON, mage.cards.a.ArmadilloCloak.class)); + cards.add(new SetCardInfo("Ashnod's Altar", 218, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Avarax", 117, Rarity.COMMON, mage.cards.a.Avarax.class)); + cards.add(new SetCardInfo("Aven Riftwatcher", 1, Rarity.COMMON, mage.cards.a.AvenRiftwatcher.class)); + cards.add(new SetCardInfo("Balance", 2, Rarity.MYTHIC, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Baleful Strix", 196, Rarity.RARE, mage.cards.b.BalefulStrix.class)); + cards.add(new SetCardInfo("Ballynock Cohort", 3, Rarity.COMMON, mage.cards.b.BallynockCohort.class)); + cards.add(new SetCardInfo("Battle Squadron", 118, Rarity.UNCOMMON, mage.cards.b.BattleSquadron.class)); + cards.add(new SetCardInfo("Beetleback Chief", 119, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class)); + cards.add(new SetCardInfo("Benevolent Bodyguard", 4, Rarity.COMMON, mage.cards.b.BenevolentBodyguard.class)); + cards.add(new SetCardInfo("Blightsoil Druid", 80, Rarity.COMMON, mage.cards.b.BlightsoilDruid.class)); + cards.add(new SetCardInfo("Blood Artist", 81, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class)); + cards.add(new SetCardInfo("Bloodbraid Elf", 197, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); + cards.add(new SetCardInfo("Bloodfell Caves", 236, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); + cards.add(new SetCardInfo("Blossoming Sands", 237, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); + cards.add(new SetCardInfo("Borderland Marauder", 120, Rarity.COMMON, mage.cards.b.BorderlandMarauder.class)); + cards.add(new SetCardInfo("Brago, King Eternal", 198, Rarity.RARE, mage.cards.b.BragoKingEternal.class)); + cards.add(new SetCardInfo("Braids, Cabal Minion", 82, Rarity.RARE, mage.cards.b.BraidsCabalMinion.class)); + cards.add(new SetCardInfo("Brainstorm", 40, Rarity.UNCOMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brawn", 159, Rarity.UNCOMMON, mage.cards.b.Brawn.class)); + cards.add(new SetCardInfo("Burning Vengeance", 121, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); + cards.add(new SetCardInfo("Cabal Therapy", 83, Rarity.UNCOMMON, mage.cards.c.CabalTherapy.class)); + cards.add(new SetCardInfo("Calciderm", 5, Rarity.UNCOMMON, mage.cards.c.Calciderm.class)); + cards.add(new SetCardInfo("Call the Skybreaker", 214, Rarity.RARE, mage.cards.c.CallTheSkybreaker.class)); + cards.add(new SetCardInfo("Carbonize", 122, Rarity.COMMON, mage.cards.c.Carbonize.class)); + cards.add(new SetCardInfo("Carrion Feeder", 84, Rarity.COMMON, mage.cards.c.CarrionFeeder.class)); + cards.add(new SetCardInfo("Centaur Chieftain", 160, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); + cards.add(new SetCardInfo("Cephalid Sage", 41, Rarity.COMMON, mage.cards.c.CephalidSage.class)); + cards.add(new SetCardInfo("Chain Lightning", 123, Rarity.UNCOMMON, mage.cards.c.ChainLightning.class)); + cards.add(new SetCardInfo("Chrome Mox", 219, Rarity.MYTHIC, mage.cards.c.ChromeMox.class)); + cards.add(new SetCardInfo("Civic Wayfinder", 161, Rarity.COMMON, mage.cards.c.CivicWayfinder.class)); + cards.add(new SetCardInfo("Coalition Honor Guard", 6, Rarity.COMMON, mage.cards.c.CoalitionHonorGuard.class)); + cards.add(new SetCardInfo("Commune with the Gods", 162, Rarity.COMMON, mage.cards.c.CommuneWithTheGods.class)); + cards.add(new SetCardInfo("Control Magic", 42, Rarity.RARE, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Counterspell", 43, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crater Hellion", 124, Rarity.RARE, mage.cards.c.CraterHellion.class)); + cards.add(new SetCardInfo("Dack Fayden", 199, Rarity.MYTHIC, mage.cards.d.DackFayden.class)); + cards.add(new SetCardInfo("Daze", 44, Rarity.UNCOMMON, mage.cards.d.Daze.class)); + cards.add(new SetCardInfo("Deadbridge Shaman", 85, Rarity.COMMON, mage.cards.d.DeadbridgeShaman.class)); + cards.add(new SetCardInfo("Deathrite Shaman", 215, Rarity.RARE, mage.cards.d.DeathriteShaman.class)); + cards.add(new SetCardInfo("Deep Analysis", 45, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Desperate Ravings", 125, Rarity.COMMON, mage.cards.d.DesperateRavings.class)); + cards.add(new SetCardInfo("Diminishing Returns", 46, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); + cards.add(new SetCardInfo("Dismal Backwater", 238, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); + cards.add(new SetCardInfo("Dragon Egg", 126, Rarity.COMMON, mage.cards.d.DragonEgg.class)); + cards.add(new SetCardInfo("Dream Twist", 47, Rarity.COMMON, mage.cards.d.DreamTwist.class)); + cards.add(new SetCardInfo("Dualcaster Mage", 127, Rarity.RARE, mage.cards.d.DualcasterMage.class)); + cards.add(new SetCardInfo("Duplicant", 220, Rarity.RARE, mage.cards.d.Duplicant.class)); + cards.add(new SetCardInfo("Duress", 86, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Eight-and-a-Half-Tails", 7, Rarity.RARE, mage.cards.e.EightAndAHalfTails.class)); + cards.add(new SetCardInfo("Elephant Guide", 163, Rarity.COMMON, mage.cards.e.ElephantGuide.class)); + cards.add(new SetCardInfo("Elite Vanguard", 8, Rarity.COMMON, mage.cards.e.EliteVanguard.class)); + cards.add(new SetCardInfo("Elvish Vanguard", 164, Rarity.COMMON, mage.cards.e.ElvishVanguard.class)); + cards.add(new SetCardInfo("Emmessi Tome", 221, Rarity.UNCOMMON, mage.cards.e.EmmessiTome.class)); + cards.add(new SetCardInfo("Emperor Crocodile", 165, Rarity.COMMON, mage.cards.e.EmperorCrocodile.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 9, Rarity.RARE, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Entomb", 87, Rarity.RARE, mage.cards.e.Entomb.class)); + cards.add(new SetCardInfo("Extract from Darkness", 200, Rarity.UNCOMMON, mage.cards.e.ExtractFromDarkness.class)); + cards.add(new SetCardInfo("Eyeblight's Ending", 88, Rarity.COMMON, mage.cards.e.EyeblightsEnding.class)); + cards.add(new SetCardInfo("Fact or Fiction", 48, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faithless Looting", 128, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); + cards.add(new SetCardInfo("Faith's Fetters", 10, Rarity.UNCOMMON, mage.cards.f.FaithsFetters.class)); + cards.add(new SetCardInfo("Fervent Cathar", 129, Rarity.COMMON, mage.cards.f.FerventCathar.class)); + cards.add(new SetCardInfo("Field of Souls", 11, Rarity.UNCOMMON, mage.cards.f.FieldOfSouls.class)); + cards.add(new SetCardInfo("Firebolt", 130, Rarity.COMMON, mage.cards.f.Firebolt.class)); + cards.add(new SetCardInfo("Flame Jab", 131, Rarity.UNCOMMON, mage.cards.f.FlameJab.class)); + cards.add(new SetCardInfo("Flame-Kin Zealot", 201, Rarity.UNCOMMON, mage.cards.f.FlameKinZealot.class)); + cards.add(new SetCardInfo("Flinthoof Boar", 166, Rarity.UNCOMMON, mage.cards.f.FlinthoofBoar.class)); + cards.add(new SetCardInfo("Fog", 167, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Force of Will", 49, Rarity.MYTHIC, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Future Sight", 50, Rarity.RARE, mage.cards.f.FutureSight.class)); + cards.add(new SetCardInfo("Gaea's Blessing", 168, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Gamble", 132, Rarity.RARE, mage.cards.g.Gamble.class)); + cards.add(new SetCardInfo("Gaseous Form", 51, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Ghitu Slinger", 133, Rarity.UNCOMMON, mage.cards.g.GhituSlinger.class)); + cards.add(new SetCardInfo("Giant Solifuge", 216, Rarity.RARE, mage.cards.g.GiantSolifuge.class)); + cards.add(new SetCardInfo("Giant Tortoise", 52, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); + cards.add(new SetCardInfo("Glacial Wall", 53, Rarity.COMMON, mage.cards.g.GlacialWall.class)); + cards.add(new SetCardInfo("Glare of Subdual", 202, Rarity.RARE, mage.cards.g.GlareOfSubdual.class)); + cards.add(new SetCardInfo("Glimmerpoint Stag", 12, Rarity.UNCOMMON, mage.cards.g.GlimmerpointStag.class)); + cards.add(new SetCardInfo("Goblin Charbelcher", 222, Rarity.RARE, mage.cards.g.GoblinCharbelcher.class)); + cards.add(new SetCardInfo("Goblin Trenches", 203, Rarity.RARE, mage.cards.g.GoblinTrenches.class)); + cards.add(new SetCardInfo("Gravedigger", 89, Rarity.COMMON, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Green Sun's Zenith", 169, Rarity.RARE, mage.cards.g.GreenSunsZenith.class)); + cards.add(new SetCardInfo("Harmonize", 170, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Havoc Demon", 90, Rarity.UNCOMMON, mage.cards.h.HavocDemon.class)); + cards.add(new SetCardInfo("Heritage Druid", 171, Rarity.RARE, mage.cards.h.HeritageDruid.class)); + cards.add(new SetCardInfo("Honden of Cleansing Fire", 13, Rarity.UNCOMMON, mage.cards.h.HondenOfCleansingFire.class)); + cards.add(new SetCardInfo("Honden of Infinite Rage", 134, Rarity.UNCOMMON, mage.cards.h.HondenOfInfiniteRage.class)); + cards.add(new SetCardInfo("Honden of Life's Web", 172, Rarity.UNCOMMON, mage.cards.h.HondenOfLifesWeb.class)); + cards.add(new SetCardInfo("Honden of Night's Reach", 91, Rarity.UNCOMMON, mage.cards.h.HondenOfNightsReach.class)); + cards.add(new SetCardInfo("Honden of Seeing Winds", 54, Rarity.UNCOMMON, mage.cards.h.HondenOfSeeingWinds.class)); + cards.add(new SetCardInfo("Humble", 14, Rarity.COMMON, mage.cards.h.Humble.class)); + cards.add(new SetCardInfo("Hydroblast", 55, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn to Tourach", 92, Rarity.UNCOMMON, mage.cards.h.HymnToTourach1.class)); + cards.add(new SetCardInfo("Ichorid", 93, Rarity.RARE, mage.cards.i.Ichorid.class)); + cards.add(new SetCardInfo("Imperious Perfect", 173, Rarity.RARE, mage.cards.i.ImperiousPerfect.class)); + cards.add(new SetCardInfo("Inkwell Leviathan", 56, Rarity.RARE, mage.cards.i.InkwellLeviathan.class)); + cards.add(new SetCardInfo("Innocent Blood", 94, Rarity.COMMON, mage.cards.i.InnocentBlood.class)); + cards.add(new SetCardInfo("Intangible Virtue", 15, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); + cards.add(new SetCardInfo("Invigorate", 174, Rarity.UNCOMMON, mage.cards.i.Invigorate.class)); + cards.add(new SetCardInfo("Isochron Scepter", 223, Rarity.RARE, mage.cards.i.IsochronScepter.class)); + cards.add(new SetCardInfo("Jace, the Mind Sculptor", 57, Rarity.MYTHIC, mage.cards.j.JaceTheMindSculptor.class)); + cards.add(new SetCardInfo("Jareth, Leonine Titan", 16, Rarity.RARE, mage.cards.j.JarethLeonineTitan.class)); + cards.add(new SetCardInfo("Jetting Glasskite", 58, Rarity.UNCOMMON, mage.cards.j.JettingGlasskite.class)); + cards.add(new SetCardInfo("Juggernaut", 224, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Jungle Hollow", 239, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Karakas", 240, Rarity.MYTHIC, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Karmic Guide", 17, Rarity.RARE, mage.cards.k.KarmicGuide.class)); + cards.add(new SetCardInfo("Keldon Champion", 135, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); + cards.add(new SetCardInfo("Keldon Marauders", 136, Rarity.COMMON, mage.cards.k.KeldonMarauders.class)); + cards.add(new SetCardInfo("Kird Ape", 137, Rarity.COMMON, mage.cards.k.KirdApe.class)); + cards.add(new SetCardInfo("Kor Hookmaster", 18, Rarity.COMMON, mage.cards.k.KorHookmaster.class)); + cards.add(new SetCardInfo("Llanowar Elves", 175, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lys Alana Huntmaster", 176, Rarity.COMMON, mage.cards.l.LysAlanaHuntmaster.class)); + cards.add(new SetCardInfo("Lys Alana Scarblade", 95, Rarity.UNCOMMON, mage.cards.l.LysAlanaScarblade.class)); + cards.add(new SetCardInfo("Maelstrom Wanderer", 204, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class)); + cards.add(new SetCardInfo("Malicious Affliction", 96, Rarity.RARE, mage.cards.m.MaliciousAffliction.class)); + cards.add(new SetCardInfo("Mana Crypt", 225, Rarity.MYTHIC, mage.cards.m.ManaCrypt.class)); + cards.add(new SetCardInfo("Man-o'-War", 59, Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Maze of Ith", 241, Rarity.RARE, mage.cards.m.MazeOfIth.class)); + cards.add(new SetCardInfo("Memory Lapse", 60, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Merfolk Looter", 61, Rarity.UNCOMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Mesa Enchantress", 19, Rarity.UNCOMMON, mage.cards.m.MesaEnchantress.class)); + cards.add(new SetCardInfo("Millikin", 226, Rarity.UNCOMMON, mage.cards.m.Millikin.class)); + cards.add(new SetCardInfo("Mindless Automaton", 227, Rarity.UNCOMMON, mage.cards.m.MindlessAutomaton.class)); + cards.add(new SetCardInfo("Mishra's Factory", 242, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Mistral Charger", 20, Rarity.COMMON, mage.cards.m.MistralCharger.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 138, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Mogg War Marshal", 139, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); + cards.add(new SetCardInfo("Monk Idealist", 21, Rarity.COMMON, mage.cards.m.MonkIdealist.class)); + cards.add(new SetCardInfo("Mother of Runes", 22, Rarity.RARE, mage.cards.m.MotherOfRunes.class)); + cards.add(new SetCardInfo("Mystical Tutor", 62, Rarity.RARE, mage.cards.m.MysticalTutor.class)); + cards.add(new SetCardInfo("Natural Order", 177, Rarity.MYTHIC, mage.cards.n.NaturalOrder.class)); + cards.add(new SetCardInfo("Nature's Claim", 178, Rarity.COMMON, mage.cards.n.NaturesClaim.class)); + cards.add(new SetCardInfo("Nausea", 97, Rarity.COMMON, mage.cards.n.Nausea.class)); + cards.add(new SetCardInfo("Necropotence", 98, Rarity.MYTHIC, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Nekrataal", 99, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 228, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Night's Whisper", 100, Rarity.COMMON, mage.cards.n.NightsWhisper.class)); + cards.add(new SetCardInfo("Nimble Mongoose", 179, Rarity.COMMON, mage.cards.n.NimbleMongoose.class)); + cards.add(new SetCardInfo("Oona's Grace", 63, Rarity.COMMON, mage.cards.o.OonasGrace.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 140, Rarity.COMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Pacifism", 23, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Peregrine Drake", 64, Rarity.COMMON, mage.cards.p.PeregrineDrake.class)); + cards.add(new SetCardInfo("Phantom Monster", 65, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Phyrexian Gargantua", 101, Rarity.UNCOMMON, mage.cards.p.PhyrexianGargantua.class)); + cards.add(new SetCardInfo("Phyrexian Ingester", 66, Rarity.UNCOMMON, mage.cards.p.PhyrexianIngester.class)); + cards.add(new SetCardInfo("Phyrexian Rager", 102, Rarity.COMMON, mage.cards.p.PhyrexianRager.class)); + cards.add(new SetCardInfo("Pilgrim's Eye", 229, Rarity.COMMON, mage.cards.p.PilgrimsEye.class)); + cards.add(new SetCardInfo("Plague Witch", 103, Rarity.COMMON, mage.cards.p.PlagueWitch.class)); + cards.add(new SetCardInfo("Price of Progress", 141, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); + cards.add(new SetCardInfo("Prismatic Lens", 230, Rarity.UNCOMMON, mage.cards.p.PrismaticLens.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 67, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Prowling Pangolin", 104, Rarity.COMMON, mage.cards.p.ProwlingPangolin.class)); + cards.add(new SetCardInfo("Pyroblast", 142, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Pyrokinesis", 143, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); + cards.add(new SetCardInfo("Quiet Speculation", 68, Rarity.UNCOMMON, mage.cards.q.QuietSpeculation.class)); + cards.add(new SetCardInfo("Raise the Alarm", 24, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class)); + cards.add(new SetCardInfo("Rally the Peasants", 25, Rarity.COMMON, mage.cards.r.RallyThePeasants.class)); + cards.add(new SetCardInfo("Rancor", 180, Rarity.UNCOMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Reckless Charge", 144, Rarity.COMMON, mage.cards.r.RecklessCharge.class)); + cards.add(new SetCardInfo("Regal Force", 181, Rarity.RARE, mage.cards.r.RegalForce.class)); + cards.add(new SetCardInfo("Relic of Progenitus", 231, Rarity.UNCOMMON, mage.cards.r.RelicOfProgenitus.class)); + cards.add(new SetCardInfo("Roar of the Wurm", 182, Rarity.UNCOMMON, mage.cards.r.RoarOfTheWurm.class)); + cards.add(new SetCardInfo("Roots", 183, Rarity.COMMON, mage.cards.r.Roots.class)); + cards.add(new SetCardInfo("Rorix Bladewing", 145, Rarity.RARE, mage.cards.r.RorixBladewing.class)); + cards.add(new SetCardInfo("Rugged Highlands", 243, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); + cards.add(new SetCardInfo("Scoured Barrens", 244, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); + cards.add(new SetCardInfo("Screeching Skaab", 69, Rarity.COMMON, mage.cards.s.ScreechingSkaab.class)); + cards.add(new SetCardInfo("Seal of Cleansing", 26, Rarity.COMMON, mage.cards.s.SealOfCleansing.class)); + cards.add(new SetCardInfo("Seal of Strength", 184, Rarity.COMMON, mage.cards.s.SealOfStrength.class)); + cards.add(new SetCardInfo("Second Thoughts", 27, Rarity.COMMON, mage.cards.s.SecondThoughts.class)); + cards.add(new SetCardInfo("Seismic Stomp", 146, Rarity.COMMON, mage.cards.s.SeismicStomp.class)); + cards.add(new SetCardInfo("Sengir Autocrat", 105, Rarity.UNCOMMON, mage.cards.s.SengirAutocrat.class)); + cards.add(new SetCardInfo("Sensei's Divining Top", 232, Rarity.RARE, mage.cards.s.SenseisDiviningTop.class)); + cards.add(new SetCardInfo("Sentinel Spider", 185, Rarity.COMMON, mage.cards.s.SentinelSpider.class)); + cards.add(new SetCardInfo("Serendib Efreet", 70, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serra Angel", 28, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Shaman of the Pack", 205, Rarity.UNCOMMON, mage.cards.s.ShamanOfThePack.class)); + cards.add(new SetCardInfo("Shardless Agent", 206, Rarity.RARE, mage.cards.s.ShardlessAgent.class)); + cards.add(new SetCardInfo("Shelter", 29, Rarity.COMMON, mage.cards.s.Shelter.class)); + cards.add(new SetCardInfo("Shoreline Ranger", 71, Rarity.COMMON, mage.cards.s.ShorelineRanger.class)); + cards.add(new SetCardInfo("Siege-Gang Commander", 147, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); + cards.add(new SetCardInfo("Silent Departure", 72, Rarity.COMMON, mage.cards.s.SilentDeparture.class)); + cards.add(new SetCardInfo("Silvos, Rogue Elemental", 186, Rarity.RARE, mage.cards.s.SilvosRogueElemental.class)); + cards.add(new SetCardInfo("Sinkhole", 106, Rarity.RARE, mage.cards.s.Sinkhole.class)); + cards.add(new SetCardInfo("Skulking Ghost", 107, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); + cards.add(new SetCardInfo("Sneak Attack", 148, Rarity.MYTHIC, mage.cards.s.SneakAttack.class)); + cards.add(new SetCardInfo("Soulcatcher", 30, Rarity.UNCOMMON, mage.cards.s.Soulcatcher.class)); + cards.add(new SetCardInfo("Sphinx of the Steel Wind", 207, Rarity.MYTHIC, mage.cards.s.SphinxOfTheSteelWind.class)); + cards.add(new SetCardInfo("Sprite Noble", 73, Rarity.UNCOMMON, mage.cards.s.SpriteNoble.class)); + cards.add(new SetCardInfo("Squadron Hawk", 31, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); + cards.add(new SetCardInfo("Stingscourger", 149, Rarity.COMMON, mage.cards.s.Stingscourger.class)); + cards.add(new SetCardInfo("Stupefying Touch", 74, Rarity.COMMON, mage.cards.s.StupefyingTouch.class)); + cards.add(new SetCardInfo("Sulfuric Vortex", 150, Rarity.RARE, mage.cards.s.SulfuricVortex.class)); + cards.add(new SetCardInfo("Swiftwater Cliffs", 245, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 32, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Sylvan Library", 187, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Sylvan Might", 188, Rarity.COMMON, mage.cards.s.SylvanMight.class)); + cards.add(new SetCardInfo("Thornweald Archer", 189, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); + cards.add(new SetCardInfo("Thornwood Falls", 246, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); + cards.add(new SetCardInfo("Thunderclap Wyvern", 208, Rarity.UNCOMMON, mage.cards.t.ThunderclapWyvern.class)); + cards.add(new SetCardInfo("Ticking Gnomes", 233, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); + cards.add(new SetCardInfo("Tidal Wave", 75, Rarity.COMMON, mage.cards.t.TidalWave.class)); + cards.add(new SetCardInfo("Timberwatch Elf", 190, Rarity.UNCOMMON, mage.cards.t.TimberwatchElf.class)); + cards.add(new SetCardInfo("Tooth and Claw", 151, Rarity.UNCOMMON, mage.cards.t.ToothAndClaw.class)); + cards.add(new SetCardInfo("Torrent of Souls", 217, Rarity.UNCOMMON, mage.cards.t.TorrentOfSouls.class)); + cards.add(new SetCardInfo("Toxic Deluge", 108, Rarity.RARE, mage.cards.t.ToxicDeluge.class)); + cards.add(new SetCardInfo("Tragic Slip", 109, Rarity.COMMON, mage.cards.t.TragicSlip.class)); + cards.add(new SetCardInfo("Tranquil Cove", 247, Rarity.COMMON, mage.cards.t.TranquilCove.class)); + cards.add(new SetCardInfo("Trygon Predator", 209, Rarity.UNCOMMON, mage.cards.t.TrygonPredator.class)); + cards.add(new SetCardInfo("Twisted Abomination", 110, Rarity.COMMON, mage.cards.t.TwistedAbomination.class)); + cards.add(new SetCardInfo("Undying Rage", 152, Rarity.COMMON, mage.cards.u.UndyingRage.class)); + cards.add(new SetCardInfo("Unexpectedly Absent", 33, Rarity.RARE, mage.cards.u.UnexpectedlyAbsent.class)); + cards.add(new SetCardInfo("Urborg Uprising", 111, Rarity.COMMON, mage.cards.u.UrborgUprising.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 112, Rarity.MYTHIC, mage.cards.v.VampiricTutor.class)); + cards.add(new SetCardInfo("Victimize", 113, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); + cards.add(new SetCardInfo("Vindicate", 210, Rarity.RARE, mage.cards.v.Vindicate.class)); + cards.add(new SetCardInfo("Visara the Dreadful", 114, Rarity.RARE, mage.cards.v.VisaraTheDreadful.class)); + cards.add(new SetCardInfo("Void", 211, Rarity.RARE, mage.cards.v.Void.class)); + cards.add(new SetCardInfo("Wakedancer", 116, Rarity.COMMON, mage.cards.w.Wakedancer.class)); + cards.add(new SetCardInfo("Wake of Vultures", 115, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); + cards.add(new SetCardInfo("Wall of Omens", 34, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); + cards.add(new SetCardInfo("Warden of Evos Isle", 76, Rarity.COMMON, mage.cards.w.WardenOfEvosIsle.class)); + cards.add(new SetCardInfo("War Priest of Thune", 35, Rarity.UNCOMMON, mage.cards.w.WarPriestOfThune.class)); + cards.add(new SetCardInfo("Wasteland", 248, Rarity.RARE, mage.cards.w.Wasteland.class)); + cards.add(new SetCardInfo("Wee Dragonauts", 212, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class)); + cards.add(new SetCardInfo("Welkin Guide", 36, Rarity.COMMON, mage.cards.w.WelkinGuide.class)); + cards.add(new SetCardInfo("Werebear", 191, Rarity.COMMON, mage.cards.w.Werebear.class)); + cards.add(new SetCardInfo("Whitemane Lion", 37, Rarity.COMMON, mage.cards.w.WhitemaneLion.class)); + cards.add(new SetCardInfo("Wildfire Emissary", 153, Rarity.COMMON, mage.cards.w.WildfireEmissary.class)); + cards.add(new SetCardInfo("Wind-Scarred Crag", 249, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); + cards.add(new SetCardInfo("Winter Orb", 234, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Wirewood Symbiote", 192, Rarity.UNCOMMON, mage.cards.w.WirewoodSymbiote.class)); + cards.add(new SetCardInfo("Wonder", 77, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); + cards.add(new SetCardInfo("Worldgorger Dragon", 154, Rarity.MYTHIC, mage.cards.w.WorldgorgerDragon.class)); + cards.add(new SetCardInfo("Worn Powerstone", 235, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); + cards.add(new SetCardInfo("Wrath of God", 38, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Xantid Swarm", 193, Rarity.RARE, mage.cards.x.XantidSwarm.class)); + cards.add(new SetCardInfo("Yavimaya Enchantress", 194, Rarity.COMMON, mage.cards.y.YavimayaEnchantress.class)); + cards.add(new SetCardInfo("Young Pyromancer", 155, Rarity.UNCOMMON, mage.cards.y.YoungPyromancer.class)); + cards.add(new SetCardInfo("Zealous Persecution", 213, Rarity.UNCOMMON, mage.cards.z.ZealousPersecution.class)); + } + +} diff --git a/Mage.Sets/src/mage/sets/EuropeanLandProgram.java b/Mage.Sets/src/mage/sets/EuropeanLandProgram.java index 7115fed39ba..6c0c6fa95b7 100644 --- a/Mage.Sets/src/mage/sets/EuropeanLandProgram.java +++ b/Mage.Sets/src/mage/sets/EuropeanLandProgram.java @@ -27,20 +27,15 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ - public class EuropeanLandProgram extends ExpansionSet { private static final EuropeanLandProgram fINSTANCE = new EuropeanLandProgram(); @@ -50,7 +45,7 @@ public class EuropeanLandProgram extends ExpansionSet { } private EuropeanLandProgram() { - super("European Land Program", "EURO", "mage.sets.europeanlandprogram", new GregorianCalendar(2000, 2, 14).getTime(), SetType.PROMOTIONAL); + super("European Land Program", "EURO", ExpansionSet.buildDate(2000, 2, 14), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); cards.add(new SetCardInfo("Forest", 6, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); diff --git a/Mage.Sets/src/mage/sets/Eventide.java b/Mage.Sets/src/mage/sets/Eventide.java index 3a4f427d371..bbdca5340e4 100644 --- a/Mage.Sets/src/mage/sets/Eventide.java +++ b/Mage.Sets/src/mage/sets/Eventide.java @@ -3,9 +3,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; public class Eventide extends ExpansionSet { private static final Eventide fINSTANCE = new Eventide(); @@ -15,7 +13,7 @@ public class Eventide extends ExpansionSet { } private Eventide() { - super("Eventide", "EVE", "mage.sets.eventide", new GregorianCalendar(2008, 6, 25).getTime(), SetType.EXPANSION); + super("Eventide", "EVE", ExpansionSet.buildDate(2008, 6, 25), SetType.EXPANSION); this.blockName = "Shadowmoor"; this.parentSet = Shadowmoor.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Exodus.java b/Mage.Sets/src/mage/sets/Exodus.java index 945866a5e0b..7d42ace2c2e 100644 --- a/Mage.Sets/src/mage/sets/Exodus.java +++ b/Mage.Sets/src/mage/sets/Exodus.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -47,7 +44,7 @@ public class Exodus extends ExpansionSet { } private Exodus() { - super("Exodus", "EXO", "mage.sets.exodus", new GregorianCalendar(1998, 5, 6).getTime(), SetType.EXPANSION); + super("Exodus", "EXO", ExpansionSet.buildDate(1998, 6, 15), SetType.EXPANSION); this.blockName = "Tempest"; this.parentSet = Tempest.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/FTVAngels.java b/Mage.Sets/src/mage/sets/FTVAngels.java index cfe6da47d06..abf0527ce63 100644 --- a/Mage.Sets/src/mage/sets/FTVAngels.java +++ b/Mage.Sets/src/mage/sets/FTVAngels.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVAngels extends ExpansionSet { + private static final FTVAngels fINSTANCE = new FTVAngels(); public static FTVAngels getInstance() { @@ -46,7 +44,7 @@ public class FTVAngels extends ExpansionSet { } private FTVAngels() { - super("From the Vault: Angels", "V15", "mage.sets.ftvangels", new GregorianCalendar(2015, 8, 21).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Angels", "V15", ExpansionSet.buildDate(2015, 8, 21), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Akroma, Angel of Fury", 1, Rarity.MYTHIC, mage.cards.a.AkromaAngelOfFury.class)); cards.add(new SetCardInfo("Akroma, Angel of Wrath", 2, Rarity.MYTHIC, mage.cards.a.AkromaAngelOfWrath.class)); diff --git a/Mage.Sets/src/mage/sets/FTVAnnihilation.java b/Mage.Sets/src/mage/sets/FTVAnnihilation.java index 1d9fef0c904..f699372b19a 100644 --- a/Mage.Sets/src/mage/sets/FTVAnnihilation.java +++ b/Mage.Sets/src/mage/sets/FTVAnnihilation.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVAnnihilation extends ExpansionSet { + private static final FTVAnnihilation fINSTANCE = new FTVAnnihilation(); public static FTVAnnihilation getInstance() { @@ -46,7 +44,7 @@ public class FTVAnnihilation extends ExpansionSet { } private FTVAnnihilation() { - super("From the Vault: Annihilation", "V14", "mage.sets.ftvannihilation", new GregorianCalendar(2014, 8, 22).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Annihilation", "V14", ExpansionSet.buildDate(2014, 8, 22), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Armageddon", 1, Rarity.MYTHIC, mage.cards.a.Armageddon.class)); cards.add(new SetCardInfo("Burning of Xinye", 2, Rarity.MYTHIC, mage.cards.b.BurningOfXinye.class)); diff --git a/Mage.Sets/src/mage/sets/FTVDragons.java b/Mage.Sets/src/mage/sets/FTVDragons.java index cab4e302f5d..87b7e27df99 100644 --- a/Mage.Sets/src/mage/sets/FTVDragons.java +++ b/Mage.Sets/src/mage/sets/FTVDragons.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVDragons extends ExpansionSet { + private static final FTVDragons fINSTANCE = new FTVDragons(); public static FTVDragons getInstance() { @@ -46,7 +44,7 @@ public class FTVDragons extends ExpansionSet { } private FTVDragons() { - super("From the Vault: Dragons", "DRB", "mage.sets.ftvdragons", new GregorianCalendar(2008, 8, 29).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Dragons", "DRB", ExpansionSet.buildDate(2008, 8, 29), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Bladewing the Risen", 1, Rarity.RARE, mage.cards.b.BladewingTheRisen.class)); cards.add(new SetCardInfo("Bogardan Hellkite", 2, Rarity.RARE, mage.cards.b.BogardanHellkite.class)); diff --git a/Mage.Sets/src/mage/sets/FTVExiled.java b/Mage.Sets/src/mage/sets/FTVExiled.java index bb7a907d8cb..054fed5333b 100644 --- a/Mage.Sets/src/mage/sets/FTVExiled.java +++ b/Mage.Sets/src/mage/sets/FTVExiled.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVExiled extends ExpansionSet { + private static final FTVExiled fINSTANCE = new FTVExiled(); public static FTVExiled getInstance() { @@ -46,7 +44,7 @@ public class FTVExiled extends ExpansionSet { } private FTVExiled() { - super("From the Vault: Exiled", "V09", "mage.sets.ftvexiled", new GregorianCalendar(2009, 8, 28).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Exiled", "V09", ExpansionSet.buildDate(2009, 8, 28), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Balance", 1, Rarity.MYTHIC, mage.cards.b.Balance.class)); cards.add(new SetCardInfo("Berserk", 2, Rarity.MYTHIC, mage.cards.b.Berserk.class)); @@ -64,4 +62,4 @@ public class FTVExiled extends ExpansionSet { cards.add(new SetCardInfo("Tinker", 14, Rarity.MYTHIC, mage.cards.t.Tinker.class)); cards.add(new SetCardInfo("Trinisphere", 15, Rarity.MYTHIC, mage.cards.t.Trinisphere.class)); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/FTVLegends.java b/Mage.Sets/src/mage/sets/FTVLegends.java index ae0f3e26620..2e012fc9e12 100644 --- a/Mage.Sets/src/mage/sets/FTVLegends.java +++ b/Mage.Sets/src/mage/sets/FTVLegends.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVLegends extends ExpansionSet { + private static final FTVLegends fINSTANCE = new FTVLegends(); public static FTVLegends getInstance() { @@ -46,7 +44,7 @@ public class FTVLegends extends ExpansionSet { } private FTVLegends() { - super("From the Vault: Legends", "V11", "mage.sets.ftvlegends", new GregorianCalendar(2011, 8, 26).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Legends", "V11", ExpansionSet.buildDate(2011, 8, 26), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Cao Cao, Lord of Wei", 1, Rarity.MYTHIC, mage.cards.c.CaoCaoLordOfWei.class)); cards.add(new SetCardInfo("Captain Sisay", 2, Rarity.MYTHIC, mage.cards.c.CaptainSisay.class)); diff --git a/Mage.Sets/src/mage/sets/FTVLore.java b/Mage.Sets/src/mage/sets/FTVLore.java index 1222eee785d..39ba306b578 100644 --- a/Mage.Sets/src/mage/sets/FTVLore.java +++ b/Mage.Sets/src/mage/sets/FTVLore.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVLore extends ExpansionSet { + private static final FTVLore fINSTANCE = new FTVLore(); public static FTVLore getInstance() { @@ -46,7 +44,7 @@ public class FTVLore extends ExpansionSet { } private FTVLore() { - super("From the Vault: Lore", "V16", "mage.sets.ftvlore", new GregorianCalendar(2016, 8, 19).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Lore", "V16", ExpansionSet.buildDate(2016, 8, 19), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Beseech the Queen", 1, Rarity.MYTHIC, mage.cards.b.BeseechTheQueen.class)); cards.add(new SetCardInfo("Cabal Ritual", 2, Rarity.MYTHIC, mage.cards.c.CabalRitual.class)); diff --git a/Mage.Sets/src/mage/sets/FTVRealms.java b/Mage.Sets/src/mage/sets/FTVRealms.java index 40c7b37198e..f310bd17592 100644 --- a/Mage.Sets/src/mage/sets/FTVRealms.java +++ b/Mage.Sets/src/mage/sets/FTVRealms.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVRealms extends ExpansionSet { + private static final FTVRealms fINSTANCE = new FTVRealms(); public static FTVRealms getInstance() { @@ -46,7 +44,7 @@ public class FTVRealms extends ExpansionSet { } private FTVRealms() { - super("From the Vault: Realms", "V12", "mage.sets.ftvrealms", new GregorianCalendar(2012, 8, 31).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Realms", "V12", ExpansionSet.buildDate(2012, 8, 31), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Ancient Tomb", 1, Rarity.MYTHIC, mage.cards.a.AncientTomb.class)); cards.add(new SetCardInfo("Boseiju, Who Shelters All", 2, Rarity.MYTHIC, mage.cards.b.BoseijuWhoSheltersAll.class)); diff --git a/Mage.Sets/src/mage/sets/FTVRelics.java b/Mage.Sets/src/mage/sets/FTVRelics.java index d53d7cd2cfc..2af0de0d971 100644 --- a/Mage.Sets/src/mage/sets/FTVRelics.java +++ b/Mage.Sets/src/mage/sets/FTVRelics.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVRelics extends ExpansionSet { + private static final FTVRelics fINSTANCE = new FTVRelics(); public static FTVRelics getInstance() { @@ -46,7 +44,7 @@ public class FTVRelics extends ExpansionSet { } private FTVRelics() { - super("From the Vault: Relics", "V10", "mage.sets.ftvrelics", new GregorianCalendar(2010, 8, 27).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Relics", "V10", ExpansionSet.buildDate(2010, 8, 27), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Aether Vial", 1, Rarity.MYTHIC, mage.cards.a.AetherVial.class)); cards.add(new SetCardInfo("Black Vise", 2, Rarity.MYTHIC, mage.cards.b.BlackVise.class)); diff --git a/Mage.Sets/src/mage/sets/FTVTwenty.java b/Mage.Sets/src/mage/sets/FTVTwenty.java index 65516a84ea6..b73355bba58 100644 --- a/Mage.Sets/src/mage/sets/FTVTwenty.java +++ b/Mage.Sets/src/mage/sets/FTVTwenty.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * * @author fireshoes */ public class FTVTwenty extends ExpansionSet { + private static final FTVTwenty fINSTANCE = new FTVTwenty(); public static FTVTwenty getInstance() { @@ -46,7 +44,7 @@ public class FTVTwenty extends ExpansionSet { } private FTVTwenty() { - super("From the Vault: Twenty", "V13", "mage.sets.ftvtwenty", new GregorianCalendar(2013, 8, 23).getTime(), SetType.SUPPLEMENTAL); + super("From the Vault: Twenty", "V13", ExpansionSet.buildDate(2013, 8, 23), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Akroma's Vengeance", 11, Rarity.MYTHIC, mage.cards.a.AkromasVengeance.class)); cards.add(new SetCardInfo("Chainer's Edict", 10, Rarity.MYTHIC, mage.cards.c.ChainersEdict.class)); @@ -69,4 +67,4 @@ public class FTVTwenty extends ExpansionSet { cards.add(new SetCardInfo("Venser, Shaper Savant", 15, Rarity.MYTHIC, mage.cards.v.VenserShaperSavant.class)); cards.add(new SetCardInfo("Wall of Blossoms", 6, Rarity.MYTHIC, mage.cards.w.WallOfBlossoms.class)); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/FallenEmpires.java b/Mage.Sets/src/mage/sets/FallenEmpires.java index 1000abc14e6..4962a458e9f 100644 --- a/Mage.Sets/src/mage/sets/FallenEmpires.java +++ b/Mage.Sets/src/mage/sets/FallenEmpires.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class FallenEmpires extends ExpansionSet { } private FallenEmpires() { - super("Fallen Empires", "FEM", "mage.sets.fallenempires", new GregorianCalendar(1994, 10, 1).getTime(), SetType.EXPANSION); + super("Fallen Empires", "FEM", ExpansionSet.buildDate(1994, 10, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/FateReforged.java b/Mage.Sets/src/mage/sets/FateReforged.java index 0cb22243df2..2ef6c0b1d97 100644 --- a/Mage.Sets/src/mage/sets/FateReforged.java +++ b/Mage.Sets/src/mage/sets/FateReforged.java @@ -28,7 +28,6 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; @@ -37,9 +36,7 @@ import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.SetType; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -57,7 +54,7 @@ public class FateReforged extends ExpansionSet { } private FateReforged() { - super("Fate Reforged", "FRF", "mage.sets.fatereforged", new GregorianCalendar(2015, 1, 23).getTime(), SetType.EXPANSION); + super("Fate Reforged", "FRF", ExpansionSet.buildDate(2015, 1, 23), SetType.EXPANSION); this.blockName = "Khans of Tarkir"; this.parentSet = KhansOfTarkir.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/FifthDawn.java b/Mage.Sets/src/mage/sets/FifthDawn.java index 52764784ea3..e143c113a20 100644 --- a/Mage.Sets/src/mage/sets/FifthDawn.java +++ b/Mage.Sets/src/mage/sets/FifthDawn.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class FifthDawn extends ExpansionSet { } private FifthDawn() { - super("Fifth Dawn", "5DN", "mage.sets.fifthdawn", new GregorianCalendar(2004, 5, 4).getTime(), SetType.EXPANSION); + super("Fifth Dawn", "5DN", ExpansionSet.buildDate(2004, 5, 4), SetType.EXPANSION); this.blockName = "Mirrodin"; this.parentSet = Mirrodin.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/FifthEdition.java b/Mage.Sets/src/mage/sets/FifthEdition.java index 2b45ca04e68..fca03e05f29 100644 --- a/Mage.Sets/src/mage/sets/FifthEdition.java +++ b/Mage.Sets/src/mage/sets/FifthEdition.java @@ -1,13 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class FifthEdition extends ExpansionSet { @@ -18,7 +14,7 @@ public class FifthEdition extends ExpansionSet { } private FifthEdition() { - super("Fifth Edition", "5ED", "mage.sets.fifthedition", new GregorianCalendar(1997, 3, 1).getTime(), SetType.CORE); + super("Fifth Edition", "5ED", ExpansionSet.buildDate(1997, 3, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/FourthEdition.java b/Mage.Sets/src/mage/sets/FourthEdition.java index adcee2af22f..e063e4d291f 100644 --- a/Mage.Sets/src/mage/sets/FourthEdition.java +++ b/Mage.Sets/src/mage/sets/FourthEdition.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class FourthEdition extends ExpansionSet { } private FourthEdition() { - super("Fourth Edition", "4ED", "mage.sets.fourthedition", new GregorianCalendar(1995, 3, 1).getTime(), SetType.CORE); + super("Fourth Edition", "4ED", ExpansionSet.buildDate(1995, 3, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/FridayNightMagic.java b/Mage.Sets/src/mage/sets/FridayNightMagic.java index 239e1bfd7fd..216ec25c354 100644 --- a/Mage.Sets/src/mage/sets/FridayNightMagic.java +++ b/Mage.Sets/src/mage/sets/FridayNightMagic.java @@ -28,7 +28,6 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; @@ -47,7 +46,7 @@ public class FridayNightMagic extends ExpansionSet { } private FridayNightMagic() { - super("Friday Night Magic", "FNMP", "mage.sets.fridaynightmagic", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("Friday Night Magic", "FNMP", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Abzan Beastmaster", 180, Rarity.UNCOMMON, mage.cards.a.AbzanBeastmaster.class)); diff --git a/Mage.Sets/src/mage/sets/FutureSight.java b/Mage.Sets/src/mage/sets/FutureSight.java index 32a83bafe88..5f77746f3ed 100644 --- a/Mage.Sets/src/mage/sets/FutureSight.java +++ b/Mage.Sets/src/mage/sets/FutureSight.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class FutureSight extends ExpansionSet { } private FutureSight() { - super("Future Sight", "FUT", "mage.sets.futuresight", new GregorianCalendar(2007, 4, 4).getTime(), SetType.EXPANSION); + super("Future Sight", "FUT", ExpansionSet.buildDate(2007, 4, 4), SetType.EXPANSION); this.blockName = "Time Spiral"; this.parentSet = TimeSpiral.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/GameDay.java b/Mage.Sets/src/mage/sets/GameDay.java index 9550eafe368..587358823ef 100644 --- a/Mage.Sets/src/mage/sets/GameDay.java +++ b/Mage.Sets/src/mage/sets/GameDay.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class GameDay extends ExpansionSet { } private GameDay() { - super("Game Day", "MGDC", "mage.sets.gameday", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("Game Day", "MGDC", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Anguished Unmaking", 52, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class)); diff --git a/Mage.Sets/src/mage/sets/GarrukVsLiliana.java b/Mage.Sets/src/mage/sets/GarrukVsLiliana.java index 556c3255ff1..46b18b29ab0 100644 --- a/Mage.Sets/src/mage/sets/GarrukVsLiliana.java +++ b/Mage.Sets/src/mage/sets/GarrukVsLiliana.java @@ -6,14 +6,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -28,7 +24,7 @@ public class GarrukVsLiliana extends ExpansionSet { } private GarrukVsLiliana() { - super("Duel Decks: Garruk vs. Liliana", "DDD", "mage.sets.garrukvsliliana", new GregorianCalendar(2009, 10, 30).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Garruk vs. Liliana", "DDD", ExpansionSet.buildDate(2009, 10, 30), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Albino Troll", 3, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); diff --git a/Mage.Sets/src/mage/sets/Gatecrash.java b/Mage.Sets/src/mage/sets/Gatecrash.java index c7f779077b7..ae3f3d0fd80 100644 --- a/Mage.Sets/src/mage/sets/Gatecrash.java +++ b/Mage.Sets/src/mage/sets/Gatecrash.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class Gatecrash extends ExpansionSet { } private Gatecrash() { - super("Gatecrash", "GTC", "mage.sets.gatecrash", new GregorianCalendar(2013, 2, 1).getTime(), SetType.EXPANSION); + super("Gatecrash", "GTC", ExpansionSet.buildDate(2013, 2, 1), SetType.EXPANSION); this.blockName = "Return to Ravnica"; this.parentSet = ReturnToRavnica.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/GrandPrix.java b/Mage.Sets/src/mage/sets/GrandPrix.java index becbb98b416..9dc9cc80367 100644 --- a/Mage.Sets/src/mage/sets/GrandPrix.java +++ b/Mage.Sets/src/mage/sets/GrandPrix.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class GrandPrix extends ExpansionSet { } private GrandPrix() { - super("Grand Prix", "GPX", "mage.sets.grandprix", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("Grand Prix", "GPX", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("All Is Dust", 9, Rarity.MYTHIC, mage.cards.a.AllIsDust.class)); diff --git a/Mage.Sets/src/mage/sets/Guildpact.java b/Mage.Sets/src/mage/sets/Guildpact.java index a0aa689b63a..699d4f4dd92 100644 --- a/Mage.Sets/src/mage/sets/Guildpact.java +++ b/Mage.Sets/src/mage/sets/Guildpact.java @@ -31,9 +31,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; /** * Created by IntelliJ IDEA. User: Loki Date: 20.12.10 Time: 21:01 @@ -46,7 +44,7 @@ public class Guildpact extends ExpansionSet { } private Guildpact() { - super("Guildpact", "GPT", "mage.sets.guildpact", new GregorianCalendar(2006, 1, 3).getTime(), SetType.EXPANSION); + super("Guildpact", "GPT", ExpansionSet.buildDate(2006, 1, 3), SetType.EXPANSION); this.blockName = "Ravnica"; this.parentSet = RavnicaCityOfGuilds.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Guru.java b/Mage.Sets/src/mage/sets/Guru.java index 4ab171b190b..e1a9ac092db 100644 --- a/Mage.Sets/src/mage/sets/Guru.java +++ b/Mage.Sets/src/mage/sets/Guru.java @@ -3,9 +3,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; public class Guru extends ExpansionSet { private static final Guru fINSTANCE = new Guru(); @@ -15,7 +13,7 @@ public class Guru extends ExpansionSet { } private Guru() { - super("Guru", "GUR", "mage.sets.guru", new GregorianCalendar(1990, 1, 2).getTime(), SetType.PROMOTIONAL); + super("Guru", "GUR", ExpansionSet.buildDate(1990, 1, 2), SetType.PROMOTIONAL); cards.add(new SetCardInfo("Forest", 1, Rarity.LAND, mage.cards.basiclands.Forest.class)); cards.add(new SetCardInfo("Island", 2, Rarity.LAND, mage.cards.basiclands.Island.class)); cards.add(new SetCardInfo("Mountain", 3, Rarity.LAND, mage.cards.basiclands.Mountain.class)); diff --git a/Mage.Sets/src/mage/sets/HeroesVsMonsters.java b/Mage.Sets/src/mage/sets/HeroesVsMonsters.java index bb3d92649f0..558f2fb2348 100644 --- a/Mage.Sets/src/mage/sets/HeroesVsMonsters.java +++ b/Mage.Sets/src/mage/sets/HeroesVsMonsters.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class HeroesVsMonsters extends ExpansionSet { } private HeroesVsMonsters() { - super("Duel Decks: Heroes vs. Monsters", "DDL", "mage.sets.heroesvsmonsters", new GregorianCalendar(2013, 9, 6).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Heroes vs. Monsters", "DDL", ExpansionSet.buildDate(2013, 9, 6), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Anax and Cymede", 11, Rarity.RARE, mage.cards.a.AnaxAndCymede.class)); diff --git a/Mage.Sets/src/mage/sets/Homelands.java b/Mage.Sets/src/mage/sets/Homelands.java index 7b799a20b96..3b86629e8c3 100644 --- a/Mage.Sets/src/mage/sets/Homelands.java +++ b/Mage.Sets/src/mage/sets/Homelands.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class Homelands extends ExpansionSet { } private Homelands() { - super("Homelands", "HML", "mage.sets.homelands", new GregorianCalendar(1995, 9, 1).getTime(), SetType.EXPANSION); + super("Homelands", "HML", ExpansionSet.buildDate(1995, 9, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/HourOfDevastation.java b/Mage.Sets/src/mage/sets/HourOfDevastation.java index 11993b9332d..1c801914965 100644 --- a/Mage.Sets/src/mage/sets/HourOfDevastation.java +++ b/Mage.Sets/src/mage/sets/HourOfDevastation.java @@ -24,15 +24,11 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +43,7 @@ public class HourOfDevastation extends ExpansionSet { } private HourOfDevastation() { - super("Hour of Devastation", "HOU", "mage.sets.hourofdevastation", new GregorianCalendar(2017, 7, 14).getTime(), SetType.EXPANSION); + super("Hour of Devastation", "HOU", ExpansionSet.buildDate(2017, 7, 14), SetType.EXPANSION); this.blockName = "Amonkhet"; this.parentSet = Amonkhet.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/IceAge.java b/Mage.Sets/src/mage/sets/IceAge.java index 9996dea222e..6ea8718ef14 100644 --- a/Mage.Sets/src/mage/sets/IceAge.java +++ b/Mage.Sets/src/mage/sets/IceAge.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class IceAge extends ExpansionSet { } private IceAge() { - super("Ice Age", "ICE", "mage.sets.iceage", new GregorianCalendar(1995, 5, 1).getTime(), SetType.EXPANSION); + super("Ice Age", "ICE", ExpansionSet.buildDate(1995, 5, 1), SetType.EXPANSION); this.blockName = "Ice Age"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index 1440c03be94..f687790fe82 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -31,12 +31,8 @@ package mage.sets; import mage.constants.SetType; import mage.cards.ExpansionSet; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @author BetaSteward_at_googlemail.com @@ -50,7 +46,7 @@ public class Innistrad extends ExpansionSet { } private Innistrad() { - super("Innistrad", "ISD", "mage.sets.innistrad", new GregorianCalendar(2011, 9, 30).getTime(), SetType.EXPANSION); + super("Innistrad", "ISD", ExpansionSet.buildDate(2011, 9, 30), SetType.EXPANSION); this.blockName = "Innistrad"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Invasion.java b/Mage.Sets/src/mage/sets/Invasion.java index f943b428a52..6e957b1e81c 100644 --- a/Mage.Sets/src/mage/sets/Invasion.java +++ b/Mage.Sets/src/mage/sets/Invasion.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -48,7 +44,7 @@ public class Invasion extends ExpansionSet { } private Invasion() { - super("Invasion", "INV", "mage.sets.invasion", new GregorianCalendar(2000, 9, 2).getTime(), SetType.EXPANSION); + super("Invasion", "INV", ExpansionSet.buildDate(2000, 9, 2), SetType.EXPANSION); this.blockName = "Invasion"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/IzzetVsGolgari.java b/Mage.Sets/src/mage/sets/IzzetVsGolgari.java index a390de132c4..e2ee63e127e 100644 --- a/Mage.Sets/src/mage/sets/IzzetVsGolgari.java +++ b/Mage.Sets/src/mage/sets/IzzetVsGolgari.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class IzzetVsGolgari extends ExpansionSet { } private IzzetVsGolgari() { - super("Duel Decks: Izzet vs. Golgari", "DDJ", "mage.sets.izzetvsgolgari", new GregorianCalendar(2012, 9, 7).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Izzet vs. Golgari", "DDJ", ExpansionSet.buildDate(2012, 9, 7), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Barren Moor", 78, Rarity.COMMON, mage.cards.b.BarrenMoor.class)); diff --git a/Mage.Sets/src/mage/sets/JaceVsChandra.java b/Mage.Sets/src/mage/sets/JaceVsChandra.java index 1b8a3626148..23184a7a013 100644 --- a/Mage.Sets/src/mage/sets/JaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/JaceVsChandra.java @@ -6,14 +6,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -28,7 +24,7 @@ public class JaceVsChandra extends ExpansionSet { } private JaceVsChandra() { - super("Duel Decks: Jace vs. Chandra", "DD2", "mage.sets.jacevschandra", new GregorianCalendar(2008, 11, 07).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Jace vs. Chandra", "DD2", ExpansionSet.buildDate(2008, 11, 07), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Aethersnipe", 17, Rarity.COMMON, mage.cards.a.Aethersnipe.class)); diff --git a/Mage.Sets/src/mage/sets/JaceVsVraska.java b/Mage.Sets/src/mage/sets/JaceVsVraska.java index e958f05ba75..6e180bdd8e2 100644 --- a/Mage.Sets/src/mage/sets/JaceVsVraska.java +++ b/Mage.Sets/src/mage/sets/JaceVsVraska.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class JaceVsVraska extends ExpansionSet { } private JaceVsVraska() { - super("Duel Decks: Jace vs. Vraska", "DDM", "mage.sets.jacevsvraska", new GregorianCalendar(2014, 3, 14).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Jace vs. Vraska", "DDM", ExpansionSet.buildDate(2014, 3, 14), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Acidic Slime", 64, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class)); diff --git a/Mage.Sets/src/mage/sets/JourneyIntoNyx.java b/Mage.Sets/src/mage/sets/JourneyIntoNyx.java index 02e5e1283bf..45dff5d82df 100644 --- a/Mage.Sets/src/mage/sets/JourneyIntoNyx.java +++ b/Mage.Sets/src/mage/sets/JourneyIntoNyx.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class JourneyIntoNyx extends ExpansionSet { } private JourneyIntoNyx() { - super("Journey into Nyx", "JOU", "mage.sets.journeyintonyx", new GregorianCalendar(2014, 5, 2).getTime(), SetType.EXPANSION); + super("Journey into Nyx", "JOU", ExpansionSet.buildDate(2014, 5, 2), SetType.EXPANSION); this.blockName = "Theros"; this.parentSet = Theros.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/JudgePromo.java b/Mage.Sets/src/mage/sets/JudgePromo.java index 71391bf3c19..cf91a0a67e0 100644 --- a/Mage.Sets/src/mage/sets/JudgePromo.java +++ b/Mage.Sets/src/mage/sets/JudgePromo.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class JudgePromo extends ExpansionSet { } private JudgePromo() { - super("Judge Promo", "JR", "mage.sets.judgepromo", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("Judge Promo", "JR", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Argothian Enchantress", 12, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); cards.add(new SetCardInfo("Armageddon", 14, Rarity.RARE, mage.cards.a.Armageddon.class)); diff --git a/Mage.Sets/src/mage/sets/Judgment.java b/Mage.Sets/src/mage/sets/Judgment.java index 0bde0e4a1ab..25411360599 100644 --- a/Mage.Sets/src/mage/sets/Judgment.java +++ b/Mage.Sets/src/mage/sets/Judgment.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class Judgment extends ExpansionSet { } private Judgment() { - super("Judgment", "JUD", "mage.sets.judgment", new GregorianCalendar(2002, 5, 27).getTime(), SetType.EXPANSION); + super("Judgment", "JUD", ExpansionSet.buildDate(2002, 5, 27), SetType.EXPANSION); this.blockName = "Odyssey"; this.parentSet = Odyssey.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Kaladesh.java b/Mage.Sets/src/mage/sets/Kaladesh.java index c08ca8d3e93..75f24e41be1 100644 --- a/Mage.Sets/src/mage/sets/Kaladesh.java +++ b/Mage.Sets/src/mage/sets/Kaladesh.java @@ -28,7 +28,6 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; @@ -36,9 +35,7 @@ import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import mage.constants.SetType; import mage.constants.Rarity; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -55,7 +52,7 @@ public class Kaladesh extends ExpansionSet { protected final List savedSpecialLand = new ArrayList<>(); private Kaladesh() { - super("Kaladesh", "KLD", "mage.sets.kaladesh", new GregorianCalendar(2016, 9, 30).getTime(), SetType.EXPANSION); + super("Kaladesh", "KLD", ExpansionSet.buildDate(2016, 9, 30), SetType.EXPANSION); this.blockName = "Kaladesh"; this.hasBoosters = true; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/KhansOfTarkir.java b/Mage.Sets/src/mage/sets/KhansOfTarkir.java index e26830955f7..2c79f379ecb 100644 --- a/Mage.Sets/src/mage/sets/KhansOfTarkir.java +++ b/Mage.Sets/src/mage/sets/KhansOfTarkir.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -51,7 +47,7 @@ public class KhansOfTarkir extends ExpansionSet { } private KhansOfTarkir() { - super("Khans of Tarkir", "KTK", "mage.sets.khansoftarkir", new GregorianCalendar(2014, 9, 26).getTime(), SetType.EXPANSION); + super("Khans of Tarkir", "KTK", ExpansionSet.buildDate(2014, 9, 26), SetType.EXPANSION); this.blockName = "Khans of Tarkir"; this.hasBoosters = true; this.hasBasicLands = true; diff --git a/Mage.Sets/src/mage/sets/KnightsVsDragons.java b/Mage.Sets/src/mage/sets/KnightsVsDragons.java index 82cb4277461..1274429a930 100644 --- a/Mage.Sets/src/mage/sets/KnightsVsDragons.java +++ b/Mage.Sets/src/mage/sets/KnightsVsDragons.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class KnightsVsDragons extends ExpansionSet { } private KnightsVsDragons() { - super("Duel Decks: Knights vs. Dragons", "DDG", "mage.sets.knightsvsdragons", new GregorianCalendar(2011, 4, 1).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Knights vs. Dragons", "DDG", ExpansionSet.buildDate(2011, 4, 1), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Alaborn Cavalier", 18, Rarity.UNCOMMON, mage.cards.a.AlabornCavalier.class)); diff --git a/Mage.Sets/src/mage/sets/LaunchParty.java b/Mage.Sets/src/mage/sets/LaunchParty.java index 0aa5a01be15..85d88e36925 100644 --- a/Mage.Sets/src/mage/sets/LaunchParty.java +++ b/Mage.Sets/src/mage/sets/LaunchParty.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class LaunchParty extends ExpansionSet { } private LaunchParty() { - super("Launch Party", "MLP", "mage.sets.launchparty", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("Launch Party", "MLP", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Ajani Vengeant", 4, Rarity.MYTHIC, mage.cards.a.AjaniVengeant.class)); diff --git a/Mage.Sets/src/mage/sets/Legends.java b/Mage.Sets/src/mage/sets/Legends.java index c39d355b725..c1aa846feda 100644 --- a/Mage.Sets/src/mage/sets/Legends.java +++ b/Mage.Sets/src/mage/sets/Legends.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class Legends extends ExpansionSet { } private Legends() { - super("Legends", "LEG", "mage.sets.legends", new GregorianCalendar(1994, 5, 1).getTime(), SetType.EXPANSION); + super("Legends", "LEG", ExpansionSet.buildDate(1994, 5, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 0; @@ -193,7 +190,7 @@ public class Legends extends ExpansionSet { cards.add(new SetCardInfo("Ring of Immortals", 238, Rarity.RARE, mage.cards.r.RingOfImmortals.class)); cards.add(new SetCardInfo("Riven Turnbull", 294, Rarity.UNCOMMON, mage.cards.r.RivenTurnbull.class)); cards.add(new SetCardInfo("Rubinia Soulsinger", 296, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); - cards.add(new SetCardInfo("Sea King's Blessing", 75, Rarity.UNCOMMON, mage.cards.s.SeaKingsBlessing.class)); + cards.add(new SetCardInfo("Sea Kings' Blessing", 75, Rarity.UNCOMMON, mage.cards.s.SeaKingsBlessing.class)); cards.add(new SetCardInfo("Segovian Leviathan", 76, Rarity.UNCOMMON, mage.cards.s.SegovianLeviathan.class)); cards.add(new SetCardInfo("Sentinel", 239, Rarity.RARE, mage.cards.s.Sentinel.class)); cards.add(new SetCardInfo("Serpent Generator", 240, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); diff --git a/Mage.Sets/src/mage/sets/Legions.java b/Mage.Sets/src/mage/sets/Legions.java index 7394b9ee6da..1467807dda9 100644 --- a/Mage.Sets/src/mage/sets/Legions.java +++ b/Mage.Sets/src/mage/sets/Legions.java @@ -27,8 +27,6 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; @@ -46,7 +44,7 @@ public class Legions extends ExpansionSet { } private Legions() { - super("Legions", "LGN", "mage.sets.legions", new GregorianCalendar(2003, 0, 25).getTime(), SetType.EXPANSION); + super("Legions", "LGN", ExpansionSet.buildDate(2003, 0, 25), SetType.EXPANSION); this.blockName = "Onslaught"; this.parentSet = Onslaught.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/LimitedEditionAlpha.java b/Mage.Sets/src/mage/sets/LimitedEditionAlpha.java index 2764434b050..120c29968e1 100644 --- a/Mage.Sets/src/mage/sets/LimitedEditionAlpha.java +++ b/Mage.Sets/src/mage/sets/LimitedEditionAlpha.java @@ -1,14 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -23,7 +18,7 @@ public class LimitedEditionAlpha extends ExpansionSet { } private LimitedEditionAlpha() { - super("Limited Edition Alpha", "LEA", "mage.sets.limitedalpha", new GregorianCalendar(1993, 7, 1).getTime(), SetType.CORE); + super("Limited Edition Alpha", "LEA", ExpansionSet.buildDate(1993, 7, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/LimitedEditionBeta.java b/Mage.Sets/src/mage/sets/LimitedEditionBeta.java index 65901775ec1..f8c65a44d9b 100644 --- a/Mage.Sets/src/mage/sets/LimitedEditionBeta.java +++ b/Mage.Sets/src/mage/sets/LimitedEditionBeta.java @@ -1,14 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -23,7 +18,7 @@ public class LimitedEditionBeta extends ExpansionSet { } private LimitedEditionBeta() { - super("Limited Edition Beta", "LEB", "mage.sets.limitedbeta", new GregorianCalendar(1993, 9, 1).getTime(), SetType.CORE); + super("Limited Edition Beta", "LEB", ExpansionSet.buildDate(1993, 9, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/Lorwyn.java b/Mage.Sets/src/mage/sets/Lorwyn.java index 0a363667ba7..8a1e6d18496 100644 --- a/Mage.Sets/src/mage/sets/Lorwyn.java +++ b/Mage.Sets/src/mage/sets/Lorwyn.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Lorwyn extends ExpansionSet { } private Lorwyn() { - super("Lorwyn", "LRW", "mage.sets.lorwyn", new GregorianCalendar(2007, 9, 12).getTime(), SetType.EXPANSION); + super("Lorwyn", "LRW", ExpansionSet.buildDate(2007, 9, 12), SetType.EXPANSION); this.blockName = "Lorwyn"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/Magic2010.java b/Mage.Sets/src/mage/sets/Magic2010.java index 7fac5e2b7b6..a241098d2bf 100644 --- a/Mage.Sets/src/mage/sets/Magic2010.java +++ b/Mage.Sets/src/mage/sets/Magic2010.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Magic2010 extends ExpansionSet { } private Magic2010() { - super("Magic 2010", "M10", "mage.sets.magic2010", new GregorianCalendar(2009, 6, 17).getTime(), SetType.CORE); + super("Magic 2010", "M10", ExpansionSet.buildDate(2009, 6, 17), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Magic2011.java b/Mage.Sets/src/mage/sets/Magic2011.java index 9d3b43d59b6..d450e384ccf 100644 --- a/Mage.Sets/src/mage/sets/Magic2011.java +++ b/Mage.Sets/src/mage/sets/Magic2011.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Magic2011 extends ExpansionSet { } private Magic2011() { - super("Magic 2011", "M11", "mage.sets.magic2011", new GregorianCalendar(2010, 6, 16).getTime(), SetType.CORE); + super("Magic 2011", "M11", ExpansionSet.buildDate(2010, 6, 16), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Magic2012.java b/Mage.Sets/src/mage/sets/Magic2012.java index 7fc52cc118b..8d13bed68e6 100644 --- a/Mage.Sets/src/mage/sets/Magic2012.java +++ b/Mage.Sets/src/mage/sets/Magic2012.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Magic2012 extends ExpansionSet { } private Magic2012() { - super("Magic 2012", "M12", "mage.sets.magic2012", new GregorianCalendar(2011, 6, 9).getTime(), SetType.CORE); + super("Magic 2012", "M12", ExpansionSet.buildDate(2011, 6, 9), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Magic2013.java b/Mage.Sets/src/mage/sets/Magic2013.java index c05075e92a6..d793eacb7e2 100644 --- a/Mage.Sets/src/mage/sets/Magic2013.java +++ b/Mage.Sets/src/mage/sets/Magic2013.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Magic2013 extends ExpansionSet { } private Magic2013() { - super("Magic 2013", "M13", "mage.sets.magic2013", new GregorianCalendar(2012, 6, 7).getTime(), SetType.CORE); + super("Magic 2013", "M13", ExpansionSet.buildDate(2012, 6, 7), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Magic2014.java b/Mage.Sets/src/mage/sets/Magic2014.java index 9c716f83013..55a1b7af6de 100644 --- a/Mage.Sets/src/mage/sets/Magic2014.java +++ b/Mage.Sets/src/mage/sets/Magic2014.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Magic2014 extends ExpansionSet { } private Magic2014() { - super("Magic 2014", "M14", "mage.sets.magic2014", new GregorianCalendar(2013, 7, 19).getTime(), SetType.CORE); + super("Magic 2014", "M14", ExpansionSet.buildDate(2013, 7, 19), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Magic2015.java b/Mage.Sets/src/mage/sets/Magic2015.java index 7c8fe78edb7..e1774e7cc7a 100644 --- a/Mage.Sets/src/mage/sets/Magic2015.java +++ b/Mage.Sets/src/mage/sets/Magic2015.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Magic2015 extends ExpansionSet { } private Magic2015() { - super("Magic 2015", "M15", "mage.sets.magic2015", new GregorianCalendar(2014, 7, 18).getTime(), SetType.CORE); + super("Magic 2015", "M15", ExpansionSet.buildDate(2014, 7, 18), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/MagicOrigins.java b/Mage.Sets/src/mage/sets/MagicOrigins.java index 19ea6805e7a..0fa55a43ffb 100644 --- a/Mage.Sets/src/mage/sets/MagicOrigins.java +++ b/Mage.Sets/src/mage/sets/MagicOrigins.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class MagicOrigins extends ExpansionSet { } private MagicOrigins() { - super("Magic Origins", "ORI", "mage.sets.magicorigins", new GregorianCalendar(2015, 7, 17).getTime(), SetType.CORE); + super("Magic Origins", "ORI", ExpansionSet.buildDate(2015, 7, 17), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/MagicPlayerRewards.java b/Mage.Sets/src/mage/sets/MagicPlayerRewards.java index 265e3e2b674..d7e730072e0 100644 --- a/Mage.Sets/src/mage/sets/MagicPlayerRewards.java +++ b/Mage.Sets/src/mage/sets/MagicPlayerRewards.java @@ -29,9 +29,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; public class MagicPlayerRewards extends ExpansionSet { private static final MagicPlayerRewards fINSTANCE = new MagicPlayerRewards(); @@ -41,7 +39,7 @@ public class MagicPlayerRewards extends ExpansionSet { } private MagicPlayerRewards() { - super("Magic Player Rewards", "MPRP", "mage.sets.magicplayerrewards", new GregorianCalendar(1990, 1, 1).getTime(), SetType.PROMOTIONAL); + super("Magic Player Rewards", "MPRP", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Bituminous Blast", 46, Rarity.SPECIAL, mage.cards.b.BituminousBlast.class)); diff --git a/Mage.Sets/src/mage/sets/MasterpieceSeries.java b/Mage.Sets/src/mage/sets/MasterpieceSeries.java index 06409497224..ef002104b38 100644 --- a/Mage.Sets/src/mage/sets/MasterpieceSeries.java +++ b/Mage.Sets/src/mage/sets/MasterpieceSeries.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; import mage.cards.FrameStyle; @@ -49,7 +46,7 @@ public class MasterpieceSeries extends ExpansionSet { } private MasterpieceSeries() { - super("Masterpiece Series", "MPS", "mage.sets.masterpieceseries", new GregorianCalendar(2016, 9, 30).getTime(), SetType.PROMOTIONAL); + super("Masterpiece Series", "MPS", ExpansionSet.buildDate(2016, 9, 30), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Aether Vial", 6, Rarity.MYTHIC, mage.cards.a.AetherVial.class, new CardGraphicInfo(FrameStyle.KLD_INVENTION, false))); diff --git a/Mage.Sets/src/mage/sets/MastersEdition.java b/Mage.Sets/src/mage/sets/MastersEdition.java index a2eba02dfa4..83ab9e60631 100644 --- a/Mage.Sets/src/mage/sets/MastersEdition.java +++ b/Mage.Sets/src/mage/sets/MastersEdition.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class MastersEdition extends ExpansionSet { } private MastersEdition() { - super("Masters Edition", "MED", "mage.sets.mastersedition", new GregorianCalendar(2007, 9, 10).getTime(), SetType.MAGIC_ONLINE); + super("Masters Edition", "MED", ExpansionSet.buildDate(2007, 9, 10), SetType.MAGIC_ONLINE); this.hasBasicLands = true; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/MastersEditionII.java b/Mage.Sets/src/mage/sets/MastersEditionII.java index 66bfe8d85d0..45e88084fef 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionII.java +++ b/Mage.Sets/src/mage/sets/MastersEditionII.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class MastersEditionII extends ExpansionSet { } private MastersEditionII() { - super("Masters Edition II", "ME2", "mage.sets.masterseditionii", new GregorianCalendar(2008, 9, 22).getTime(), SetType.MAGIC_ONLINE); + super("Masters Edition II", "ME2", ExpansionSet.buildDate(2008, 9, 22), SetType.MAGIC_ONLINE); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/MastersEditionIII.java b/Mage.Sets/src/mage/sets/MastersEditionIII.java index d38bdbd7bab..ed969ff4c8a 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionIII.java +++ b/Mage.Sets/src/mage/sets/MastersEditionIII.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class MastersEditionIII extends ExpansionSet { } private MastersEditionIII() { - super("Masters Edition III", "ME3", "mage.sets.masterseditioniii", new GregorianCalendar(2009, 9, 7).getTime(), SetType.MAGIC_ONLINE); + super("Masters Edition III", "ME3", ExpansionSet.buildDate(2009, 9, 7), SetType.MAGIC_ONLINE); this.hasBasicLands = true; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/MastersEditionIV.java b/Mage.Sets/src/mage/sets/MastersEditionIV.java index 742dae7e70b..817ef8163b0 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionIV.java +++ b/Mage.Sets/src/mage/sets/MastersEditionIV.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class MastersEditionIV extends ExpansionSet { } private MastersEditionIV() { - super("Masters Edition IV", "ME4", "mage.sets.masterseditioniv", new GregorianCalendar(2011, 1, 10).getTime(), SetType.MAGIC_ONLINE); + super("Masters Edition IV", "ME4", ExpansionSet.buildDate(2011, 1, 10), SetType.MAGIC_ONLINE); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/MediaInserts.java b/Mage.Sets/src/mage/sets/MediaInserts.java index ed5f044b356..179a5ad16a5 100644 --- a/Mage.Sets/src/mage/sets/MediaInserts.java +++ b/Mage.Sets/src/mage/sets/MediaInserts.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class MediaInserts extends ExpansionSet { private static final MediaInserts fINSTANCE = new MediaInserts(); @@ -44,7 +40,7 @@ public class MediaInserts extends ExpansionSet { } private MediaInserts() { - super("Media Inserts", "MBP", "mage.sets.mediainserts", new GregorianCalendar(1990, 1, 1).getTime(), SetType.PROMOTIONAL); + super("Media Inserts", "MBP", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Acquire", 83, Rarity.RARE, mage.cards.a.Acquire.class)); diff --git a/Mage.Sets/src/mage/sets/MercadianMasques.java b/Mage.Sets/src/mage/sets/MercadianMasques.java index 3379f77fb4d..3fec73831c9 100644 --- a/Mage.Sets/src/mage/sets/MercadianMasques.java +++ b/Mage.Sets/src/mage/sets/MercadianMasques.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class MercadianMasques extends ExpansionSet { } private MercadianMasques() { - super("Mercadian Masques", "MMQ", "mage.sets.mercadianmasques", new GregorianCalendar(1999, 8, 25).getTime(), SetType.EXPANSION); + super("Mercadian Masques", "MMQ", ExpansionSet.buildDate(1999, 8, 25), SetType.EXPANSION); this.blockName = "Masques"; this.hasBoosters = true; this.numBoosterLands = 0; @@ -312,6 +307,7 @@ public class MercadianMasques extends ExpansionSet { cards.add(new SetCardInfo("Vine Dryad", 284, Rarity.RARE, mage.cards.v.VineDryad.class)); cards.add(new SetCardInfo("Vine Trellis", 285, Rarity.COMMON, mage.cards.v.VineTrellis.class)); cards.add(new SetCardInfo("War Cadence", 224, Rarity.UNCOMMON, mage.cards.w.WarCadence.class)); + cards.add(new SetCardInfo("War Tax", 113, Rarity.UNCOMMON, mage.cards.w.WarTax.class)); cards.add(new SetCardInfo("Warmonger", 225, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); cards.add(new SetCardInfo("Waterfront Bouncer", 114, Rarity.COMMON, mage.cards.w.WaterfrontBouncer.class)); cards.add(new SetCardInfo("Wild Jhovall", 227, Rarity.COMMON, mage.cards.w.WildJhovall.class)); diff --git a/Mage.Sets/src/mage/sets/MindVsMight.java b/Mage.Sets/src/mage/sets/MindVsMight.java index b1c3b675505..a1735954462 100644 --- a/Mage.Sets/src/mage/sets/MindVsMight.java +++ b/Mage.Sets/src/mage/sets/MindVsMight.java @@ -6,11 +6,8 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -25,7 +22,7 @@ public class MindVsMight extends ExpansionSet { } private MindVsMight() { - super("Duel Decks: Mind vs. Might", "DDS", "mage.sets.mindvsmight", new GregorianCalendar(2017, 3, 31).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Mind vs. Might", "DDS", ExpansionSet.buildDate(2017, 3, 31), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; } diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 4c97d43b7b9..e4a99c2aa66 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +44,7 @@ public class Mirage extends ExpansionSet { } private Mirage() { - super("Mirage", "MIR", "mage.sets.mirage", new GregorianCalendar(1996, 8, 21).getTime(), SetType.EXPANSION); + super("Mirage", "MIR", ExpansionSet.buildDate(1996, 8, 21), SetType.EXPANSION); this.blockName = "Mirage"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/Mirrodin.java b/Mage.Sets/src/mage/sets/Mirrodin.java index c1b7fa399b6..5597b39d0f3 100644 --- a/Mage.Sets/src/mage/sets/Mirrodin.java +++ b/Mage.Sets/src/mage/sets/Mirrodin.java @@ -3,12 +3,8 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class Mirrodin extends ExpansionSet { private static final Mirrodin fINSTANCE = new Mirrodin(); @@ -18,7 +14,7 @@ public class Mirrodin extends ExpansionSet { } private Mirrodin() { - super("Mirrodin", "MRD", "mage.sets.mirrodin", new GregorianCalendar(2003, 9, 2).getTime(), SetType.EXPANSION); + super("Mirrodin", "MRD", ExpansionSet.buildDate(2003, 9, 2), SetType.EXPANSION); this.blockName = "Mirrodin"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/MirrodinBesieged.java b/Mage.Sets/src/mage/sets/MirrodinBesieged.java index 0fe41f5f078..d09690def74 100644 --- a/Mage.Sets/src/mage/sets/MirrodinBesieged.java +++ b/Mage.Sets/src/mage/sets/MirrodinBesieged.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class MirrodinBesieged extends ExpansionSet { } private MirrodinBesieged() { - super("Mirrodin Besieged", "MBS", "mage.sets.mirrodinbesieged", new GregorianCalendar(2011, 1, 4).getTime(), SetType.EXPANSION); + super("Mirrodin Besieged", "MBS", ExpansionSet.buildDate(2011, 1, 4), SetType.EXPANSION); this.blockName = "Scars of Mirrodin"; this.parentSet = ScarsOfMirrodin.getInstance(); this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/ModernMasters.java b/Mage.Sets/src/mage/sets/ModernMasters.java index b37850d097d..f4656440cec 100644 --- a/Mage.Sets/src/mage/sets/ModernMasters.java +++ b/Mage.Sets/src/mage/sets/ModernMasters.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class ModernMasters extends ExpansionSet { } private ModernMasters() { - super("Modern Masters", "MMA", "mage.sets.modernmasters", new GregorianCalendar(2013, 6, 7).getTime(), SetType.SUPPLEMENTAL); + super("Modern Masters", "MMA", ExpansionSet.buildDate(2013, 6, 7), SetType.SUPPLEMENTAL); this.blockName = "Reprint"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/ModernMasters2015.java b/Mage.Sets/src/mage/sets/ModernMasters2015.java index d61d89f19d1..632816327bf 100644 --- a/Mage.Sets/src/mage/sets/ModernMasters2015.java +++ b/Mage.Sets/src/mage/sets/ModernMasters2015.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class ModernMasters2015 extends ExpansionSet { } private ModernMasters2015() { - super("Modern Masters 2015", "MM2", "mage.sets.modernmasters2015", new GregorianCalendar(2015, 5, 22).getTime(), SetType.SUPPLEMENTAL); + super("Modern Masters 2015", "MM2", ExpansionSet.buildDate(2015, 5, 22), SetType.SUPPLEMENTAL); this.blockName = "Reprint"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/ModernMasters2017.java b/Mage.Sets/src/mage/sets/ModernMasters2017.java index c6dca86b843..9b7ecc23de9 100644 --- a/Mage.Sets/src/mage/sets/ModernMasters2017.java +++ b/Mage.Sets/src/mage/sets/ModernMasters2017.java @@ -28,11 +28,8 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class ModernMasters2017 extends ExpansionSet { } private ModernMasters2017() { - super("Modern Masters 2017", "MM3", "mage.sets.modernmasters2017", new GregorianCalendar(2017, 3, 17).getTime(), SetType.SUPPLEMENTAL); + super("Modern Masters 2017", "MM3", ExpansionSet.buildDate(2017, 3, 17), SetType.SUPPLEMENTAL); this.blockName = "Reprint"; this.hasBasicLands = false; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/Morningtide.java b/Mage.Sets/src/mage/sets/Morningtide.java index 092cd1d7865..e83235a820a 100644 --- a/Mage.Sets/src/mage/sets/Morningtide.java +++ b/Mage.Sets/src/mage/sets/Morningtide.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class Morningtide extends ExpansionSet { } private Morningtide() { - super("Morningtide", "MOR", "mage.sets.morningtide", new GregorianCalendar(2008, 1, 1).getTime(), SetType.EXPANSION); + super("Morningtide", "MOR", ExpansionSet.buildDate(2008, 1, 1), SetType.EXPANSION); this.blockName = "Lorwyn"; this.parentSet = Morningtide.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Nemesis.java b/Mage.Sets/src/mage/sets/Nemesis.java index c035b2889de..c694e00ca83 100644 --- a/Mage.Sets/src/mage/sets/Nemesis.java +++ b/Mage.Sets/src/mage/sets/Nemesis.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -46,7 +44,7 @@ public class Nemesis extends ExpansionSet { } private Nemesis() { - super("Nemesis", "NEM", "mage.sets.nemesis", new GregorianCalendar(2000, 1, 5).getTime(), SetType.EXPANSION); + super("Nemesis", "NEM", ExpansionSet.buildDate(2000, 1, 5), SetType.EXPANSION); this.blockName = "Masques"; this.parentSet = MercadianMasques.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/NewPhyrexia.java b/Mage.Sets/src/mage/sets/NewPhyrexia.java index 53392b26b1b..adf5a1b6439 100644 --- a/Mage.Sets/src/mage/sets/NewPhyrexia.java +++ b/Mage.Sets/src/mage/sets/NewPhyrexia.java @@ -1,14 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class NewPhyrexia extends ExpansionSet { private static final NewPhyrexia fINSTANCE = new NewPhyrexia(); @@ -18,7 +13,7 @@ public class NewPhyrexia extends ExpansionSet { } private NewPhyrexia() { - super("New Phyrexia", "NPH", "mage.sets.newphyrexia", new GregorianCalendar(2011, 4, 4).getTime(), SetType.EXPANSION); + super("New Phyrexia", "NPH", ExpansionSet.buildDate(2011, 4, 4), SetType.EXPANSION); this.blockName = "Scars of Mirrodin"; this.parentSet = ScarsOfMirrodin.getInstance(); this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/NinthEdition.java b/Mage.Sets/src/mage/sets/NinthEdition.java index 9ee3850a83a..5cdacf31e28 100644 --- a/Mage.Sets/src/mage/sets/NinthEdition.java +++ b/Mage.Sets/src/mage/sets/NinthEdition.java @@ -1,13 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class NinthEdition extends ExpansionSet { @@ -18,7 +14,7 @@ public class NinthEdition extends ExpansionSet { } private NinthEdition() { - super("Ninth Edition", "9ED", "mage.sets.ninthedition", new GregorianCalendar(2005, 7, 29).getTime(), SetType.CORE); + super("Ninth Edition", "9ED", ExpansionSet.buildDate(2005, 7, 29), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/NissaVsObNixilis.java b/Mage.Sets/src/mage/sets/NissaVsObNixilis.java index b3ef2053445..a581c99d268 100644 --- a/Mage.Sets/src/mage/sets/NissaVsObNixilis.java +++ b/Mage.Sets/src/mage/sets/NissaVsObNixilis.java @@ -27,20 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class NissaVsObNixilis extends ExpansionSet { + private static final NissaVsObNixilis fINSTANCE = new NissaVsObNixilis(); public static NissaVsObNixilis getInstance() { @@ -48,9 +45,10 @@ public class NissaVsObNixilis extends ExpansionSet { } private NissaVsObNixilis() { - super("Duel Decks: Nissa vs. Ob Nixilis", "DDR", "mage.sets.nissavsobnixilis", new GregorianCalendar(2016, 9, 2).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Nissa vs. Ob Nixilis", "DDR", ExpansionSet.buildDate(2016, 9, 2), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; + cards.add(new SetCardInfo("Abundance", 2, Rarity.RARE, mage.cards.a.Abundance.class)); cards.add(new SetCardInfo("Altar's Reap", 37, Rarity.COMMON, mage.cards.a.AltarsReap.class)); cards.add(new SetCardInfo("Ambition's Cost", 38, Rarity.UNCOMMON, mage.cards.a.AmbitionsCost.class)); diff --git a/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java b/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java index 1a619bbd299..10cbefa2890 100644 --- a/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java +++ b/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java @@ -6,7 +6,6 @@ package mage.sets; import java.util.ArrayList; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; @@ -14,9 +13,7 @@ import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; import mage.constants.SetType; import mage.constants.Rarity; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -33,7 +30,7 @@ public class OathOfTheGatewatch extends ExpansionSet { protected final List savedSpecialLand = new ArrayList<>(); private OathOfTheGatewatch() { - super("Oath of the Gatewatch", "OGW", "mage.sets.oathofthegatewatch", new GregorianCalendar(2016, 1, 22).getTime(), SetType.EXPANSION); + super("Oath of the Gatewatch", "OGW", ExpansionSet.buildDate(2016, 1, 22), SetType.EXPANSION); this.blockName = "Battle for Zendikar"; this.parentSet = BattleForZendikar.getInstance(); this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/Odyssey.java b/Mage.Sets/src/mage/sets/Odyssey.java index 965a4dc035a..858e6ab9ac2 100644 --- a/Mage.Sets/src/mage/sets/Odyssey.java +++ b/Mage.Sets/src/mage/sets/Odyssey.java @@ -27,7 +27,6 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.CardGraphicInfo; import mage.cards.ExpansionSet; import mage.constants.Rarity; @@ -45,7 +44,7 @@ public class Odyssey extends ExpansionSet { } private Odyssey() { - super("Odyssey", "ODY", "mage.sets.odyssey", new GregorianCalendar(2001, 9, 22).getTime(), SetType.EXPANSION); + super("Odyssey", "ODY", ExpansionSet.buildDate(2001, 9, 22), SetType.EXPANSION); this.blockName = "Odyssey"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/Onslaught.java b/Mage.Sets/src/mage/sets/Onslaught.java index e8929530085..dafe14b3c1f 100644 --- a/Mage.Sets/src/mage/sets/Onslaught.java +++ b/Mage.Sets/src/mage/sets/Onslaught.java @@ -3,12 +3,9 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class Onslaught extends ExpansionSet { private static final Onslaught fINSTANCE = new Onslaught(); @@ -18,7 +15,7 @@ public class Onslaught extends ExpansionSet { } private Onslaught() { - super("Onslaught", "ONS", "mage.sets.onslaught", new GregorianCalendar(2002, 10, 7).getTime(), SetType.EXPANSION); + super("Onslaught", "ONS", ExpansionSet.buildDate(2002, 10, 7), SetType.EXPANSION); this.blockName = "Onslaught"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/PDSFireAndLightning.java b/Mage.Sets/src/mage/sets/PDSFireAndLightning.java index 04a9db4de5d..62fe4472270 100644 --- a/Mage.Sets/src/mage/sets/PDSFireAndLightning.java +++ b/Mage.Sets/src/mage/sets/PDSFireAndLightning.java @@ -24,24 +24,20 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author fireshoes */ public class PDSFireAndLightning extends ExpansionSet { + private static final PDSFireAndLightning fINSTANCE = new PDSFireAndLightning(); public static PDSFireAndLightning getInstance() { @@ -49,7 +45,7 @@ public class PDSFireAndLightning extends ExpansionSet { } private PDSFireAndLightning() { - super("Premium Deck Series: Fire and Lightning", "PD2", "mage.sets.pdsfireandlightning", new GregorianCalendar(2010, 11, 1).getTime(), + super("Premium Deck Series: Fire and Lightning", "PD2", ExpansionSet.buildDate(2010, 11, 1), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Ball Lightning", 12, Rarity.RARE, mage.cards.b.BallLightning.class)); @@ -87,4 +83,4 @@ public class PDSFireAndLightning extends ExpansionSet { cards.add(new SetCardInfo("Thunderbolt", 19, Rarity.COMMON, mage.cards.t.Thunderbolt.class)); cards.add(new SetCardInfo("Vulshok Sorcerer", 11, Rarity.COMMON, mage.cards.v.VulshokSorcerer.class)); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/PDSGraveborn.java b/Mage.Sets/src/mage/sets/PDSGraveborn.java index 19ea2dd13e9..8e54ee713ed 100644 --- a/Mage.Sets/src/mage/sets/PDSGraveborn.java +++ b/Mage.Sets/src/mage/sets/PDSGraveborn.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class PDSGraveborn extends ExpansionSet { } private PDSGraveborn() { - super("Premium Deck Series: Graveborn", "PD3", "mage.sets.pdsgraveborn", new GregorianCalendar(2011, 11, 1).getTime(), SetType.SUPPLEMENTAL); + super("Premium Deck Series: Graveborn", "PD3", ExpansionSet.buildDate(2011, 11, 1), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Animate Dead", 16, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); cards.add(new SetCardInfo("Avatar of Woe", 6, Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); diff --git a/Mage.Sets/src/mage/sets/PDSSlivers.java b/Mage.Sets/src/mage/sets/PDSSlivers.java index 1fff8dd5ffa..1b08d364b83 100644 --- a/Mage.Sets/src/mage/sets/PDSSlivers.java +++ b/Mage.Sets/src/mage/sets/PDSSlivers.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class PDSSlivers extends ExpansionSet { } private PDSSlivers() { - super("Premium Deck Series: Slivers", "H09", "mage.sets.pdsslivers", new GregorianCalendar(2009, 11, 1).getTime(), SetType.SUPPLEMENTAL); + super("Premium Deck Series: Slivers", "H09", ExpansionSet.buildDate(2009, 11, 1), SetType.SUPPLEMENTAL); this.hasBasicLands = false; cards.add(new SetCardInfo("Acidic Sliver", 13, Rarity.UNCOMMON, mage.cards.a.AcidicSliver.class)); cards.add(new SetCardInfo("Amoeboid Changeling", 3, Rarity.COMMON, mage.cards.a.AmoeboidChangeling.class)); diff --git a/Mage.Sets/src/mage/sets/PhyrexiaVsTheCoalition.java b/Mage.Sets/src/mage/sets/PhyrexiaVsTheCoalition.java index 362681a2b63..a3f83a8453d 100644 --- a/Mage.Sets/src/mage/sets/PhyrexiaVsTheCoalition.java +++ b/Mage.Sets/src/mage/sets/PhyrexiaVsTheCoalition.java @@ -27,21 +27,17 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.cards.ExpansionSet; -import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; /** * * @author LevelX2 */ - public class PhyrexiaVsTheCoalition extends ExpansionSet { + private static final PhyrexiaVsTheCoalition fINSTANCE = new PhyrexiaVsTheCoalition(); public static PhyrexiaVsTheCoalition getInstance() { @@ -49,7 +45,7 @@ public class PhyrexiaVsTheCoalition extends ExpansionSet { } private PhyrexiaVsTheCoalition() { - super("Duel Decks: Phyrexia vs. the Coalition", "DDE", "mage.sets.phyrexiavsthecoalition", new GregorianCalendar(2010, 3, 19).getTime(), + super("Duel Decks: Phyrexia vs. the Coalition", "DDE", ExpansionSet.buildDate(2010, 3, 19), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/PlanarChaos.java b/Mage.Sets/src/mage/sets/PlanarChaos.java index 2940e6bcb0f..1e4b0626a5b 100644 --- a/Mage.Sets/src/mage/sets/PlanarChaos.java +++ b/Mage.Sets/src/mage/sets/PlanarChaos.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class PlanarChaos extends ExpansionSet { } private PlanarChaos() { - super("Planar Chaos", "PLC", "mage.sets.planarchaos", new GregorianCalendar(2007, 1, 2).getTime(), SetType.EXPANSION); + super("Planar Chaos", "PLC", ExpansionSet.buildDate(2007, 1, 2), SetType.EXPANSION); this.blockName = "Time Spiral"; this.parentSet = TimeSpiral.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Planechase.java b/Mage.Sets/src/mage/sets/Planechase.java index 5638ccf1812..4073fda9eee 100644 --- a/Mage.Sets/src/mage/sets/Planechase.java +++ b/Mage.Sets/src/mage/sets/Planechase.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Planechase extends ExpansionSet { } private Planechase() { - super("Planechase", "HOP", "mage.sets.planechase", new GregorianCalendar(2009, 8, 4).getTime(), SetType.SUPPLEMENTAL); + super("Planechase", "HOP", ExpansionSet.buildDate(2009, 8, 4), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Akroma's Vengeance", 1, Rarity.RARE, mage.cards.a.AkromasVengeance.class)); cards.add(new SetCardInfo("Ancient Den", 130, Rarity.COMMON, mage.cards.a.AncientDen.class)); diff --git a/Mage.Sets/src/mage/sets/Planechase2012.java b/Mage.Sets/src/mage/sets/Planechase2012.java index da12b6a0ba3..c53594dab92 100644 --- a/Mage.Sets/src/mage/sets/Planechase2012.java +++ b/Mage.Sets/src/mage/sets/Planechase2012.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Planechase2012 extends ExpansionSet { } private Planechase2012() { - super("Planechase 2012 Edition", "PC2", "mage.sets.planechase2012", new GregorianCalendar(2012, 6, 1).getTime(), SetType.SUPPLEMENTAL); + super("Planechase 2012 Edition", "PC2", ExpansionSet.buildDate(2012, 6, 1), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; cards.add(new SetCardInfo("Arc Trail", 39, Rarity.UNCOMMON, mage.cards.a.ArcTrail.class)); cards.add(new SetCardInfo("Armillary Sphere", 108, Rarity.COMMON, mage.cards.a.ArmillarySphere.class)); diff --git a/Mage.Sets/src/mage/sets/PlanechaseAnthology.java b/Mage.Sets/src/mage/sets/PlanechaseAnthology.java index 589fc9a622e..f5b7f67cf75 100644 --- a/Mage.Sets/src/mage/sets/PlanechaseAnthology.java +++ b/Mage.Sets/src/mage/sets/PlanechaseAnthology.java @@ -24,15 +24,11 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; -import mage.constants.Rarity; -import java.util.List; /** * @@ -47,8 +43,8 @@ public class PlanechaseAnthology extends ExpansionSet { } private PlanechaseAnthology() { - super("Planechase Anthology", "PCA", "mage.sets.planechaseanthology", new GregorianCalendar(2016, 11, 25).getTime(), SetType.SUPPLEMENTAL); + super("Planechase Anthology", "PCA", ExpansionSet.buildDate(2016, 11, 25), SetType.SUPPLEMENTAL); this.blockName = "Command Zone"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/Planeshift.java b/Mage.Sets/src/mage/sets/Planeshift.java index 8cd7167cc1a..a29b870f704 100644 --- a/Mage.Sets/src/mage/sets/Planeshift.java +++ b/Mage.Sets/src/mage/sets/Planeshift.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Planeshift extends ExpansionSet { } private Planeshift() { - super("Planeshift", "PLS", "mage.sets.planeshift", new GregorianCalendar(2001, 1, 5).getTime(), SetType.EXPANSION); + super("Planeshift", "PLS", ExpansionSet.buildDate(2001, 1, 5), SetType.EXPANSION); this.blockName = "Invasion"; this.parentSet = Invasion.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Portal.java b/Mage.Sets/src/mage/sets/Portal.java index 5f96b61c7a8..1d7eae6edfc 100644 --- a/Mage.Sets/src/mage/sets/Portal.java +++ b/Mage.Sets/src/mage/sets/Portal.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -55,7 +51,7 @@ public class Portal extends ExpansionSet { } private Portal() { - super("Portal", "POR", "mage.sets.portal", new GregorianCalendar(1997, 5, 1).getTime(), SetType.SUPPLEMENTAL); + super("Portal", "POR", ExpansionSet.buildDate(1997, 5, 1), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/PortalSecondAge.java b/Mage.Sets/src/mage/sets/PortalSecondAge.java index 3d66c4c00ec..034f6e54d63 100644 --- a/Mage.Sets/src/mage/sets/PortalSecondAge.java +++ b/Mage.Sets/src/mage/sets/PortalSecondAge.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -55,7 +51,7 @@ public class PortalSecondAge extends ExpansionSet { } private PortalSecondAge() { - super("Portal Second Age", "PO2", "mage.sets.portalsecondage", new GregorianCalendar(1998, 6, 24).getTime(), SetType.SUPPLEMENTAL); + super("Portal Second Age", "PO2", ExpansionSet.buildDate(1998, 6, 24), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/PortalThreeKingdoms.java b/Mage.Sets/src/mage/sets/PortalThreeKingdoms.java index 131b484f33e..20faf9156aa 100644 --- a/Mage.Sets/src/mage/sets/PortalThreeKingdoms.java +++ b/Mage.Sets/src/mage/sets/PortalThreeKingdoms.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class PortalThreeKingdoms extends ExpansionSet { } private PortalThreeKingdoms() { - super("Portal Three Kingdoms", "PTK", "mage.sets.portalthreekingdoms", new GregorianCalendar(1999, 5, 1).getTime(), SetType.SUPPLEMENTAL); + super("Portal Three Kingdoms", "PTK", ExpansionSet.buildDate(1999, 5, 1), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/PrereleaseEvents.java b/Mage.Sets/src/mage/sets/PrereleaseEvents.java index 608d8078b3d..c862031764b 100644 --- a/Mage.Sets/src/mage/sets/PrereleaseEvents.java +++ b/Mage.Sets/src/mage/sets/PrereleaseEvents.java @@ -3,12 +3,8 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class PrereleaseEvents extends ExpansionSet { private static final PrereleaseEvents fINSTANCE = new PrereleaseEvents(); @@ -18,7 +14,7 @@ public class PrereleaseEvents extends ExpansionSet { } private PrereleaseEvents() { - super("Prerelease Events", "PTC", "mage.sets.prereleaseevents", new GregorianCalendar(1990, 1, 1).getTime(), SetType.PROMOTIONAL); + super("Prerelease Events", "PTC", ExpansionSet.buildDate(1990, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Abbot of Keral Keep", 198, Rarity.RARE, mage.cards.a.AbbotOfKeralKeep.class)); diff --git a/Mage.Sets/src/mage/sets/Prophecy.java b/Mage.Sets/src/mage/sets/Prophecy.java index d0d0eaf2bd9..e4a7e8f3bcf 100644 --- a/Mage.Sets/src/mage/sets/Prophecy.java +++ b/Mage.Sets/src/mage/sets/Prophecy.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class Prophecy extends ExpansionSet { } private Prophecy() { - super("Prophecy", "PCY", "mage.sets.prophecy", new GregorianCalendar(2000, 4, 27).getTime(), SetType.EXPANSION); + super("Prophecy", "PCY", ExpansionSet.buildDate(2000, 4, 27), SetType.EXPANSION); this.blockName = "Masques"; this.parentSet = MercadianMasques.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/RavnicaCityOfGuilds.java b/Mage.Sets/src/mage/sets/RavnicaCityOfGuilds.java index d3eb39a1339..f8cd6edbd8a 100644 --- a/Mage.Sets/src/mage/sets/RavnicaCityOfGuilds.java +++ b/Mage.Sets/src/mage/sets/RavnicaCityOfGuilds.java @@ -31,12 +31,8 @@ package mage.sets; import mage.constants.SetType; import mage.cards.ExpansionSet; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class RavnicaCityOfGuilds extends ExpansionSet { } private RavnicaCityOfGuilds() { - super("Ravnica: City of Guilds", "RAV", "mage.sets.ravnica", new GregorianCalendar(2005, 9, 24).getTime(), SetType.EXPANSION); + super("Ravnica: City of Guilds", "RAV", ExpansionSet.buildDate(2005, 9, 24), SetType.EXPANSION); this.blockName = "Ravnica"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/ReturnToRavnica.java b/Mage.Sets/src/mage/sets/ReturnToRavnica.java index 3e706502658..8fe66493822 100644 --- a/Mage.Sets/src/mage/sets/ReturnToRavnica.java +++ b/Mage.Sets/src/mage/sets/ReturnToRavnica.java @@ -30,12 +30,8 @@ package mage.sets; import mage.constants.SetType; import mage.cards.ExpansionSet; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class ReturnToRavnica extends ExpansionSet { } private ReturnToRavnica() { - super("Return to Ravnica", "RTR", "mage.sets.returntoravnica", new GregorianCalendar(2012, 9, 29).getTime(), SetType.EXPANSION); + super("Return to Ravnica", "RTR", ExpansionSet.buildDate(2012, 9, 29), SetType.EXPANSION); this.blockName = "Return to Ravnica"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/RevisedEdition.java b/Mage.Sets/src/mage/sets/RevisedEdition.java index 070f34c8380..a53ead62ff3 100644 --- a/Mage.Sets/src/mage/sets/RevisedEdition.java +++ b/Mage.Sets/src/mage/sets/RevisedEdition.java @@ -1,14 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -23,7 +18,7 @@ public class RevisedEdition extends ExpansionSet { } private RevisedEdition() { - super("Revised Edition", "3ED", "mage.sets.revisededition", new GregorianCalendar(1994, 3, 1).getTime(), SetType.CORE); + super("Revised Edition", "3ED", ExpansionSet.buildDate(1994, 3, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/RiseOfTheEldrazi.java b/Mage.Sets/src/mage/sets/RiseOfTheEldrazi.java index 1ad427c1053..5f555442a78 100644 --- a/Mage.Sets/src/mage/sets/RiseOfTheEldrazi.java +++ b/Mage.Sets/src/mage/sets/RiseOfTheEldrazi.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class RiseOfTheEldrazi extends ExpansionSet { } private RiseOfTheEldrazi() { - super("Rise of the Eldrazi", "ROE", "mage.sets.riseoftheeldrazi", new GregorianCalendar(2010, 3, 17).getTime(), SetType.EXPANSION); + super("Rise of the Eldrazi", "ROE", ExpansionSet.buildDate(2010, 3, 17), SetType.EXPANSION); this.blockName = "Zendikar"; this.parentSet = Zendikar.getInstance(); this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/SaviorsOfKamigawa.java b/Mage.Sets/src/mage/sets/SaviorsOfKamigawa.java index 42d10472ee2..7dfe4b70933 100644 --- a/Mage.Sets/src/mage/sets/SaviorsOfKamigawa.java +++ b/Mage.Sets/src/mage/sets/SaviorsOfKamigawa.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class SaviorsOfKamigawa extends ExpansionSet { } private SaviorsOfKamigawa() { - super("Saviors of Kamigawa", "SOK", "mage.sets.saviorsofkamigawa", new GregorianCalendar(2005, 5, 3).getTime(), SetType.EXPANSION); + super("Saviors of Kamigawa", "SOK", ExpansionSet.buildDate(2005, 5, 3), SetType.EXPANSION); this.blockName = "Kamigawa"; this.parentSet = ChampionsOfKamigawa.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java b/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java index 09554f26423..d0550abc017 100644 --- a/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java +++ b/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java @@ -31,12 +31,8 @@ package mage.sets; import mage.constants.SetType; import mage.cards.ExpansionSet; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -51,7 +47,7 @@ public class ScarsOfMirrodin extends ExpansionSet { } private ScarsOfMirrodin() { - super("Scars of Mirrodin", "SOM", "mage.sets.scarsofmirrodin", new GregorianCalendar(2010, 10, 1).getTime(), SetType.EXPANSION); + super("Scars of Mirrodin", "SOM", ExpansionSet.buildDate(2010, 10, 1), SetType.EXPANSION); this.blockName = "Scars of Mirrodin"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Scourge.java b/Mage.Sets/src/mage/sets/Scourge.java index e9cd29ef29f..df8f5c2c197 100644 --- a/Mage.Sets/src/mage/sets/Scourge.java +++ b/Mage.Sets/src/mage/sets/Scourge.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class Scourge extends ExpansionSet { } private Scourge() { - super("Scourge", "SCG", "mage.sets.scourge", new GregorianCalendar(2003, 5, 17).getTime(), SetType.EXPANSION); + super("Scourge", "SCG", ExpansionSet.buildDate(2003, 5, 17), SetType.EXPANSION); this.blockName = "Onslaught"; this.parentSet = Onslaught.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/SeventhEdition.java b/Mage.Sets/src/mage/sets/SeventhEdition.java index 615ccc32781..157d56b39c2 100644 --- a/Mage.Sets/src/mage/sets/SeventhEdition.java +++ b/Mage.Sets/src/mage/sets/SeventhEdition.java @@ -27,15 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +45,7 @@ public class SeventhEdition extends ExpansionSet { } private SeventhEdition() { - super("Seventh Edition", "7ED", "mage.sets.seventhedition", new GregorianCalendar(2001, 3, 11).getTime(), SetType.CORE); + super("Seventh Edition", "7ED", ExpansionSet.buildDate(2001, 3, 11), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/Shadowmoor.java b/Mage.Sets/src/mage/sets/Shadowmoor.java index f476c5577ce..fa5fd0a024b 100644 --- a/Mage.Sets/src/mage/sets/Shadowmoor.java +++ b/Mage.Sets/src/mage/sets/Shadowmoor.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Shadowmoor extends ExpansionSet { } private Shadowmoor() { - super("Shadowmoor", "SHM", "mage.sets.shadowmoor", new GregorianCalendar(2008, 4, 2).getTime(), SetType.EXPANSION); + super("Shadowmoor", "SHM", ExpansionSet.buildDate(2008, 4, 2), SetType.EXPANSION); this.blockName = "Shadowmoor"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index 2238d9c5b1d..dfdd6d227ac 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -29,9 +29,9 @@ package mage.sets; import java.util.ArrayList; import java.util.EnumMap; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.Card; +import mage.cards.CardGraphicInfo; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; @@ -39,9 +39,6 @@ import mage.cards.repository.CardRepository; import mage.constants.Rarity; import mage.constants.SetType; import mage.util.RandomUtil; -import mage.ObjectColor; -import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -58,7 +55,7 @@ public class ShadowsOverInnistrad extends ExpansionSet { protected final EnumMap> savedDoubleFacedCards; private ShadowsOverInnistrad() { - super("Shadows over Innistrad", "SOI", "mage.sets.shadowsoverinnistrad", new GregorianCalendar(2016, 3, 8).getTime(), SetType.EXPANSION); + super("Shadows over Innistrad", "SOI", ExpansionSet.buildDate(2016, 4, 8), SetType.EXPANSION); this.blockName = "Shadows over Innistrad"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/ShardsOfAlara.java b/Mage.Sets/src/mage/sets/ShardsOfAlara.java index 40dc0607a82..06f025ef790 100644 --- a/Mage.Sets/src/mage/sets/ShardsOfAlara.java +++ b/Mage.Sets/src/mage/sets/ShardsOfAlara.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class ShardsOfAlara extends ExpansionSet { } private ShardsOfAlara() { - super("Shards of Alara", "ALA", "mage.sets.shardsofalara", new GregorianCalendar(2008, 8, 27).getTime(), SetType.EXPANSION); + super("Shards of Alara", "ALA", ExpansionSet.buildDate(2008, 8, 27), SetType.EXPANSION); this.blockName = "Shards of Alara"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/SorinVsTibalt.java b/Mage.Sets/src/mage/sets/SorinVsTibalt.java index 47ea994ccab..968fcd1e186 100644 --- a/Mage.Sets/src/mage/sets/SorinVsTibalt.java +++ b/Mage.Sets/src/mage/sets/SorinVsTibalt.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class SorinVsTibalt extends ExpansionSet { } private SorinVsTibalt() { - super("Duel Decks: Sorin vs. Tibalt", "DDK", "mage.sets.sorinvstibalt", new GregorianCalendar(2013, 3, 15).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Sorin vs. Tibalt", "DDK", ExpansionSet.buildDate(2013, 3, 15), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Absorb Vis", 31, Rarity.COMMON, mage.cards.a.AbsorbVis.class)); diff --git a/Mage.Sets/src/mage/sets/SpeedVsCunning.java b/Mage.Sets/src/mage/sets/SpeedVsCunning.java index 9054dd9032e..c858d3daf4c 100644 --- a/Mage.Sets/src/mage/sets/SpeedVsCunning.java +++ b/Mage.Sets/src/mage/sets/SpeedVsCunning.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class SpeedVsCunning extends ExpansionSet { } private SpeedVsCunning() { - super("Duel Decks: Speed vs. Cunning", "DDN", "mage.sets.speedvscunning", new GregorianCalendar(2014, 9, 5).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Speed vs. Cunning", "DDN", ExpansionSet.buildDate(2014, 9, 5), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Act of Treason", 26, Rarity.COMMON, mage.cards.a.ActOfTreason.class)); diff --git a/Mage.Sets/src/mage/sets/StarWars.java b/Mage.Sets/src/mage/sets/StarWars.java index 74501d71285..4e02a452880 100644 --- a/Mage.Sets/src/mage/sets/StarWars.java +++ b/Mage.Sets/src/mage/sets/StarWars.java @@ -27,7 +27,6 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.CardGraphicInfo; import mage.cards.ExpansionSet; import mage.cards.FrameStyle; @@ -47,7 +46,7 @@ public class StarWars extends ExpansionSet { } private StarWars() { - super("Star Wars", "SWS", "mage.sets.starwars", new GregorianCalendar(2015, 12, 25).getTime(), SetType.CUSTOM_SET); + super("Star Wars", "SWS", ExpansionSet.buildDate(2015, 12, 25), SetType.CUSTOM_SET); this.blockName = "Star Wars"; this.hasBoosters = true; this.hasBasicLands = true; @@ -72,7 +71,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Bantha Herd", 3, Rarity.RARE, mage.cards.b.BanthaHerd.class)); cards.add(new SetCardInfo("Bathe in Bacta", 129, Rarity.COMMON, mage.cards.b.BatheInBacta.class)); cards.add(new SetCardInfo("Battle Tactics", 5, Rarity.COMMON, mage.cards.b.BattleTactics.class)); - cards.add(new SetCardInfo("Bib Fortuna", 67, Rarity.UNCOMMON, mage.cards.b.BibFortuna.class)); + cards.add(new SetCardInfo("Bib Fortuna", 67, Rarity.RARE, mage.cards.b.BibFortuna.class)); cards.add(new SetCardInfo("Black Market Dealer", 68, Rarity.UNCOMMON, mage.cards.b.BlackMarketDealer.class)); cards.add(new SetCardInfo("Blind Worship", 184, Rarity.RARE, mage.cards.b.BlindWorship.class)); cards.add(new SetCardInfo("Boba Fett", 185, Rarity.MYTHIC, mage.cards.b.BobaFett.class)); @@ -128,7 +127,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Force Mastery", 196, Rarity.RARE, mage.cards.f.ForceMastery.class)); cards.add(new SetCardInfo("Force Pull", 138, Rarity.COMMON, mage.cards.f.ForcePull.class)); cards.add(new SetCardInfo("Force Push", 38, Rarity.UNCOMMON, mage.cards.f.ForcePush.class)); - cards.add(new SetCardInfo("Force Scream", 104, Rarity.COMMON, mage.cards.f.ForceScream.class)); + cards.add(new SetCardInfo("Force Scream", 104, Rarity.UNCOMMON, mage.cards.f.ForceScream.class)); cards.add(new SetCardInfo("Force Spark", 105, Rarity.COMMON, mage.cards.f.ForceSpark.class)); cards.add(new SetCardInfo("Forest", 264, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Forest", 265, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); @@ -141,7 +140,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Grand Moff Tarkin", 74, Rarity.RARE, mage.cards.g.GrandMoffTarkin.class)); cards.add(new SetCardInfo("Greater Krayt Dragon", 198, Rarity.MYTHIC, mage.cards.g.GreaterKraytDragon.class)); cards.add(new SetCardInfo("Greedo", 199, Rarity.RARE, mage.cards.g.Greedo.class)); - cards.add(new SetCardInfo("Gundark", 108, Rarity.COMMON, mage.cards.g.Gundark.class)); + cards.add(new SetCardInfo("Gundark", 108, Rarity.UNCOMMON, mage.cards.g.Gundark.class)); cards.add(new SetCardInfo("Gungan Captain", 39, Rarity.COMMON, mage.cards.g.GunganCaptain.class)); cards.add(new SetCardInfo("Han Solo", 109, Rarity.RARE, mage.cards.h.HanSolo.class)); cards.add(new SetCardInfo("Hazard Trooper", 75, Rarity.UNCOMMON, mage.cards.h.HazardTrooper.class)); @@ -172,7 +171,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Jedi Battle Healer", 15, Rarity.UNCOMMON, mage.cards.j.JediBattleHealer.class)); cards.add(new SetCardInfo("Jedi Battle Mage", 42, Rarity.UNCOMMON, mage.cards.j.JediBattleMage.class)); cards.add(new SetCardInfo("Jedi Battle Sage", 142, Rarity.UNCOMMON, mage.cards.j.JediBattleSage.class)); - cards.add(new SetCardInfo("Jedi Enclave", 243, Rarity.UNCOMMON, mage.cards.j.JediEnclave.class)); + cards.add(new SetCardInfo("Jedi Enclave", 243, Rarity.COMMON, mage.cards.j.JediEnclave.class)); cards.add(new SetCardInfo("Jedi Holocron", 233, Rarity.COMMON, mage.cards.j.JediHolocron.class)); cards.add(new SetCardInfo("Jedi Inquirer", 16, Rarity.UNCOMMON, mage.cards.j.JediInquirer.class)); cards.add(new SetCardInfo("Jedi Instructor", 17, Rarity.COMMON, mage.cards.j.JediInstructor.class)); @@ -189,7 +188,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("LAAT Gunship", 20, Rarity.UNCOMMON, mage.cards.l.LAATGunship.class)); cards.add(new SetCardInfo("Lando Calrissian", 21, Rarity.RARE, mage.cards.l.LandoCalrissian.class)); cards.add(new SetCardInfo("Legacy of the Beloved", 144, Rarity.RARE, mage.cards.l.LegacyOfTheBeloved.class)); - cards.add(new SetCardInfo("Lightning Bolt", 114, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Lightning Bolt", 114, Rarity.UNCOMMON, mage.cards.l.LightningBolt.class)); cards.add(new SetCardInfo("Lightsaber", 234, Rarity.COMMON, mage.cards.l.Lightsaber.class)); cards.add(new SetCardInfo("Loyal Tauntaun", 22, Rarity.COMMON, mage.cards.l.LoyalTauntaun.class)); cards.add(new SetCardInfo("Luke Skywalker", 205, Rarity.MYTHIC, mage.cards.l.LukeSkywalker.class)); @@ -201,7 +200,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Might of the Wild", 207, Rarity.UNCOMMON, mage.cards.m.MightOfTheWild.class)); cards.add(new SetCardInfo("Millennium Falcon", 146, Rarity.RARE, mage.cards.m.MillenniumFalcon.class)); cards.add(new SetCardInfo("Miraculous Recovery", 24, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class)); - cards.add(new SetCardInfo("Moisture Farm", 247, Rarity.RARE, mage.cards.m.MoistureFarm.class)); + cards.add(new SetCardInfo("Moisture Farm", 247, Rarity.UNCOMMON, mage.cards.m.MoistureFarm.class)); cards.add(new SetCardInfo("Mon Calamari Cruiser", 47, Rarity.UNCOMMON, mage.cards.m.MonCalamariCruiser.class)); cards.add(new SetCardInfo("Mon Calamari Initiate", 48, Rarity.COMMON, mage.cards.m.MonCalamariInitiate.class)); cards.add(new SetCardInfo("Mountain", 261, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); @@ -212,7 +211,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Nerf Herder", 147, Rarity.UNCOMMON, mage.cards.n.NerfHerder.class)); cards.add(new SetCardInfo("Nexu Stalker", 148, Rarity.UNCOMMON, mage.cards.n.NexuStalker.class)); cards.add(new SetCardInfo("Nightspider", 149, Rarity.COMMON, mage.cards.n.Nightspider.class)); - cards.add(new SetCardInfo("No Contest", 150, Rarity.NA, mage.cards.n.NoContest.class)); + cards.add(new SetCardInfo("No Contest", 150, Rarity.COMMON, mage.cards.n.NoContest.class)); cards.add(new SetCardInfo("Novice Bounty Hunter", 115, Rarity.COMMON, mage.cards.n.NoviceBountyHunter.class)); cards.add(new SetCardInfo("Nute Gunray", 208, Rarity.RARE, mage.cards.n.NuteGunray.class)); cards.add(new SetCardInfo("Obi-Wan Kenobi", 163, Rarity.MYTHIC, mage.cards.o.ObiWanKenobi.class)); @@ -246,7 +245,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Rogue's Passage", 248, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class)); cards.add(new SetCardInfo("Rule of two", 85, Rarity.UNCOMMON, mage.cards.r.RuleOfTwo.class)); cards.add(new SetCardInfo("Rumination", 53, Rarity.COMMON, mage.cards.r.Rumination.class)); - cards.add(new SetCardInfo("Rumor Monger", 213, Rarity.COMMON, mage.cards.r.RumorMonger.class)); + cards.add(new SetCardInfo("Rumor Monger", 213, Rarity.UNCOMMON, mage.cards.r.RumorMonger.class)); cards.add(new SetCardInfo("Sabacc Game", 54, Rarity.UNCOMMON, mage.cards.s.SabaccGame.class)); cards.add(new SetCardInfo("Salvage Squad", 214, Rarity.COMMON, mage.cards.s.SalvageSquad.class)); cards.add(new SetCardInfo("Sand Trooper", 28, Rarity.COMMON, mage.cards.s.SandTrooper.class)); @@ -271,14 +270,14 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Sith Lord", 89, Rarity.RARE, mage.cards.s.SithLord.class)); cards.add(new SetCardInfo("Sith Magic", 215, Rarity.RARE, mage.cards.s.SithMagic.class)); cards.add(new SetCardInfo("Sith Manipulator", 56, Rarity.UNCOMMON, mage.cards.s.SithManipulator.class)); - cards.add(new SetCardInfo("Sith Marauder", 121, Rarity.COMMON, mage.cards.s.SithMarauder.class)); + cards.add(new SetCardInfo("Sith Marauder", 121, Rarity.UNCOMMON, mage.cards.s.SithMarauder.class)); cards.add(new SetCardInfo("Sith Mindseer", 216, Rarity.UNCOMMON, mage.cards.s.SithMindseer.class)); cards.add(new SetCardInfo("Sith Ravager", 122, Rarity.COMMON, mage.cards.s.SithRavager.class)); cards.add(new SetCardInfo("Sith Ruins", 250, Rarity.COMMON, mage.cards.s.SithRuins.class)); cards.add(new SetCardInfo("Sith Sorcerer", 57, Rarity.COMMON, mage.cards.s.SithSorcerer.class)); cards.add(new SetCardInfo("Sith Thoughtseeker", 90, Rarity.COMMON, mage.cards.s.SithThoughtseeker.class)); cards.add(new SetCardInfo("Slave I", 217, Rarity.RARE, mage.cards.s.SlaveI.class)); - cards.add(new SetCardInfo("Smash to Smithereens", 123, Rarity.COMMON, mage.cards.s.SmashToSmithereens.class)); + cards.add(new SetCardInfo("Smash to Smithereens", 123, Rarity.UNCOMMON, mage.cards.s.SmashToSmithereens.class)); cards.add(new SetCardInfo("Snow Trooper", 30, Rarity.UNCOMMON, mage.cards.s.SnowTrooper.class)); cards.add(new SetCardInfo("Speeder Trooper", 124, Rarity.COMMON, mage.cards.s.SpeederTrooper.class)); cards.add(new SetCardInfo("Star Destroyer", 218, Rarity.RARE, mage.cards.s.StarDestroyer.class)); @@ -321,7 +320,7 @@ public class StarWars extends ExpansionSet { cards.add(new SetCardInfo("X-Wing", 32, Rarity.COMMON, mage.cards.x.XWing.class)); cards.add(new SetCardInfo("Yoda, Jedi Master", 178, Rarity.MYTHIC, mage.cards.y.YodaJediMaster.class)); cards.add(new SetCardInfo("Y-Wing", 62, Rarity.UNCOMMON, mage.cards.y.YWing.class)); - cards.add(new SetCardInfo("Zam Wessel", 63, Rarity.NA, mage.cards.z.ZamWessel.class)); + cards.add(new SetCardInfo("Zam Wessel", 63, Rarity.RARE, mage.cards.z.ZamWessel.class)); } } diff --git a/Mage.Sets/src/mage/sets/Starter1999.java b/Mage.Sets/src/mage/sets/Starter1999.java index 74f0ddd1b26..c1bcf1a98d1 100644 --- a/Mage.Sets/src/mage/sets/Starter1999.java +++ b/Mage.Sets/src/mage/sets/Starter1999.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class Starter1999 extends ExpansionSet { } private Starter1999() { - super("Starter 1999", "S99", "mage.sets.starter1999", new GregorianCalendar(1999, 7, 1).getTime(), SetType.SUPPLEMENTAL); + super("Starter 1999", "S99", ExpansionSet.buildDate(1999, 7, 1), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = true; diff --git a/Mage.Sets/src/mage/sets/Starter2000.java b/Mage.Sets/src/mage/sets/Starter2000.java index 415390ea1dd..b1d56c9eb4a 100644 --- a/Mage.Sets/src/mage/sets/Starter2000.java +++ b/Mage.Sets/src/mage/sets/Starter2000.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -55,7 +51,7 @@ public class Starter2000 extends ExpansionSet { } private Starter2000() { - super("Starter 2000", "S00", "mage.sets.starter2000", new GregorianCalendar(2000, 7, 1).getTime(), SetType.SUPPLEMENTAL); + super("Starter 2000", "S00", ExpansionSet.buildDate(2000, 7, 1), SetType.SUPPLEMENTAL); this.blockName = "Beginner"; this.hasBasicLands = true; this.hasBoosters = false; diff --git a/Mage.Sets/src/mage/sets/Stronghold.java b/Mage.Sets/src/mage/sets/Stronghold.java index ce03b0937c6..366d17bb714 100644 --- a/Mage.Sets/src/mage/sets/Stronghold.java +++ b/Mage.Sets/src/mage/sets/Stronghold.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -47,7 +44,7 @@ public class Stronghold extends ExpansionSet { } private Stronghold() { - super("Stronghold", "STH", "mage.sets.stronghold", new GregorianCalendar(1998, 1, 21).getTime(), SetType.EXPANSION); + super("Stronghold", "STH", ExpansionSet.buildDate(1998, 3, 2), SetType.EXPANSION); this.blockName = "Tempest"; this.parentSet = Tempest.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/SuperSeries.java b/Mage.Sets/src/mage/sets/SuperSeries.java index 867ac12ff68..30f5f5170d6 100644 --- a/Mage.Sets/src/mage/sets/SuperSeries.java +++ b/Mage.Sets/src/mage/sets/SuperSeries.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class SuperSeries extends ExpansionSet { } private SuperSeries() { - super("Super Series", "SUS", "mage.sets.superseries", new GregorianCalendar(1996, 1, 1).getTime(), SetType.PROMOTIONAL); + super("Super Series", "SUS", ExpansionSet.buildDate(1996, 1, 1), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("City of Brass", 6, Rarity.SPECIAL, mage.cards.c.CityOfBrass.class)); cards.add(new SetCardInfo("Crusade", 4, Rarity.SPECIAL, mage.cards.c.Crusade.class)); diff --git a/Mage.Sets/src/mage/sets/Tempest.java b/Mage.Sets/src/mage/sets/Tempest.java index 133ba0e6d34..793161f7525 100644 --- a/Mage.Sets/src/mage/sets/Tempest.java +++ b/Mage.Sets/src/mage/sets/Tempest.java @@ -1,16 +1,12 @@ package mage.sets; +import mage.cards.CardGraphicInfo; import mage.cards.ExpansionSet; +import mage.constants.Rarity; import mage.constants.SetType; -import java.util.GregorianCalendar; -import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; -import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; - public class Tempest extends ExpansionSet { + private static final Tempest fINSTANCE = new Tempest(); public static Tempest getInstance() { @@ -18,7 +14,7 @@ public class Tempest extends ExpansionSet { } private Tempest() { - super("Tempest", "TMP", "mage.sets.tempest", new GregorianCalendar(1997, 9, 1).getTime(), SetType.EXPANSION); + super("Tempest", "TMP", ExpansionSet.buildDate(1997, 10, 1), SetType.EXPANSION); this.blockName = "Tempest"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/TempestRemastered.java b/Mage.Sets/src/mage/sets/TempestRemastered.java index 70076653656..7cd0a90216c 100644 --- a/Mage.Sets/src/mage/sets/TempestRemastered.java +++ b/Mage.Sets/src/mage/sets/TempestRemastered.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class TempestRemastered extends ExpansionSet { } private TempestRemastered() { - super("Tempest Remastered", "TPR", "mage.sets.tempestremastered", new GregorianCalendar(2015, 5, 6).getTime(), SetType.MAGIC_ONLINE); + super("Tempest Remastered", "TPR", ExpansionSet.buildDate(2015, 5, 6), SetType.MAGIC_ONLINE); this.hasBasicLands = true; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/TenthEdition.java b/Mage.Sets/src/mage/sets/TenthEdition.java index 60b8df06e2d..357aaab7098 100644 --- a/Mage.Sets/src/mage/sets/TenthEdition.java +++ b/Mage.Sets/src/mage/sets/TenthEdition.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class TenthEdition extends ExpansionSet { } private TenthEdition() { - super("Tenth Edition", "10E", "mage.sets.tenthedition", new GregorianCalendar(2007, 6, 14).getTime(), SetType.CORE); + super("Tenth Edition", "10E", ExpansionSet.buildDate(2007, 6, 14), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 1; this.numBoosterCommon = 10; diff --git a/Mage.Sets/src/mage/sets/TheDark.java b/Mage.Sets/src/mage/sets/TheDark.java index 73724d11412..4679cb50284 100644 --- a/Mage.Sets/src/mage/sets/TheDark.java +++ b/Mage.Sets/src/mage/sets/TheDark.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +44,7 @@ public class TheDark extends ExpansionSet { } private TheDark() { - super("The Dark", "DRK", "mage.sets.thedark", new GregorianCalendar(1994, 7, 1).getTime(), SetType.EXPANSION); + super("The Dark", "DRK", ExpansionSet.buildDate(1994, 7, 1), SetType.EXPANSION); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/Theros.java b/Mage.Sets/src/mage/sets/Theros.java index e52de4422b7..21f6097e9b4 100644 --- a/Mage.Sets/src/mage/sets/Theros.java +++ b/Mage.Sets/src/mage/sets/Theros.java @@ -27,14 +27,10 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -49,7 +45,7 @@ public class Theros extends ExpansionSet { } private Theros() { - super("Theros", "THS", "mage.sets.theros", new GregorianCalendar(2013, 9, 27).getTime(), SetType.EXPANSION); + super("Theros", "THS", ExpansionSet.buildDate(2013, 9, 27), SetType.EXPANSION); this.blockName = "Theros"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/TimeSpiral.java b/Mage.Sets/src/mage/sets/TimeSpiral.java index 4502bd99d1a..206faf76cec 100644 --- a/Mage.Sets/src/mage/sets/TimeSpiral.java +++ b/Mage.Sets/src/mage/sets/TimeSpiral.java @@ -1,6 +1,5 @@ package mage.sets; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.Card; import mage.cards.ExpansionSet; @@ -8,9 +7,7 @@ import mage.cards.repository.CardCriteria; import mage.cards.repository.CardRepository; import mage.constants.Rarity; import mage.constants.SetType; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; public class TimeSpiral extends ExpansionSet { @@ -21,7 +18,7 @@ public class TimeSpiral extends ExpansionSet { } private TimeSpiral() { - super("Time Spiral", "TSP", "mage.sets.timespiral", new GregorianCalendar(2006, 9, 9).getTime(), SetType.EXPANSION); + super("Time Spiral", "TSP", ExpansionSet.buildDate(2006, 9, 9), SetType.EXPANSION); this.blockName = "Time Spiral"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/TimeSpiralTimeshifted.java b/Mage.Sets/src/mage/sets/TimeSpiralTimeshifted.java index 82121804c8d..ebdc36c44b4 100644 --- a/Mage.Sets/src/mage/sets/TimeSpiralTimeshifted.java +++ b/Mage.Sets/src/mage/sets/TimeSpiralTimeshifted.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class TimeSpiralTimeshifted extends ExpansionSet { } private TimeSpiralTimeshifted() { - super("Time Spiral \"Timeshifted\"", "TSB", "mage.sets.timeshifted", new GregorianCalendar(2006, 9, 9).getTime(), SetType.EXPANSION); + super("Time Spiral \"Timeshifted\"", "TSB", ExpansionSet.buildDate(2006, 9, 9), SetType.EXPANSION); this.blockName = "Time Spiral"; this.parentSet = TimeSpiral.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Torment.java b/Mage.Sets/src/mage/sets/Torment.java index 45bceb861ed..bb21ca0ce60 100644 --- a/Mage.Sets/src/mage/sets/Torment.java +++ b/Mage.Sets/src/mage/sets/Torment.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -47,7 +44,7 @@ public class Torment extends ExpansionSet { } private Torment() { - super("Torment", "TOR", "mage.sets.torment", new GregorianCalendar(2002, 0, 26).getTime(), SetType.EXPANSION); + super("Torment", "TOR", ExpansionSet.buildDate(2002, 1, 26), SetType.EXPANSION); this.blockName = "Odyssey"; this.parentSet = Odyssey.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/UginsFate.java b/Mage.Sets/src/mage/sets/UginsFate.java index 0dcd59e4492..51a4ba53541 100644 --- a/Mage.Sets/src/mage/sets/UginsFate.java +++ b/Mage.Sets/src/mage/sets/UginsFate.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class UginsFate extends ExpansionSet { } private UginsFate() { - super("Ugin's Fate", "UGIN", "mage.sets.uginsfate", new GregorianCalendar(2015, 1, 16).getTime(), SetType.PROMOTIONAL); + super("Ugin's Fate", "UGIN", ExpansionSet.buildDate(2015, 1, 16), SetType.PROMOTIONAL); this.hasBoosters = false; cards.add(new SetCardInfo("Ainok Tracker", 96, Rarity.COMMON, mage.cards.a.AinokTracker.class)); cards.add(new SetCardInfo("Altar of the Brood", 216, Rarity.RARE, mage.cards.a.AltarOfTheBrood.class)); diff --git a/Mage.Sets/src/mage/sets/Unglued.java b/Mage.Sets/src/mage/sets/Unglued.java index 6467e8efc9f..5ed2a561eca 100644 --- a/Mage.Sets/src/mage/sets/Unglued.java +++ b/Mage.Sets/src/mage/sets/Unglued.java @@ -3,10 +3,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; import mage.cards.FrameStyle; @@ -22,7 +19,7 @@ public class Unglued extends ExpansionSet { } private Unglued() { - super("Unglued", "UGL", "mage.sets.unglued", new GregorianCalendar(1998, 8, 11).getTime(), SetType.JOKESET); + super("Unglued", "UGL", ExpansionSet.buildDate(1998, 8, 11), SetType.JOKESET); cards.add(new SetCardInfo("Forest", 88, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.UGL_FULL_ART_BASIC, false))); cards.add(new SetCardInfo("Island", 85, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.UGL_FULL_ART_BASIC, false))); cards.add(new SetCardInfo("Mountain", 87, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.UGL_FULL_ART_BASIC, false))); diff --git a/Mage.Sets/src/mage/sets/Unhinged.java b/Mage.Sets/src/mage/sets/Unhinged.java index ca84b14ffcb..feee56a7005 100644 --- a/Mage.Sets/src/mage/sets/Unhinged.java +++ b/Mage.Sets/src/mage/sets/Unhinged.java @@ -3,10 +3,7 @@ package mage.sets; import mage.cards.ExpansionSet; import mage.constants.SetType; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; import mage.cards.FrameStyle; @@ -22,7 +19,7 @@ public class Unhinged extends ExpansionSet { } private Unhinged() { - super("Unhinged", "UNH", "mage.sets.unhinged", new GregorianCalendar(2004, 11, 20).getTime(), SetType.JOKESET); + super("Unhinged", "UNH", ExpansionSet.buildDate(2004, 11, 20), SetType.JOKESET); cards.add(new SetCardInfo("Forest", 140, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.UNH_FULL_ART_BASIC, false))); cards.add(new SetCardInfo("Island", 137, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.UNH_FULL_ART_BASIC, false))); cards.add(new SetCardInfo("Mountain", 139, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.UNH_FULL_ART_BASIC, false))); diff --git a/Mage.Sets/src/mage/sets/UnlimitedEdition.java b/Mage.Sets/src/mage/sets/UnlimitedEdition.java index 405f9b39bd5..fc05dfdde98 100644 --- a/Mage.Sets/src/mage/sets/UnlimitedEdition.java +++ b/Mage.Sets/src/mage/sets/UnlimitedEdition.java @@ -1,14 +1,9 @@ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -23,7 +18,7 @@ public class UnlimitedEdition extends ExpansionSet { } private UnlimitedEdition() { - super("Unlimited Edition", "2ED", "mage.sets.unlimitededition", new GregorianCalendar(1993, 11, 1).getTime(), SetType.CORE); + super("Unlimited Edition", "2ED", ExpansionSet.buildDate(1993, 11, 1), SetType.CORE); this.hasBoosters = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; diff --git a/Mage.Sets/src/mage/sets/UrzasDestiny.java b/Mage.Sets/src/mage/sets/UrzasDestiny.java index fe932593305..1dabc48458e 100644 --- a/Mage.Sets/src/mage/sets/UrzasDestiny.java +++ b/Mage.Sets/src/mage/sets/UrzasDestiny.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; -import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -46,7 +44,7 @@ public class UrzasDestiny extends ExpansionSet { } private UrzasDestiny() { - super("Urza's Destiny", "UDS", "mage.sets.urzasdestiny", new GregorianCalendar(1999, 6, 23).getTime(), SetType.EXPANSION); + super("Urza's Destiny", "UDS", ExpansionSet.buildDate(1999, 6, 7), SetType.EXPANSION); this.blockName = "Urza"; this.parentSet = UrzasSaga.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/UrzasLegacy.java b/Mage.Sets/src/mage/sets/UrzasLegacy.java index 7d8e29ff6b6..a381931309e 100644 --- a/Mage.Sets/src/mage/sets/UrzasLegacy.java +++ b/Mage.Sets/src/mage/sets/UrzasLegacy.java @@ -24,16 +24,12 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import mage.constants.SetType; import mage.cards.ExpansionSet; - -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -48,7 +44,7 @@ public class UrzasLegacy extends ExpansionSet { } private UrzasLegacy() { - super("Urza's Legacy", "ULG", "mage.sets.urzaslegacy", new GregorianCalendar(1999, 2, 6).getTime(), SetType.EXPANSION); + super("Urza's Legacy", "ULG", ExpansionSet.buildDate(1999, 3, 6), SetType.EXPANSION); this.blockName = "Urza"; this.parentSet = UrzasSaga.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/UrzasSaga.java b/Mage.Sets/src/mage/sets/UrzasSaga.java index ae3d1e1ded6..af1b7d6428b 100644 --- a/Mage.Sets/src/mage/sets/UrzasSaga.java +++ b/Mage.Sets/src/mage/sets/UrzasSaga.java @@ -24,18 +24,13 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; -import java.util.GregorianCalendar; -import mage.constants.SetType; +import mage.cards.CardGraphicInfo; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; -import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; +import mage.constants.SetType; /** * @@ -50,7 +45,7 @@ public class UrzasSaga extends ExpansionSet { } private UrzasSaga() { - super("Urza's Saga", "USG", "mage.sets.urzassaga", new GregorianCalendar(1998, 10, 1).getTime(), SetType.EXPANSION); + super("Urza's Saga", "USG", ExpansionSet.buildDate(1998, 10, 12), SetType.EXPANSION); this.blockName = "Urza"; this.hasBoosters = true; this.numBoosterLands = 0; diff --git a/Mage.Sets/src/mage/sets/VenserVsKoth.java b/Mage.Sets/src/mage/sets/VenserVsKoth.java index 4d10b3eed99..3c86e8e3d95 100644 --- a/Mage.Sets/src/mage/sets/VenserVsKoth.java +++ b/Mage.Sets/src/mage/sets/VenserVsKoth.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class VenserVsKoth extends ExpansionSet { } private VenserVsKoth() { - super("Duel Decks: Venser vs. Koth", "DDI", "mage.sets.venservskoth", new GregorianCalendar(2012, 3, 30).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Venser vs. Koth", "DDI", ExpansionSet.buildDate(2012, 3, 30), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Aether Membrane", 48, Rarity.UNCOMMON, mage.cards.a.AetherMembrane.class)); diff --git a/Mage.Sets/src/mage/sets/VintageMasters.java b/Mage.Sets/src/mage/sets/VintageMasters.java index 0ac4a1ddc09..18a4ab3fc04 100644 --- a/Mage.Sets/src/mage/sets/VintageMasters.java +++ b/Mage.Sets/src/mage/sets/VintageMasters.java @@ -28,7 +28,6 @@ package mage.sets; -import java.util.GregorianCalendar; import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; @@ -50,7 +49,7 @@ public class VintageMasters extends ExpansionSet { } private VintageMasters() { - super("Vintage Masters", "VMA", "mage.sets.vintagemasters", new GregorianCalendar(2014, 6, 16).getTime(), SetType.MAGIC_ONLINE); + super("Vintage Masters", "VMA", ExpansionSet.buildDate(2014, 6, 16), SetType.MAGIC_ONLINE); this.hasBasicLands = false; this.hasBoosters = true; this.numBoosterSpecial = 1; diff --git a/Mage.Sets/src/mage/sets/Visions.java b/Mage.Sets/src/mage/sets/Visions.java index 995b5652a7b..749024e0fc1 100644 --- a/Mage.Sets/src/mage/sets/Visions.java +++ b/Mage.Sets/src/mage/sets/Visions.java @@ -27,12 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; - import mage.cards.ExpansionSet; -import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -47,7 +44,7 @@ public class Visions extends ExpansionSet { } private Visions() { - super("Visions", "VIS", "mage.sets.visions", new GregorianCalendar(1997, 0, 11).getTime(), SetType.EXPANSION); + super("Visions", "VIS", ExpansionSet.buildDate(1997, 1, 11), SetType.EXPANSION); this.blockName = "Mirage"; this.parentSet = Mirage.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/WPNGateway.java b/Mage.Sets/src/mage/sets/WPNGateway.java index 5d2a51a7525..1784e706c9b 100644 --- a/Mage.Sets/src/mage/sets/WPNGateway.java +++ b/Mage.Sets/src/mage/sets/WPNGateway.java @@ -5,11 +5,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -24,7 +22,7 @@ public class WPNGateway extends ExpansionSet { } private WPNGateway() { - super("WPN Gateway", "GRC", "mage.sets.wpngateway", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("WPN Gateway", "GRC", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Auramancer", 77, Rarity.SPECIAL, mage.cards.a.Auramancer.class)); diff --git a/Mage.Sets/src/mage/sets/Weatherlight.java b/Mage.Sets/src/mage/sets/Weatherlight.java index f59ff16f054..fe13584ad56 100644 --- a/Mage.Sets/src/mage/sets/Weatherlight.java +++ b/Mage.Sets/src/mage/sets/Weatherlight.java @@ -31,9 +31,7 @@ package mage.sets; import mage.constants.SetType; import mage.cards.ExpansionSet; -import java.util.GregorianCalendar; import mage.constants.Rarity; -import java.util.List; /** * @@ -48,7 +46,7 @@ public class Weatherlight extends ExpansionSet { } private Weatherlight() { - super("Weatherlight", "WTH", "mage.sets.weatherlight", new GregorianCalendar(1997, 5, 31).getTime(), SetType.EXPANSION); + super("Weatherlight", "WTH", ExpansionSet.buildDate(1997, 5, 31), SetType.EXPANSION); this.blockName = "Mirage"; this.parentSet = Mirage.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/WelcomeDeck2016.java b/Mage.Sets/src/mage/sets/WelcomeDeck2016.java index 65a096d3dfb..45483e39c50 100644 --- a/Mage.Sets/src/mage/sets/WelcomeDeck2016.java +++ b/Mage.Sets/src/mage/sets/WelcomeDeck2016.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class WelcomeDeck2016 extends ExpansionSet { } private WelcomeDeck2016() { - super("Welcome Deck 2016", "W16", "mage.sets.welcomedeck2016", new GregorianCalendar(2016, 3, 8).getTime(), SetType.SUPPLEMENTAL_STANDARD_LEGAL); + super("Welcome Deck 2016", "W16", ExpansionSet.buildDate(2016, 3, 8), SetType.SUPPLEMENTAL_STANDARD_LEGAL); this.hasBasicLands = false; this.hasBoosters = false; cards.add(new SetCardInfo("Aegis Angel", 1, Rarity.RARE, mage.cards.a.AegisAngel.class)); diff --git a/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java b/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java index 0819b4fbdb9..948030fc29b 100644 --- a/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java +++ b/Mage.Sets/src/mage/sets/WorldMagicCupQualifier.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; /** * @@ -47,7 +45,7 @@ public class WorldMagicCupQualifier extends ExpansionSet { } private WorldMagicCupQualifier() { - super("World Magic Cup Qualifier", "WMCQ", "mage.sets.worldmagiccupqualifier", new GregorianCalendar(2011, 6, 17).getTime(), SetType.PROMOTIONAL); + super("World Magic Cup Qualifier", "WMCQ", ExpansionSet.buildDate(2011, 6, 17), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Abrupt Decay", 6, Rarity.RARE, mage.cards.a.AbruptDecay.class)); diff --git a/Mage.Sets/src/mage/sets/Worldwake.java b/Mage.Sets/src/mage/sets/Worldwake.java index 57122ea9c5a..498ecc6edaf 100644 --- a/Mage.Sets/src/mage/sets/Worldwake.java +++ b/Mage.Sets/src/mage/sets/Worldwake.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,19 +20,16 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets; -import java.util.GregorianCalendar; -import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; +import mage.constants.SetType; /** * @@ -47,7 +44,7 @@ public class Worldwake extends ExpansionSet { } private Worldwake() { - super("Worldwake", "WWK", "mage.sets.worldwake", new GregorianCalendar(2010, 0, 30).getTime(), SetType.EXPANSION); + super("Worldwake", "WWK", ExpansionSet.buildDate(2010, 1, 30), SetType.EXPANSION); this.blockName = "Zendikar"; this.parentSet = Zendikar.getInstance(); this.hasBasicLands = false; diff --git a/Mage.Sets/src/mage/sets/Zendikar.java b/Mage.Sets/src/mage/sets/Zendikar.java index f1e9c80da16..3ced2a51112 100644 --- a/Mage.Sets/src/mage/sets/Zendikar.java +++ b/Mage.Sets/src/mage/sets/Zendikar.java @@ -28,11 +28,9 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.constants.SetType; import mage.cards.ExpansionSet; import mage.constants.Rarity; -import java.util.List; import mage.ObjectColor; import mage.cards.CardGraphicInfo; import mage.cards.FrameStyle; @@ -50,7 +48,7 @@ public class Zendikar extends ExpansionSet { } private Zendikar() { - super("Zendikar", "ZEN", "mage.sets.zendikar", new GregorianCalendar(2009, 8, 26).getTime(), SetType.EXPANSION); + super("Zendikar", "ZEN", ExpansionSet.buildDate(2009, 8, 26), SetType.EXPANSION); this.blockName = "Zendikar"; this.hasBoosters = true; this.numBoosterLands = 1; diff --git a/Mage.Sets/src/mage/sets/ZendikarExpeditions.java b/Mage.Sets/src/mage/sets/ZendikarExpeditions.java index 643b1c5f938..07ec5698abc 100644 --- a/Mage.Sets/src/mage/sets/ZendikarExpeditions.java +++ b/Mage.Sets/src/mage/sets/ZendikarExpeditions.java @@ -27,11 +27,9 @@ */ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; /** * @@ -46,7 +44,7 @@ public class ZendikarExpeditions extends ExpansionSet { } private ZendikarExpeditions() { - super("Zendikar Expeditions", "EXP", "mage.sets.zendikarexpeditions", new GregorianCalendar(2015, 10, 2).getTime(), SetType.PROMOTIONAL); + super("Zendikar Expeditions", "EXP", ExpansionSet.buildDate(2015, 10, 2), SetType.PROMOTIONAL); this.hasBoosters = false; this.hasBasicLands = false; cards.add(new SetCardInfo("Ancient Tomb", 36, Rarity.MYTHIC, mage.cards.a.AncientTomb.class)); diff --git a/Mage.Sets/src/mage/sets/ZendikarVsEldrazi.java b/Mage.Sets/src/mage/sets/ZendikarVsEldrazi.java index 254d1d8e314..25c39c545a1 100644 --- a/Mage.Sets/src/mage/sets/ZendikarVsEldrazi.java +++ b/Mage.Sets/src/mage/sets/ZendikarVsEldrazi.java @@ -28,14 +28,10 @@ package mage.sets; -import java.util.GregorianCalendar; import mage.cards.ExpansionSet; import mage.constants.SetType; import mage.constants.Rarity; -import java.util.List; -import mage.ObjectColor; import mage.cards.CardGraphicInfo; -import mage.cards.FrameStyle; /** * @@ -50,7 +46,7 @@ public class ZendikarVsEldrazi extends ExpansionSet { } private ZendikarVsEldrazi() { - super("Duel Decks: Zendikar vs. Eldrazi", "DDP", "mage.sets.zendikarvseldrazi", new GregorianCalendar(2015, 8, 28).getTime(), SetType.SUPPLEMENTAL); + super("Duel Decks: Zendikar vs. Eldrazi", "DDP", ExpansionSet.buildDate(2015, 8, 28), SetType.SUPPLEMENTAL); this.blockName = "Duel Decks"; this.hasBasicLands = false; cards.add(new SetCardInfo("Affa Guard Hound", 2, Rarity.UNCOMMON, mage.cards.a.AffaGuardHound.class)); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java index 7eb8817b025..2b9085e3c02 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java @@ -20,8 +20,8 @@ public class CloudshiftTest extends CardTestPlayerBase { /** * Tests that casting Cloudshift makes targeting spell fizzling * - * Cloudshift - * Exile target creature you control, then return that card to the battlefield under your control. + * Cloudshift Exile target creature you control, then return that card to + * the battlefield under your control. */ @Test public void testSpellFizzle() { @@ -43,8 +43,10 @@ public class CloudshiftTest extends CardTestPlayerBase { } /** - * Tests that copy effect is discarded and Clone can enter as a copy of another creature. - * Also tests that copy two creature won't 'collect' abilities, after 'Cloudshift' effect Clone should enter as a copy of another creature. + * Tests that copy effect is discarded and Clone can enter as a copy of + * another creature. Also tests that copy two creature won't 'collect' + * abilities, after 'Cloudshift' effect Clone should enter as a copy of + * another creature. */ @Test public void testCopyEffectDiscarded() { @@ -77,7 +79,7 @@ public class CloudshiftTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); addCard(Zone.BATTLEFIELD, playerA, "Bonesplitter"); - + // Exile target creature you control, then return that card to the battlefield under your control. addCard(Zone.HAND, playerA, "Cloudshift"); @@ -92,14 +94,14 @@ public class CloudshiftTest extends CardTestPlayerBase { assertLife(playerA, 20); Assert.assertTrue(silvercoatLion.getAttachments().isEmpty()); - Assert.assertTrue("Bonesplitter must not be connected to Silvercoat Lion",bonesplitter.getAttachedTo() == null); - Assert.assertEquals("Silvercoat Lion's power without equipment has to be 2",2, silvercoatLion.getPower().getValue()); - Assert.assertEquals("Silvercoat Lion's toughness has to be 2",2, silvercoatLion.getToughness().getValue()); + Assert.assertTrue("Bonesplitter must not be connected to Silvercoat Lion", bonesplitter.getAttachedTo() == null); + Assert.assertEquals("Silvercoat Lion's power without equipment has to be 2", 2, silvercoatLion.getPower().getValue()); + Assert.assertEquals("Silvercoat Lion's toughness has to be 2", 2, silvercoatLion.getToughness().getValue()); } /** - * Tests that casting Cloudshift makes creature able to block again - * if it before was targeted with can't block effect + * Tests that casting Cloudshift makes creature able to block again if it + * before was targeted with can't block effect * */ @Test @@ -129,7 +131,6 @@ public class CloudshiftTest extends CardTestPlayerBase { assertPermanentCount(playerB, "Fervent Cathar", 0); assertPermanentCount(playerA, "Timberland Guide", 0); - } @Test @@ -146,20 +147,20 @@ public class CloudshiftTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears", "you gain life equal to that creature's toughness"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Grizzly Bears", null, "you gain life equal to that creature's toughness"); - + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - + execute(); - + assertLife(playerA, 27); // 5 from the first with Giant Growth + 2 from the second bear. } - + /* I had a Stoneforge Mystic equipped with a Umesawa's Jitte. I activated Jitte 4 times to make Stoneforge Mystic 9/10. My opponent put into play a Flickerwisp with his Aether Vial and targeted my Stoneforge Mystic. At the end of my turn, Stoneforge Mystic came back as a 9/10, before going down to 1/2 normally once my turn ended. - */ + */ @Test public void testDontApplyEffectToNewInstanceOfPreviousEquipedPermanent() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); @@ -168,11 +169,11 @@ public class CloudshiftTest extends CardTestPlayerBase { // Exile target creature you control, then return that card to the battlefield under your control. addCard(Zone.HAND, playerA, "Cloudshift"); - + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Silvercoat Lion"); - + attack(3, playerA, "Silvercoat Lion"); - + activateAbility(3, PhaseStep.END_COMBAT, playerA, "Remove a charge counter from {this}: Choose one —
&bull Equipped creature gets"); setModeChoice(playerA, "1"); castSpell(3, PhaseStep.END_COMBAT, playerA, "Cloudshift", "Silvercoat Lion", "Remove a charge counter from"); @@ -186,31 +187,30 @@ public class CloudshiftTest extends CardTestPlayerBase { assertLife(playerA, 20); assertLife(playerB, 18); assertCounterCount("Umezawa's Jitte", CounterType.CHARGE, 1); - assertPermanentCount(playerA,"Silvercoat Lion", 1); - assertGraveyardCount(playerA,"Cloudshift", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertGraveyardCount(playerA, "Cloudshift", 1); Assert.assertTrue(silvercoatLion.getAttachments().isEmpty()); - Assert.assertTrue("Umezawa must not be connected to Silvercoat Lion",Umezawa.getAttachedTo() == null); + Assert.assertTrue("Umezawa must not be connected to Silvercoat Lion", Umezawa.getAttachedTo() == null); assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); - + } - + @Test public void testDontApplyEffectToNewInstanceOfPreviousEquipedPermanentFlickerwisp() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); addCard(Zone.BATTLEFIELD, playerA, "Umezawa's Jitte"); - addCard(Zone.BATTLEFIELD, playerB, "Plains", 3); // Flying // When Flickerwisp enters the battlefield, exile another target permanent. Return that // card to the battlefield under its owner's control at the beginning of the next end step. addCard(Zone.HAND, playerB, "Flickerwisp"); - + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Silvercoat Lion"); - + attack(3, playerA, "Silvercoat Lion"); - + activateAbility(4, PhaseStep.DRAW, playerA, "Remove a charge counter from {this}: Choose one —
&bull Equipped creature gets"); setModeChoice(playerA, "1"); castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Flickerwisp"); @@ -225,19 +225,21 @@ public class CloudshiftTest extends CardTestPlayerBase { assertLife(playerA, 20); assertLife(playerB, 18); assertCounterCount("Umezawa's Jitte", CounterType.CHARGE, 1); - assertPermanentCount(playerA,"Silvercoat Lion", 1); - assertPermanentCount(playerB,"Flickerwisp", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Flickerwisp", 1); Assert.assertTrue(silvercoatLion.getAttachments().isEmpty()); - Assert.assertTrue("Umezawa must not be connected to Silvercoat Lion",Umezawa.getAttachedTo() == null); + Assert.assertTrue("Umezawa must not be connected to Silvercoat Lion", Umezawa.getAttachedTo() == null); assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); - + } + /** - * Test that if I cast cloudshift and it goes to the stack and another instant spell exiles the - * target creature as response, cloudshift does not bring back that creature from exile because it's - * a complete other object (400.7). - * 400.7g allows Cloudshift to bring it back only if it was exiled by cloudshift itself. - * + * Test that if I cast cloudshift and it goes to the stack and another + * instant spell exiles the target creature as response, cloudshift does not + * bring back that creature from exile because it's a complete other object + * (400.7). 400.7g allows Cloudshift to bring it back only if it was exiled + * by cloudshift itself. + * */ @Test public void testReturnIfExiledByAnotherSpell() { @@ -245,88 +247,123 @@ public class CloudshiftTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); addCard(Zone.HAND, playerA, "Cloudshift"); - addCard(Zone.BATTLEFIELD, playerB, "Plains"); // Exile target creature. Its controller gains life equal to its power. addCard(Zone.HAND, playerB, "Swords to Plowshares"); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Silvercoat Lion"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Swords to Plowshares", "Silvercoat Lion", "Cloudshift"); - + setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); assertGraveyardCount(playerA, "Cloudshift", 1); assertGraveyardCount(playerB, "Swords to Plowshares", 1); - + assertLife(playerA, 22); assertLife(playerB, 20); - - assertPermanentCount(playerA,"Silvercoat Lion", 0); + + assertPermanentCount(playerA, "Silvercoat Lion", 0); assertExileCount("Silvercoat Lion", 1); - - } - + + } + /** - * Test that if a creature returns from cloudshift it returns - * under the control of the controller of Cloudshift. + * Test that if a creature returns from cloudshift it returns under the + * control of the controller of Cloudshift. */ @Test public void testReturnOfOwnerIsAnotherPlayer() { - addCard(Zone.BATTLEFIELD, playerA, "Plains",3); - addCard(Zone.BATTLEFIELD, playerA, "Mountain",3); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. addCard(Zone.HAND, playerA, "Act of Treason"); - + addCard(Zone.HAND, playerA, "Cloudshift"); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Act of Treason", "Silvercoat Lion"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Cloudshift", "Silvercoat Lion"); - + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); execute(); assertGraveyardCount(playerA, "Cloudshift", 1); assertGraveyardCount(playerA, "Act of Treason", 1); - - assertPermanentCount(playerA,"Silvercoat Lion", 1); - assertPermanentCount(playerB,"Silvercoat Lion", 0); - - } - - /** - * Test that if a creature returns from Conjurer's Closet it returns - * under the control of the controller of Conjurer's Closet. + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 0); + + } + + /** + * Test that if a creature returns from Conjurer's Closet it returns under + * the control of the controller of Conjurer's Closet. */ @Test public void testReturnOfOwnerIsAnotherPlayerConjurersCloset() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain",3); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. addCard(Zone.HAND, playerA, "Act of Treason"); - + // At the beginning of your end step, you may exile target creature you control, then return that card to the battlefield under your control addCard(Zone.BATTLEFIELD, playerA, "Conjurer's Closet"); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Act of Treason", "Silvercoat Lion"); addTarget(playerA, "Silvercoat Lion"); - + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); execute(); - assertPermanentCount(playerA,"Conjurer's Closet", 1); + assertPermanentCount(playerA, "Conjurer's Closet", 1); assertGraveyardCount(playerA, "Act of Treason", 1); - - assertPermanentCount(playerA,"Silvercoat Lion", 1); - assertPermanentCount(playerB,"Silvercoat Lion", 0); - - } + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 0); + + } + + /** + * During a game i play a Flickerwisp main step who targets something and a + * second Flickerwisp who targets the first . End step : the first + * Flickerwisp return at the battlefield and target a Courser of Kruphix, + * normally she's return on the battlefield at the next end step (here end + * step of my opponent) but she's returned on the battlefield immediatly + * + * 8/1/2008 The exiled card will return to the battlefield at the beginning + * of the end step even if Flickerwisp is no longer on the battlefield. + * 8/1/2008 If the permanent that returns to the battlefield has any + * abilities that trigger at the beginning of the end step, those abilities + * won’t trigger that turn. + */ + @Test + public void testDoubleFlickerwisp() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + // Flying + // When Flickerwisp enters the battlefield, exile another target permanent. + // Return that card to the battlefield under its owner's control at the beginning of the next end step. + addCard(Zone.HAND, playerA, "Flickerwisp", 2); // Creature {1}{W}{W} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Courser of Kruphix"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flickerwisp"); + addTarget(playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Flickerwisp"); + addTarget(playerA, "Flickerwisp"); + addTarget(playerA, "Courser of Kruphix"); + + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Flickerwisp", 2); + assertPermanentCount(playerB, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Courser of Kruphix", 0); + assertExileCount("Courser of Kruphix", 1); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java new file mode 100644 index 00000000000..548c1398445 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class EmergeTest extends CardTestPlayerBase { + + /** + * Wretched Gryff is bugged. I could not use its Emerge ability. Clicking on + * the card did not give me the interaction menu. + */ + @Test + public void testCastWithEmerge() { + + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + // Emerge {5}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost.) + // When you cast Wretched Gryff, draw a card. + // Flying + addCard(Zone.HAND, playerA, "Wretched Gryff"); // Creature + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Gryff with emerge"); + setChoice(playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerA, "Wretched Gryff", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffectsTest.java similarity index 71% rename from Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java rename to Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffectsTest.java index 5b81a833c3c..fbd8bc1b63c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffectsTest.java @@ -31,6 +31,7 @@ import mage.abilities.mana.AnyColorManaAbility; import mage.constants.CardType; import mage.constants.PhaseStep; import mage.constants.Zone; +import mage.counters.CounterType; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -38,7 +39,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ -public class LandTypeChangingEffects extends CardTestPlayerBase { +public class LandTypeChangingEffectsTest extends CardTestPlayerBase { /** * @@ -97,4 +98,37 @@ public class LandTypeChangingEffects extends CardTestPlayerBase { assertAbility(playerB, "Canopy Vista", new AnyColorManaAbility(), true); } + /** + * Currently, a land hit by Aquitect's Will loses all of its other + * abilities, making it a cheap Spreading Seas. It should function like + * Urborg, Tomb of Yawgmoth, not Spreading Seas or Blood Moon. + */ + @Test + public void testLandDoesNotLooseOtherAbilities() { + // Put a flood counter on target land. + // That land is an Island in addition to its other types for as long as it has a flood counter on it. + // If you control a Merfolk, draw a card. + addCard(Zone.HAND, playerA, "Aquitect's Will");// Tribal Sorcery{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + // Forbidding Watchtower enters the battlefield tapped. + // {T}: Add {W} to your mana pool. + // {1}{W}: Forbidding Watchtower becomes a 1/5 white Soldier creature until end of turn. It's still a land. + addCard(Zone.BATTLEFIELD, playerB, "Forbidding Watchtower", 1); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Aquitect's Will", "Forbidding Watchtower"); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}{W}:"); + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Aquitect's Will", 1); + + assertPermanentCount(playerB, "Forbidding Watchtower", 1); + assertCounterCount("Forbidding Watchtower", CounterType.FLOOD, 1); + assertType("Forbidding Watchtower", CardType.LAND, "Island"); + assertPowerToughness(playerB, "Forbidding Watchtower", 1, 5); + + } + } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java new file mode 100644 index 00000000000..ebc2c88a037 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.control; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class GontiLordOfLuxuryEffectTest extends CardTestPlayerBase { + + /** + * Returning to your hand a creature you own but is controlled by an + * opponent doesn't let you replay it. Happened after I Aether Tradewinded + * my Rashmi that an opponent cast with Gonti, Lord of Luxury (the exile + * part could have something to do with this?). Then on my turn I couldn't + * replay it. + */ + @Test + public void testCanBeCastAgain() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 8); + // Deathtouch + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature {2}{B}{B} + + addCard(Zone.LIBRARY, playerB, "Rashmi, Eternities Crafter"); // Creature {2}{G}{U} + skipInitShuffling(); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Forest", 2); + // Return target permanent you control and target permanent you don't control to their owners' hands. + addCard(Zone.HAND, playerB, "Aether Tradewinds", 1); // Intant {2}{U} + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); + addTarget(playerA, playerB); + setChoice(playerA, "Rashmi, Eternities Crafter"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Rashmi, Eternities Crafter"); + + castSpell(1, PhaseStep.END_TURN, playerB, "Aether Tradewinds", "Silvercoat Lion^Rashmi, Eternities Crafter"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Rashmi, Eternities Crafter"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Aether Tradewinds", 1); + assertHandCount(playerB, "Silvercoat Lion", 1); + assertHandCount(playerB, "Rashmi, Eternities Crafter", 0); + assertPermanentCount(playerB, "Rashmi, Eternities Crafter", 1); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CloneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CloneTest.java index b02bbe4e383..536c5136b3d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CloneTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CloneTest.java @@ -7,7 +7,9 @@ import mage.cards.Card; import mage.constants.PhaseStep; import mage.constants.Zone; import mage.filter.FilterCard; +import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.permanent.Permanent; import org.apache.log4j.Logger; import org.junit.Assert; import org.junit.Test; @@ -101,7 +103,6 @@ public class CloneTest extends CardTestPlayerBase { // copy Nightmare test, check that the P/T setting effect ends // if the clone leaves battlefield - @Test public void testCopyNightmare() { addCard(Zone.BATTLEFIELD, playerA, "Island", 5); @@ -141,10 +142,63 @@ public class CloneTest extends CardTestPlayerBase { for (ContinuousEffectsList effectsList : currentGame.getContinuousEffects().allEffectsLists) { Iterator it = effectsList.iterator(); while (it.hasNext()) { - ContinuousEffect effect = (ContinuousEffect) it.next(); - Logger.getLogger(CloneTest.class).debug("- " + effect.toString()); + ContinuousEffect effect = (ContinuousEffect) it.next(); + Logger.getLogger(CloneTest.class).debug("- " + effect.toString()); } } } - + + /** + * When I Clone a creature, and I try to use Vesuvan Doppelganger to my + * cloned creature, The Vesuvan disappears and the creature is not created. + */ + @Test + public void testCloneAndVesuvanDoppelganger() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 5); + // You may have Clone enter the battlefield as a copy of any creature on the battlefield. + addCard(Zone.HAND, playerA, "Clone"); // Creature {3}{U} + // You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield + // except it doesn't copy that creature's color and it gains "At the beginning of your upkeep, + // you may have this creature become a copy of target creature except it doesn't copy that creature's color. + // If you do, this creature gains this ability." + addCard(Zone.HAND, playerA, "Vesuvan Doppelganger"); // Creature {3}{U}{U} + + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + // {2}, {T} , Sacrifice a creature: Draw a card. + addCard(Zone.BATTLEFIELD, playerB, "Phyrexian Vault", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Clone"); + setChoice(playerA, "Silvercoat Lion"); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{2}"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Vesuvan Doppelganger"); + setChoice(playerA, "Silvercoat Lion"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + assertGraveyardCount(playerA, "Vesuvan Doppelganger", 0); + + assertPermanentCount(playerA, "Silvercoat Lion", 2); + assertPermanentCount(playerB, "Silvercoat Lion", 0); + + assertHandCount(playerB, 2); + + boolean whiteLion = false; + boolean blueLion = false; + for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), playerA.getId(), currentGame)) { + if (permanent.getColor(currentGame).isWhite()) { + whiteLion = true; + } + if (permanent.getColor(currentGame).isBlue()) { + blueLion = true; + } + } + + Assert.assertTrue("There should be a white and a blue Silvercoat Lion be on the battlefield", blueLion && whiteLion); + } + } diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java new file mode 100644 index 00000000000..bab2478981d --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java @@ -0,0 +1,136 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class NewCreaturesAreRemovedTest extends CardTestPlayerBase { + + /** + * I was playing with a Tamiyo's Journal in the battlefield. + * + * During my turn I rollbacked. The clue generated by Tamiyo's Journal + * stayed on battlefield and when my turn started again, it re-investigated + * for another one. + * + */ + @Test + public void testTamiyosJournal() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // At the beginning of your upkeep, investigate (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). + // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. + addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); + + // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. + // {T}: Add {W} or {U} to your mana pool. + addCard(Zone.HAND, playerA, "Port Town"); // Land + addCard(Zone.HAND, playerA, "Island"); // Land + + attack(2, playerB, "Pillarfield Ox"); + + attack(3, playerA, "Silvercoat Lion"); + + attack(4, playerB, "Pillarfield Ox"); + + attack(5, playerA, "Silvercoat Lion"); + + attack(6, playerB, "Pillarfield Ox"); + + playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); + attack(7, playerA, "Silvercoat Lion"); + + setStopAt(7, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 14); + assertLife(playerB, 14); + assertPermanentCount(playerA, "Port Town", 1); + assertTapped("Port Town", false); + assertPermanentCount(playerA, "Clue", 3); + + } + + @Test + public void testTamiyosJournalAndRollback() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // At the beginning of your upkeep, investigate (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). + // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. + addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} + + // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. + // {T}: Add {W} or {U} to your mana pool. + addCard(Zone.HAND, playerA, "Port Town"); // Land + addCard(Zone.HAND, playerA, "Island"); // Land + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); + + attack(2, playerB, "Pillarfield Ox"); + + attack(3, playerA, "Silvercoat Lion"); + rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); + + attack(4, playerB, "Pillarfield Ox"); + + attack(5, playerA, "Silvercoat Lion"); + + rollbackTurns(5, PhaseStep.END_TURN, playerA, 0); + + attack(6, playerB, "Pillarfield Ox"); + + playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); + attack(7, playerA, "Silvercoat Lion"); + + rollbackTurns(7, PhaseStep.END_TURN, playerA, 0); + + setStopAt(7, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Port Town", 1); + assertTapped("Port Town", false); + assertPermanentCount(playerA, "Clue", 3); + + assertLife(playerA, 14); + assertLife(playerB, 14); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/StateValuesTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/StateValuesTest.java new file mode 100644 index 00000000000..0eb60c4a695 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/StateValuesTest.java @@ -0,0 +1,94 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class StateValuesTest extends CardTestPlayerBase { + + @Test + public void testDragonWhelpActivatedFourTimes() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); + // Flying + // {R}: Dragon Whelp gets +1/+0 until end of turn. If this ability has been activated four or more times this turn, sacrifice Dragon Whelp at the beginning of the next end step. + addCard(Zone.BATTLEFIELD, playerA, "Dragon Whelp", 1); // 2/3 + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: "); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: "); + attack(1, playerA, "Dragon Whelp"); + + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: "); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: "); + + attack(3, playerA, "Dragon Whelp"); + + rollbackTurns(3, PhaseStep.BEGIN_COMBAT, playerA, 0); + + setStopAt(4, PhaseStep.UPKEEP); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 12); + + assertPermanentCount(playerA, "Dragon Whelp", 1); + assertGraveyardCount(playerA, "Dragon Whelp", 0); + + } + + @Test + public void testBriarbridgePatrol() { + // Whenever Briarbridge Patrol deals damage to one or more creatures, investigate (Put a colorless Clue artifact token onto the battlefield with "2, Sacrifice this artifact: Draw a card."). + // At the beginning of each end step, if you sacrificed three or more Clues this turn, you may put a creature card from your hand onto the battlefield. + addCard(Zone.BATTLEFIELD, playerA, "Briarbridge Patrol", 1); // 3/3 + + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 1); // 2/2 + + attack(1, playerA, "Briarbridge Patrol"); + block(1, playerB, "Pillarfield Ox", "Briarbridge Patrol"); + + attack(3, playerA, "Briarbridge Patrol"); + block(3, playerB, "Pillarfield Ox", "Briarbridge Patrol"); + rollbackTurns(3, PhaseStep.POSTCOMBAT_MAIN, playerA, 0); + + setStopAt(3, PhaseStep.END_TURN); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertPermanentCount(playerA, "Clue", 2); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java new file mode 100644 index 00000000000..ca6c01584d5 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java @@ -0,0 +1,99 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class TransformTest extends CardTestPlayerBase { + + /** + * + */ + @Test + public void testTransform() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + // First strike, lifelink + // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. + // BACK: It That Rides as One + // Creature 4/4 First strike, lifelink + addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 + // When Venerable Monk enters the battlefield, you gain 2 life. + addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); + + attack(3, playerA, "Lone Rider"); + + setStopAt(4, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertLife(playerA, 23); + assertLife(playerB, 19); + + assertPermanentCount(playerA, "Venerable Monk", 1); + assertPermanentCount(playerA, "It That Rides as One", 1); + + } + + @Test + public void testRollbackWithTransform() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + // First strike, lifelink + // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. + // BACK: It That Rides as One + // Creature 4/4 First strike, lifelink + addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 + // When Venerable Monk enters the battlefield, you gain 2 life. + addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); + + attack(3, playerA, "Lone Rider"); + + rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); + setStopAt(4, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertLife(playerA, 23); + assertLife(playerB, 19); + + assertPermanentCount(playerA, "Venerable Monk", 1); + assertPermanentCount(playerA, "It That Rides as One", 1); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/ActivatedAbility.java b/Mage/src/main/java/mage/abilities/ActivatedAbility.java index b8908a85873..be4df4d3665 100644 --- a/Mage/src/main/java/mage/abilities/ActivatedAbility.java +++ b/Mage/src/main/java/mage/abilities/ActivatedAbility.java @@ -24,11 +24,11 @@ * 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; import java.util.UUID; +import mage.abilities.mana.ManaOptions; import mage.game.Game; /** @@ -38,20 +38,30 @@ import mage.game.Game; public interface ActivatedAbility extends Ability { boolean canActivate(UUID playerId, Game game); - + + /** + * Returns the minimal possible cost for what the ability can be activated + * or cast + * + * @param playerId + * @param game + * @return + */ + ManaOptions getMinimumCostToActivate(UUID playerId, Game game); + /** * Creates a fresh copy of this activated ability. - * + * * @return A new copy of this ability. */ @Override - ActivatedAbility copy(); - + ActivatedAbility copy(); + /** - * Set a flag to know, that the ability is only created adn used to check + * Set a flag to know, that the ability is only created adn used to check * what's playbable for the player. */ void setCheckPlayableMode(); - + boolean isCheckPlayableMode(); } diff --git a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java index 13724366e7a..b6c341dcaad 100644 --- a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java @@ -34,6 +34,7 @@ import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.PhyrexianManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.Effects; +import mage.abilities.mana.ManaOptions; import mage.cards.Card; import mage.constants.AbilityType; import mage.constants.AsThoughEffectType; @@ -199,6 +200,11 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa return false; } + @Override + public ManaOptions getMinimumCostToActivate(UUID playerId, Game game) { + return getManaCostsToPay().getOptions(); + } + protected boolean controlsAbility(UUID playerId, Game game) { if (this.controllerId != null && this.controllerId.equals(playerId)) { return true; diff --git a/Mage/src/main/java/mage/abilities/ActivationInfo.java b/Mage/src/main/java/mage/abilities/ActivationInfo.java index 84d6b1b8db0..bf322f03af4 100644 --- a/Mage/src/main/java/mage/abilities/ActivationInfo.java +++ b/Mage/src/main/java/mage/abilities/ActivationInfo.java @@ -40,8 +40,9 @@ import mage.game.Game; */ public class ActivationInfo { - protected int turnNum; - protected int activationCounter; + protected int turnNum = 0; + protected int activationCounter = 0; + protected String key; public static ActivationInfo getInstance(Game game, UUID sourceId) { return ActivationInfo.getInstance(game, sourceId, game.getState().getZoneChangeCounter(sourceId)); @@ -49,17 +50,25 @@ public class ActivationInfo { public static ActivationInfo getInstance(Game game, UUID sourceId, int zoneChangeCounter) { String key = "ActivationInfo" + sourceId.toString() + zoneChangeCounter; - ActivationInfo activationInfo = (ActivationInfo) game.getState().getValue(key); - if (activationInfo == null) { - activationInfo = new ActivationInfo(game); - game.getState().setValue(key, activationInfo); + Integer activations = (Integer) game.getState().getValue(key); + ActivationInfo activationInfo; + if (activations != null) { + Integer turnNum = (Integer) game.getState().getValue(key + "T"); + activationInfo = new ActivationInfo(game, turnNum, activations); + } else { + activationInfo = new ActivationInfo(game, game.getTurnNum(), 0); } + activationInfo.setKey(key); return activationInfo; } - protected ActivationInfo(Game game) { - this.turnNum = game.getTurnNum(); - this.activationCounter = 0; + public void setKey(String key) { + this.key = key; + } + + protected ActivationInfo(Game game, int turnNum, int activationCounter) { + this.turnNum = turnNum; + this.activationCounter = activationCounter; } public void addActivation(Game game) { @@ -69,6 +78,8 @@ public class ActivationInfo { } else { activationCounter++; } + game.getState().setValue(key, activationCounter); + game.getState().setValue(key + "T", turnNum); } public int getActivationCounter() { diff --git a/Mage/src/main/java/mage/abilities/DelayedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/DelayedTriggeredAbility.java index 15517e64715..a4bef097ef9 100644 --- a/Mage/src/main/java/mage/abilities/DelayedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/DelayedTriggeredAbility.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,12 +20,11 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities; import mage.abilities.effects.Effect; @@ -49,6 +48,7 @@ public abstract class DelayedTriggeredAbility extends TriggeredAbilityImpl { public DelayedTriggeredAbility(Effect effect, Duration duration) { this(effect, duration, true); } + public DelayedTriggeredAbility(Effect effect, Duration duration, Boolean triggerOnlyOnce) { this(effect, duration, triggerOnlyOnce, false); } @@ -75,13 +75,25 @@ public abstract class DelayedTriggeredAbility extends TriggeredAbilityImpl { public Boolean getTriggerOnlyOnce() { return triggerOnlyOnce; } - + + /** + * This method is called as the ability is added to the game (not as the + * ability triggers later) + * + * @param game + */ + public void initOnAdding(Game game) { + + } + public void init(Game game) { - for (Effect effect: this.getEffects()) { + for (Effect effect : this.getEffects()) { effect.getTargetPointer().init(game, this); } - }; - + } + + ; + public boolean isInactive(Game game) { return false; } diff --git a/Mage/src/main/java/mage/abilities/common/DealsDamageToOneOrMoreCreaturesTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealsDamageToOneOrMoreCreaturesTriggeredAbility.java index ef1213967c0..3b410899d99 100644 --- a/Mage/src/main/java/mage/abilities/common/DealsDamageToOneOrMoreCreaturesTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealsDamageToOneOrMoreCreaturesTriggeredAbility.java @@ -9,7 +9,6 @@ import mage.abilities.effects.Effect; import mage.constants.PhaseStep; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.turn.Step; /** * @@ -30,10 +29,10 @@ public class DealsDamageToOneOrMoreCreaturesTriggeredAbility extends DealsDamage if (super.checkTrigger(event, game)) { // check that combat damage does only once trigger also if multiple creatures were damaged because they block or were blocked by source if (game.getTurn().getStepType().equals(PhaseStep.COMBAT_DAMAGE) || game.getTurn().getStepType().equals(PhaseStep.FIRST_COMBAT_DAMAGE)) { - Step step = (Step) game.getState().getValue("damageStep" + getOriginalId()); - if (!game.getStep().equals(step)) { + Integer stepHash = (Integer) game.getState().getValue("damageStep" + getOriginalId()); + if (stepHash == null || game.getStep().hashCode() != stepHash) { // this ability did not trigger during this damage step - game.getState().setValue("damageStep" + getOriginalId(), game.getStep()); + game.getState().setValue("damageStep" + getOriginalId(), game.getStep().hashCode()); return true; } } else { diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerGotLifeCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerGotLifeCount.java index 4884eb2c457..37bf1032449 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerGotLifeCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ControllerGotLifeCount.java @@ -59,7 +59,7 @@ public class ControllerGotLifeCount implements DynamicValue, MageSingleton { } public int calculate(Game game, UUID controllerId) { - PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get("PlayerGainedLifeWatcher"); + PlayerGainedLifeWatcher watcher = (PlayerGainedLifeWatcher) game.getState().getWatchers().get(PlayerGainedLifeWatcher.class.getName()); if (watcher != null) { return watcher.getLiveGained(controllerId); } diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java b/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java index 8beb47a99a2..03008ae039d 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousRuleModifyingEffectImpl.java @@ -47,7 +47,7 @@ public abstract class ContinuousRuleModifyingEffectImpl extends ContinuousEffect // 613.10 // Some continuous effects affect game rules rather than objects. For example, effects may modify - // a player’s maximum hand size, or say that a creature must attack this turn if able. These effects + // a player's maximum hand size, or say that a creature must attack this turn if able. These effects // are applied after all other continuous effects have been applied. Continuous effects that affect // the costs of spells or abilities are applied according to the order specified in rule 601.2e. // All other such effects are applied in timestamp order. See also the rules for timestamp order diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java index 7f6ad973d03..22ccfa003e4 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java @@ -51,6 +51,7 @@ import mage.game.permanent.Permanent; import mage.players.Player; /** + * http://mtgsalvation.gamepedia.com/Land_changers * * @author LevelX2 */ @@ -58,6 +59,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { protected boolean chooseLandType; protected ArrayList landTypes = new ArrayList(); + protected ArrayList landTypesToAdd = new ArrayList(); protected boolean loseOther; // loses all other abilities, card types, and creature types public BecomesBasicLandTargetEffect(Duration duration) { @@ -99,6 +101,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { public BecomesBasicLandTargetEffect(final BecomesBasicLandTargetEffect effect) { super(effect); this.landTypes.addAll(effect.landTypes); + this.landTypesToAdd.addAll(effect.landTypesToAdd); this.chooseLandType = effect.chooseLandType; this.loseOther = effect.loseOther; } @@ -128,17 +131,8 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { } } - if (!loseOther) { - for (UUID targetPermanent : targetPointer.getTargets(game, source)) { - Permanent land = game.getPermanent(targetPermanent); - if (land != null) { - for (String type : land.getSubtype(game)) { - if (!landTypes.contains(type)) { - landTypes.add(type); - } - } - } - } + if (loseOther) { + landTypesToAdd.addAll(landTypes); } } @@ -153,15 +147,25 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { if (!land.getCardType().contains(CardType.LAND)) { land.getCardType().add(CardType.LAND); } - // 305.7 Note that this doesn't remove any abilities that were granted to the land by other effects - // So the ability removing has to be done before Layer 6 - land.removeAllAbilities(source.getSourceId(), game); - // 305.7 - land.getSubtype(game).removeAll(CardRepository.instance.getLandTypes()); - land.getSubtype(game).addAll(landTypes); + if (loseOther) { + // 305.7 Note that this doesn't remove any abilities that were granted to the land by other effects + // So the ability removing has to be done before Layer 6 + land.removeAllAbilities(source.getSourceId(), game); + // 305.7 + land.getSubtype(game).removeAll(CardRepository.instance.getLandTypes()); + land.getSubtype(game).addAll(landTypes); + } else { + landTypesToAdd.clear(); + for (String subtype : landTypes) { + if (!land.getSubtype(game).contains(subtype)) { + land.getSubtype(game).add(subtype); + landTypesToAdd.add(subtype); + } + } + } break; case AbilityAddingRemovingEffects_6: - for (String landType : landTypes) { + for (String landType : landTypesToAdd) { switch (landType) { case "Swamp": land.addAbility(new BlackManaAbility(), source.getSourceId(), game); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java new file mode 100644 index 00000000000..2e68e838130 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/ruleModifying/TargetsHaveToTargetPermanentIfAbleEffect.java @@ -0,0 +1,103 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.ruleModifying; + +import java.util.List; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; + +/** + * 6/8/2016 If a spell or ability’s targets are changed, or if a copy of a spell + * or ability is put onto the stack and has new targets chosen, it doesn’t have + * to target a Flagbearer. + * + * @author LevelX2 + */ +public class TargetsHaveToTargetPermanentIfAbleEffect extends ContinuousRuleModifyingEffectImpl { + + private final FilterPermanent filter; + + public TargetsHaveToTargetPermanentIfAbleEffect(FilterPermanent filter) { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + this.filter = filter; + staticText = "While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least " + this.filter.getMessage() + " on the battlefield if able"; + + } + + public TargetsHaveToTargetPermanentIfAbleEffect(final TargetsHaveToTargetPermanentIfAbleEffect effect) { + super(effect); + this.filter = effect.filter; + } + + @Override + public TargetsHaveToTargetPermanentIfAbleEffect copy() { + return new TargetsHaveToTargetPermanentIfAbleEffect(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGETS_VALID; + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (mageObject != null) { + return "You must choose at least " + this.filter.getMessage() + " on the battlefield as target if able (" + mageObject.getIdName() + ")."; + } + return null; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Player controller = game.getPlayer(source.getControllerId()); + Player targetingPlayer = game.getPlayer(event.getPlayerId()); + if (controller != null + && targetingPlayer.isHuman() // TODO: This target handling does only work for non AI players so AI logic + && controller.hasOpponent(event.getPlayerId(), game)) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject.isCopy()) { + return false; + } + Ability ability = (Ability) getValue("targetAbility"); + if (ability != null) { + // Get all the allowed permanents on the battlefield in range of the abilities controller + List allowedPermanents = game.getBattlefield().getActivePermanents(filter, event.getPlayerId(), event.getSourceId(), game); + if (!allowedPermanents.isEmpty()) { + boolean canTargetAllowedPermanent = false; + for (UUID modeId : ability.getModes().getSelectedModes()) { + ability.getModes().setActiveMode(modeId); + for (Target target : ability.getTargets()) { + // Check if already targeted + for (Permanent allowedPermanent : allowedPermanents) { + if (target.getTargets().contains(allowedPermanent.getId())) { + return false; + } + if (target.canTarget(allowedPermanent.getId(), source, game)) { + canTargetAllowedPermanent = true; + } + } + } + } + return canTargetAllowedPermanent; + } + } + } + return false; + + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java index 497a29f2451..ece3e7887a5 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java @@ -93,7 +93,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect // cards in Graveyard int cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getGraveyard().count(filter, game)); if (cardsCount > 0) { - filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getLogName()); + filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); TargetCard target = new TargetCard((graveyardExileOptional ? 0 : cardsCount), cardsCount, Zone.GRAVEYARD, filter); if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); @@ -102,7 +102,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect // cards in Hand cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getHand().count(filter, game)); - filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getLogName()); + filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); TargetCard target = new TargetCard(0, cardsCount, Zone.HAND, filter); if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); diff --git a/Mage/src/main/java/mage/abilities/keyword/DelveAbility.java b/Mage/src/main/java/mage/abilities/keyword/DelveAbility.java index ebfc146c1ec..fa4ffdf3db5 100644 --- a/Mage/src/main/java/mage/abilities/keyword/DelveAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/DelveAbility.java @@ -37,6 +37,8 @@ import mage.abilities.costs.mana.AlternateManaPaymentAbility; import mage.abilities.costs.mana.ManaCost; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.CardsImpl; import mage.constants.AbilityType; import mage.constants.ManaType; import mage.constants.Outcome; @@ -56,17 +58,17 @@ import mage.util.CardUtil; * applies only after the total cost of the spell with delve is determined. * 702.65b Multiple instances of delve on the same spell are redundant. * - * The rules for delve have changed slightly since it was last in an - * expansion. Previously, delve reduced the cost to cast a spell. Under the - * current rules, you exile cards from your graveyard at the same time you pay - * the spell’s cost. Exiling a card this way is simply another way to pay that - * cost. * Delve doesn't change a spell’s mana cost or converted mana cost. For - * example, Dead Drop’s converted mana cost is 10 even if you exiled three cards - * to cast it. * You can’t exile cards to pay for the colored mana requirements - * of a spell with delve. * You can’t exile more cards than the generic mana - * requirement of a spell with delve. For example, you can’t exile more than - * nine cards from your graveyard to cast Dead Drop. * Because delve isn't an - * alternative cost, it can be used in conjunction with alternative costs. + * The rules for delve have changed slightly since it was last in an expansion. + * Previously, delve reduced the cost to cast a spell. Under the current rules, + * you exile cards from your graveyard at the same time you pay the spell’s + * cost. Exiling a card this way is simply another way to pay that cost. * Delve + * doesn't change a spell’s mana cost or converted mana cost. For example, Dead + * Drop’s converted mana cost is 10 even if you exiled three cards to cast it. * + * You can’t exile cards to pay for the colored mana requirements of a spell + * with delve. * You can’t exile more cards than the generic mana requirement of + * a spell with delve. For example, you can’t exile more than nine cards from + * your graveyard to cast Dead Drop. * Because delve isn't an alternative cost, + * it can be used in conjunction with alternative costs. * * @author LevelX2 * @@ -155,18 +157,23 @@ class DelveEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { ExileFromGraveCost exileFromGraveCost = (ExileFromGraveCost) source.getCosts().get(0); + List exiledCards = exileFromGraveCost.getExiledCards(); if (exiledCards.size() > 0) { + Cards toDelve = new CardsImpl(); + for (Card card : exiledCards) { + toDelve.add(card); + } ManaPool manaPool = controller.getManaPool(); - manaPool.addMana(new Mana(0, 0, 0, 0, 0, 0, 0, exiledCards.size()), game, source); + manaPool.addMana(new Mana(0, 0, 0, 0, 0, 0, 0, toDelve.size()), game, source); manaPool.unlockManaType(ManaType.COLORLESS); String keyString = CardUtil.getCardZoneString("delvedCards", source.getSourceId(), game); @SuppressWarnings("unchecked") - List delvedCards = (List) game.getState().getValue(keyString); + Cards delvedCards = (Cards) game.getState().getValue(keyString); if (delvedCards == null) { - game.getState().setValue(keyString, exiledCards); + game.getState().setValue(keyString, toDelve); } else { - delvedCards.addAll(exiledCards); + delvedCards.addAll(toDelve); } } return true; diff --git a/Mage/src/main/java/mage/abilities/keyword/EmergeAbility.java b/Mage/src/main/java/mage/abilities/keyword/EmergeAbility.java index 15fd4dcfa70..ce1c24afdd2 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EmergeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EmergeAbility.java @@ -28,10 +28,12 @@ package mage.abilities.keyword; import java.util.UUID; +import mage.Mana; import mage.abilities.SpellAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.mana.ManaOptions; import mage.cards.Card; import mage.constants.Outcome; import mage.constants.SpellAbilityType; @@ -84,6 +86,26 @@ public class EmergeAbility extends SpellAbility { return false; } + @Override + public ManaOptions getMinimumCostToActivate(UUID playerId, Game game) { + int maxCMC = 0; + for (Permanent creature : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), playerId, this.getSourceId(), game)) { + int cmc = creature.getConvertedManaCost(); + if (cmc > maxCMC) { + maxCMC = cmc; + } + } + ManaOptions manaOptions = super.getMinimumCostToActivate(playerId, game); + for (Mana mana : manaOptions) { + if (mana.getGeneric() > maxCMC) { + mana.setGeneric(mana.getGeneric() - maxCMC); + } else { + mana.setGeneric(0); + } + } + return manaOptions; + } + @Override public boolean activate(Game game, boolean noMana) { Player controller = game.getPlayer(this.getControllerId()); diff --git a/Mage/src/main/java/mage/abilities/keyword/ProvokeAbility.java b/Mage/src/main/java/mage/abilities/keyword/ProvokeAbility.java index 9c63832c61c..746984def64 100644 --- a/Mage/src/main/java/mage/abilities/keyword/ProvokeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/ProvokeAbility.java @@ -53,7 +53,11 @@ import mage.target.common.TargetCreaturePermanent; public class ProvokeAbility extends AttacksTriggeredAbility { public ProvokeAbility() { - super(new UntapTargetEffect(), true, "Provoke (Whenever this attacks, you may have target creature defending player controls untap and block it if able.)"); + this("Provoke (Whenever this attacks, you may have target creature defending player controls untap and block it if able.)"); + } + + public ProvokeAbility(String text) { + super(new UntapTargetEffect(), true, text); this.addEffect(new ProvokeRequirementEffect()); } diff --git a/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java index a73fda38bba..46e22d57fa8 100644 --- a/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java @@ -40,7 +40,7 @@ public class RepairAbility extends DiesTriggeredAbility { addSubAbility(new RepairCastFromGraveyardTriggeredAbility()); ruleText = "Repair " + count + " (When this creature dies, put " + count - + " repair counters on it. At the beggining of your upkeep, remove a repair counter. " + + " repair counters on it. At the beginning of your upkeep, remove a repair counter. " + "Whenever the last is removed, you may cast it from graveyard until end of turn.)"; } diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index f69dabcdb6e..4ea414f18bd 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -31,6 +31,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.EnumMap; +import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import mage.cards.repository.CardCriteria; @@ -126,17 +127,15 @@ public abstract class ExpansionSet implements Serializable { protected int numBoosterDoubleFaced; // -1 = include normally 0 = exclude 1-n = include explicit protected int ratioBoosterMythic; - protected String packageName; - protected int maxCardNumberInBooster; // used to ommit cards with collector numbers beyond the regular cards in a set for boosters + protected int maxCardNumberInBooster; // used to omit cards with collector numbers beyond the regular cards in a set for boosters protected final EnumMap> savedCards; - public ExpansionSet(String name, String code, String packageName, Date releaseDate, SetType setType) { + public ExpansionSet(String name, String code, Date releaseDate, SetType setType) { this.name = name; this.code = code; this.releaseDate = releaseDate; this.setType = setType; - this.packageName = packageName; this.maxCardNumberInBooster = Integer.MAX_VALUE; savedCards = new EnumMap<>(Rarity.class); } @@ -161,10 +160,6 @@ public abstract class ExpansionSet implements Serializable { return setType; } - public String getPackageName() { - return packageName; - } - public String getBlockName() { return blockName; } @@ -298,6 +293,11 @@ public abstract class ExpansionSet implements Serializable { } } + public static Date buildDate(int year, int month, int day) { + // The month starts with 0 = jan ... dec = 11 + return new GregorianCalendar(year, month - 1, day).getTime(); + } + /** * Can be overwritten if sometimes special cards will be generated instead * of common slots diff --git a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java index e2b454155e1..39252c25b6c 100644 --- a/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java +++ b/Mage/src/main/java/mage/cards/decks/importer/DckDeckImporter.java @@ -43,7 +43,7 @@ import mage.cards.repository.CardRepository; */ public class DckDeckImporter extends DeckImporter { - private static final Pattern pattern = Pattern.compile("(SB:)?\\s*(\\d*)\\s*\\[([^]:]+):([^]:]+)\\].*"); + private static final Pattern pattern = Pattern.compile("(SB:)?\\s*(\\d*)\\s*\\[([^]:]+):([^]:]+)\\]\\s*(.*)\\s*$"); private static final Pattern layoutPattern = Pattern.compile("LAYOUT (\\w+):\\((\\d+),(\\d+)\\)([^|]+)\\|(.*)$"); @@ -70,6 +70,17 @@ public class DckDeckImporter extends DeckImporter { DeckCardInfo deckCardInfo = null; CardInfo cardInfo = CardRepository.instance.findCard(setCode, cardNum); + if (cardInfo == null) { + // Try alternate based on name + String cardName = m.group(5); + if (cardName != null && cardName.length() > 0) { + cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(cardName, false); + sbMessage.append("Could not find card '" + cardName + "' in set " + setCode + " of number " + cardNum + ".\n"); + if (cardInfo != null) { + sbMessage.append("Made substitution of " + cardInfo.getCardNumber() + ", " + cardInfo.getCard().getExpansionSetCode() + " instead.\n"); + } + } + } if (cardInfo != null) { deckCardInfo = new DeckCardInfo(cardInfo.getName(), cardInfo.getCardNumber(), cardInfo.getSetCode()); } diff --git a/Mage/src/main/java/mage/cards/repository/CardScanner.java b/Mage/src/main/java/mage/cards/repository/CardScanner.java index fe8930566a8..f70bc4ef31c 100644 --- a/Mage/src/main/java/mage/cards/repository/CardScanner.java +++ b/Mage/src/main/java/mage/cards/repository/CardScanner.java @@ -29,12 +29,9 @@ package mage.cards.repository; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import mage.cards.*; -import mage.util.ClassScanner; import org.apache.log4j.Logger; /** @@ -54,13 +51,8 @@ public class CardScanner { scanned = true; List cardsToAdd = new ArrayList<>(); - Map> packageMap = new HashMap<>(); for (ExpansionSet set : Sets.getInstance().values()) { - ClassLoader cl = set.getClass().getClassLoader(); - if(!packageMap.containsKey(cl)) packageMap.put(cl, new ArrayList()); - List packages = packageMap.get(cl); - packages.add(set.getPackageName()); ExpansionRepository.instance.add(new ExpansionInfo(set)); } ExpansionRepository.instance.setContentVersion(ExpansionRepository.instance.getContentVersionConstant()); diff --git a/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java b/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java index 2afeb50ceee..b535e380ff1 100644 --- a/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java +++ b/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java @@ -53,6 +53,7 @@ public class RepositoryUtil { } public static long getDatabaseVersion(ConnectionSource connectionSource, String entityName) throws SQLException { + TableUtils.createTableIfNotExists(connectionSource, DatabaseVersion.class); Dao dbVersionDao = DaoManager.createDao(connectionSource, DatabaseVersion.class); QueryBuilder queryBuilder = dbVersionDao.queryBuilder(); @@ -61,9 +62,8 @@ public class RepositoryUtil { if (dbVersions.isEmpty()) { return 0; } else { - return dbVersions.get(0). getVersion(); + return dbVersions.get(0).getVersion(); } } - } diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 6a1d00ac0d1..74e93934b45 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -6,6 +6,7 @@ package mage.filter; import mage.constants.CardType; +import mage.filter.common.FilterArtifactCard; import mage.filter.common.FilterArtifactCreaturePermanent; import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.common.FilterControlledPermanent; @@ -18,11 +19,12 @@ import mage.filter.predicate.mageobject.CardTypePredicate; */ public class StaticFilters { + public static final FilterArtifactCreaturePermanent FILTER_ARTIFACT_CREATURE_PERMANENT = new FilterArtifactCreaturePermanent(); public static final FilterPermanent FILTER_PERMANENT_ARTIFACT_OR_CREATURE = new FilterPermanent("artifact or creature"); public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT_OR_CREATURE = new FilterControlledPermanent("artifact or creature you control"); public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT = new FilterControlledArtifactPermanent(); + public static final FilterArtifactCard FILTER_CARD_ARTIFACT = new FilterArtifactCard(); public static final FilterCard FILTER_CARD_ARTIFACT_OR_CREATURE = new FilterCard("artifact or creature card"); - public static final FilterArtifactCreaturePermanent FILTER_ARTIFACT_CREATURE_PERMANENT = new FilterArtifactCreaturePermanent(); static { FILTER_PERMANENT_ARTIFACT_OR_CREATURE.add(Predicates.or( diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 76aa1802bb7..9fd14a95530 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -159,7 +159,6 @@ public abstract class GameImpl implements Game, Serializable { FILTER_LEGENDARY.add(new SupertypePredicate("Legendary")); } - private transient Object customData; protected boolean simulation = false; @@ -1520,10 +1519,11 @@ public abstract class GameImpl implements Game, Serializable { // return addDelayedTriggeredAbility(delayedAbility); DelayedTriggeredAbility newAbility = delayedAbility.copy(); newAbility.newId(); + newAbility.initOnAdding(this); // ability.init is called as the ability triggeres not now. // If a FixedTarget pointer is already set from the effect setting up this delayed ability // it has to be already initialized so it won't be overwitten as the ability triggers - state.addDelayedTriggeredAbility(newAbility); + getState().addDelayedTriggeredAbility(newAbility); return newAbility.getId(); } @@ -1532,10 +1532,11 @@ public abstract class GameImpl implements Game, Serializable { public UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility) { DelayedTriggeredAbility newAbility = delayedAbility.copy(); newAbility.newId(); + newAbility.initOnAdding(this); // ability.init is called as the ability triggeres not now. // If a FixedTarget pointer is already set from the effect setting up this delayed ability // it has to be already initialized so it won't be overwitten as the ability triggers - state.addDelayedTriggeredAbility(newAbility); + getState().addDelayedTriggeredAbility(newAbility); return newAbility.getId(); } diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java index eb553340685..661b206e934 100644 --- a/Mage/src/main/java/mage/game/GameState.java +++ b/Mage/src/main/java/mage/game/GameState.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; @@ -182,7 +183,11 @@ public class GameState implements Serializable, Copyable { this.turnMods = state.turnMods.copy(); this.watchers = state.watchers.copy(); for (Map.Entry entry : state.values.entrySet()) { - this.values.put(entry.getKey(), entry.getValue()); + if (entry.getValue() instanceof HashSet) { + this.values.put(entry.getKey(), (HashSet) ((HashSet) entry.getValue()).clone()); + } else { + this.values.put(entry.getKey(), entry.getValue()); + } } this.zones.putAll(state.zones); this.simultaneousEvents.addAll(state.simultaneousEvents); @@ -893,8 +898,10 @@ public class GameState implements Serializable, Copyable { /** * Best only use immutable objects, otherwise the states/values of the - * object may be changed by AI simulation, because the Value objects are not - * copied as the state class is copied. + * object may be changed by AI simulation or rollbacks, because the Value + * objects are not copied as the state class is copied. Mutable supported: + * HashSet with immutable entries (e.g. HashSet< UUID > or HashSet< String + * >) * * @param valueId * @param value diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index f3313ad4fd8..c7f2e94a9ff 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -171,6 +171,13 @@ public class GameEvent implements Serializable { MANA_PAYED, LOSES, LOST, WINS, TARGET, TARGETED, + /* TARGETS_VALID + targetId id of the spell or id of stack ability the targets were set to + sourceId = targetId + playerId controller of the spell or stack ability + amount not used for this event + */ + TARGETS_VALID, /* COUNTER targetId id of the spell or id of stack ability sourceId sourceId of the ability countering the spell or stack ability diff --git a/Mage/src/main/java/mage/game/permanent/token/OozeToken.java b/Mage/src/main/java/mage/game/permanent/token/OozeToken.java index 60e7d26ee02..319f00dc585 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OozeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OozeToken.java @@ -4,13 +4,14 @@ import mage.MageInt; import mage.constants.CardType; public class OozeToken extends Token { - public OozeToken(MageInt power, MageInt toughness) { + + public OozeToken(int power, int toughness) { super("Ooze", power + "/" + toughness + " green ooze creature token"); cardType.add(CardType.CREATURE); color.setGreen(true); subtype.add("Ooze"); - power = new MageInt(0); - toughness = new MageInt(0); + this.power = new MageInt(power); + this.toughness = new MageInt(toughness); } public OozeToken() { diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index ca78a0ae01d..fb4d75302e8 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -2489,7 +2489,7 @@ public abstract class PlayerImpl implements Player, Serializable { canBeCastRegularly = false; } if (canBeCastRegularly) { - ManaOptions abilityOptions = copy.getManaCostsToPay().getOptions(); + ManaOptions abilityOptions = copy.getMinimumCostToActivate(playerId, game); if (abilityOptions.isEmpty()) { return true; } else { @@ -2694,6 +2694,7 @@ public abstract class PlayerImpl implements Player, Serializable { playable.add(ability); } } + ability.setControllerId(card.getOwnerId()); } } } diff --git a/Mage/src/main/java/mage/target/Targets.java b/Mage/src/main/java/mage/target/Targets.java index fd4715e4499..f0565aa76f5 100644 --- a/Mage/src/main/java/mage/target/Targets.java +++ b/Mage/src/main/java/mage/target/Targets.java @@ -33,6 +33,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.constants.Outcome; import mage.game.Game; +import mage.game.events.GameEvent; /** * @@ -94,6 +95,7 @@ public class Targets extends ArrayList { if (!canChoose(source.getSourceId(), playerId, game)) { return false; } + int state = game.bookmarkState(); while (!isChosen()) { Target target = this.getUnchosen().get(0); UUID targetController = playerId; @@ -106,6 +108,12 @@ public class Targets extends ArrayList { if (!target.chooseTarget(outcome, targetController, source, game)) { return false; } + // Check if there are some rules for targets are violated, if so reset the targets and start again + if (this.getUnchosen().isEmpty() + && game.replaceEvent(new GameEvent(GameEvent.EventType.TARGETS_VALID, source.getSourceId(), source.getSourceId(), source.getControllerId()), source)) { + game.restoreState(state, "Targets"); + clearChosen(); + } } } return true; diff --git a/Mage/src/main/java/mage/target/targetpointer/FixedTarget.java b/Mage/src/main/java/mage/target/targetpointer/FixedTarget.java index 5c8166b9679..9c9a755bcf9 100644 --- a/Mage/src/main/java/mage/target/targetpointer/FixedTarget.java +++ b/Mage/src/main/java/mage/target/targetpointer/FixedTarget.java @@ -41,6 +41,18 @@ public class FixedTarget implements TargetPointer { this.zoneChangeCounter = zoneChangeCounter; } + /** + * Use this to set the target to exactly the zone the target is currently in + * + * @param targetId + * @param game + */ + public FixedTarget(UUID targetId, Game game) { + this.targetId = targetId; + this.initialized = true; + this.zoneChangeCounter = game.getState().getZoneChangeCounter(targetId); + } + public FixedTarget(final FixedTarget fixedTarget) { this.targetId = fixedTarget.targetId; this.zoneChangeCounter = fixedTarget.zoneChangeCounter; diff --git a/Mage/src/main/java/mage/watchers/common/PlayerGainedLifeWatcher.java b/Mage/src/main/java/mage/watchers/common/PlayerGainedLifeWatcher.java index 95e6fea3548..cc26a60ab89 100644 --- a/Mage/src/main/java/mage/watchers/common/PlayerGainedLifeWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/PlayerGainedLifeWatcher.java @@ -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.watchers.common; import java.util.HashMap; @@ -37,8 +36,6 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.watchers.Watcher; - - /** * Counts amount of life gained during the current turn by players. * @@ -47,11 +44,10 @@ import mage.watchers.Watcher; */ public class PlayerGainedLifeWatcher extends Watcher { - private Map amountOfLifeGainedThisTurn = new HashMap(); - + private final Map amountOfLifeGainedThisTurn = new HashMap<>(); public PlayerGainedLifeWatcher() { - super("PlayerGainedLifeWatcher", WatcherScope.GAME); + super(PlayerGainedLifeWatcher.class.getName(), WatcherScope.GAME); } public PlayerGainedLifeWatcher(final PlayerGainedLifeWatcher watcher) { @@ -71,9 +67,9 @@ public class PlayerGainedLifeWatcher extends Watcher { if (playerId != null) { Integer amount = amountOfLifeGainedThisTurn.get(playerId); if (amount == null) { - amount = Integer.valueOf(event.getAmount()); + amount = event.getAmount(); } else { - amount = Integer.valueOf(amount + event.getAmount()); + amount = amount + event.getAmount(); } amountOfLifeGainedThisTurn.put(playerId, amount); } @@ -83,7 +79,7 @@ public class PlayerGainedLifeWatcher extends Watcher { public int getLiveGained(UUID playerId) { Integer amount = amountOfLifeGainedThisTurn.get(playerId); if (amount != null) { - return amount.intValue(); + return amount; } return 0; } diff --git a/Utils/cardClass.tmpl b/Utils/cardClass.tmpl index 52636ac0065..c77350bfa2c 100644 --- a/Utils/cardClass.tmpl +++ b/Utils/cardClass.tmpl @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ -package mage.sets.[=$set=]; +package mage.cards.[=$cardNameFirstLetter=]; import java.util.UUID;[= if ($power || $power eq 0) { @@ -33,8 +33,8 @@ if ($power || $power eq 0) { } =][=$abilitiesImports=] import mage.cards.CardImpl; +import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Rarity; /** * @@ -42,9 +42,9 @@ import mage.constants.Rarity; */ public class [=$className=] extends CardImpl { - public [=$className=](UUID ownerId) { - super(ownerId, [=$cardNumber=], "[=$name=]", Rarity.[=$rarity=], new CardType[]{[=$type=]}, "[=$manaCost=]"); - this.expansionSetCode = "[=$expansionSetCode=]";[=$subType=][=$colors=][= + public [=$className=](UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{[=$type=]}, "[=$manaCost=]"); + [=$subType=][=$colors=][= if ($power || $power eq 0) { $OUT .= "\n this.power = new MageInt($power);"; $OUT .= "\n this.toughness = new MageInt($toughness);"; diff --git a/Utils/gen-card.pl b/Utils/gen-card.pl index f104a4302d2..bcd021e7a63 100755 --- a/Utils/gen-card.pl +++ b/Utils/gen-card.pl @@ -12,7 +12,6 @@ my $setsFile = 'mtg-sets-data.txt'; my $knownSetsFile = 'known-sets.txt'; my $keywordsFile = 'keywords.txt'; - my %cards; my %sets; my %knownSets; @@ -21,7 +20,7 @@ my %keywords; sub toCamelCase { my $string = $_[0]; $string =~ s/\b([\w']+)\b/ucfirst($1)/ge; - $string =~ s/[-,\s\']//g; + $string =~ s/[-,\s\':]//g; $string; } @@ -102,154 +101,146 @@ if (!exists $cards{$cardName}) { } # Check if card is already implemented -foreach my $setName (keys %{$cards{$cardName}}) { - if (exists $knownSets{$setName}) { - my $fileName = "../Mage.Sets/src/mage/sets/" . $knownSets{$setName} . "/" . toCamelCase($cardName) . ".java"; - print "gvim $fileName\n"; - my $fileName2 = $fileName; - $fileName2 =~ s/\//\\/img; - print "gvim $fileName2\n"; - if(-e $fileName) { - die "$cardName is already implemented (set found in: $setName).\n"; - } - } +my $fileName = "../Mage.Sets/src/mage/cards/".substr($cardName, 0, 1)."/".toCamelCase($cardName).".java"; +if(-e $fileName) { + die "$cardName is already implemented.\n"; } - -# Generate the cards -my $simpleOnly = $ARGV[1] || 'false'; -my $template = Text::Template->new(TYPE => 'FILE', SOURCE => 'cardClass.tmpl', DELIMITERS => [ '[=', '=]' ]); -my $templateExtended = Text::Template->new(TYPE => 'FILE', SOURCE => 'cardExtendedClass.tmpl', DELIMITERS => [ '[=', '=]' ]); + +# Generate lines to corresponding sets my %vars; - -$vars{'author'} = $author; -$vars{'name'} = $cardName; $vars{'className'} = toCamelCase($cardName); +$vars{'cardNameFirstLetter'} = lc substr($cardName, 0, 1); +my @card; -if ($simpleOnly ne 'true') { - print "Files generated:\n"; -} -my $baseRarity = ''; foreach my $setName (keys %{$cards{$cardName}}) { - if (exists $knownSets{$setName}) { - my $fileName = "../Mage.Sets/src/mage/sets/" . $knownSets{$setName} . "/" . toCamelCase($cardName) . ".java"; - print "gvim $fileName\n"; - my $fileName2 = $fileName; - $fileName2 =~ s/\//\\/img; - print "gvim $fileName2\n"; - my $result; + my $setFileName = "../Mage.Sets/src/mage/sets/".toCamelCase($setName).".java"; + @card = @{${cards{$cardName}{$setName}}}; + my $line = "\tcards.add(new SetCardInfo(\"".$card[0]."\", ".$card[2].", Rarity.".$raritiesConversion{$card[3]}.", mage.cards.".$vars{'cardNameFirstLetter'}.".".$vars{'className'}.".class));\n"; + + @ARGV = ($setFileName); + $^I = '.bak'; + my $last; + my $lastName; + my $currName; + while (<>) { + if ($_ !~ m/cards.add/) { + if (defined($last)) { + print $last; + } + # print card line as last + if (defined($currName) && ($cardName cmp $currName) > 0) { + print $line; + undef $currName; + } + $last = $_; + print $last if eof; + next; + } + + ($lastName) = $last =~ m/"(.*?)"/; + ($currName) = $_ =~ m/"(.*?)"/; + print $last; + $last = $_; + # print card line as first + if (!defined($lastName) && defined($currName) && ($currName cmp $cardName) > 0) { + print $line; + } + # print card line in the middle + if (defined($lastName) && defined($currName) && ($cardName cmp $lastName) > 0 && ($currName cmp $cardName) > 0) { + print $line; + } + } - $vars{'set'} = $knownSets{$setName}; - $vars{'expansionSetCode'} = $sets{$setName}; - $vars{'cardNumber'} = $cards{$cardName}{$setName}[2]; - $vars{'rarity'} = $raritiesConversion{$cards{$cardName}{$setName}[3]}; + unlink $setFileName.".bak"; + print "$setFileName\n"; +} - if (!$baseRarity) { - $baseRarity = $cards{$cardName}{$setName}[3]; +# Generate the the card +my $result; +my $template = Text::Template->new(TYPE => 'FILE', SOURCE => 'cardClass.tmpl', DELIMITERS => [ '[=', '=]' ]); +$vars{'author'} = $author; +$vars{'manaCost'} = fixCost($card[4]); +$vars{'power'} = $card[6]; +$vars{'toughness'} = $card[7]; - $vars{'manaCost'} = fixCost($cards{$cardName}{$setName}[4]); - $vars{'power'} = $cards{$cardName}{$setName}[6]; - $vars{'toughness'} = $cards{$cardName}{$setName}[7]; - - my @types; - $vars{'subType'} = ''; - my $type = $cards{$cardName}{$setName}[5]; - while ($type =~ m/([a-zA-Z]+)( )*/g) { - if (exists($cardTypes{$1})) { - push(@types, $cardTypes{$1}); - } else { - if (@types) { - $vars{'subType'} .= "\n this.subtype.add(\"$1\");"; - } else { - $vars{'subType'} .= "\n this.supertype.add(\"$1\");"; - } - } - } - $vars{'type'} = join(', ', @types); - - $vars{'abilitiesImports'} = ''; - $vars{'abilities'} = ''; - - my @abilities = split('\$', $cards{$cardName}{$setName}[8]); - foreach my $ability (@abilities) { - $ability =~ s/ .+?<\/i>//g; - - my $notKeyWord; - foreach my $keyword (keys %keywords) { - if (toCamelCase($ability) =~ m/^$keyword(?=[A-Z{\d]|$)/g) { - $notKeyWord = 'false'; - my @ka = split(', ', $ability); - foreach my $kw (@ka) { - my $kwUnchanged = $kw; - foreach my $kk (keys %keywords) { - if (toCamelCase($kw) =~ m/^$kk(?=[A-Z{\d]|$)/g) { - $kw = $kk; - } - } - if ($keywords{$kw}) { - $vars{'abilities'} .= "\n // " . ucfirst($kwUnchanged); - if ($keywords{$kw} eq 'instance') { - $vars{'abilities'} .= "\n this.addAbility(" . $kw . "Ability.getInstance());"; - } elsif ($keywords{$kw} eq 'new') { - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . "Ability());"; - } elsif ($keywords{$kw} eq 'color') { - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . "Ability(this.color));"; - } elsif ($keywords{$kw} eq 'number') { - $ability =~ m/(\b\d+?\b)/g; - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(' . $1 . '));'; - } elsif ($keywords{$kw} eq 'cost') { - $ability =~ m/({.*})/g; - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(new ManaCostsImpl("' . fixCost($1) . '")));'; - $vars{'abilitiesImports'} .= "\nimport mage.abilities.costs.mana.ManaCostsImpl;"; - } elsif ($keywords{$kw} eq 'card, manaString') { - $ability =~ m/({.*})/g; - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(this, "' . fixCost($1) . '"));'; - } elsif ($keywords{$kw} eq 'card, cost') { - $ability =~ m/({.*})/g; - $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(this, new ManaCostsImpl("' . fixCost($1) . '")));'; - $vars{'abilitiesImports'} .= "\nimport mage.abilities.costs.mana.ManaCostsImpl;"; - } - - - $vars{'abilitiesImports'} .= "\nimport mage.abilities.keyword." . $kw . "Ability;"; - } else { - $vars{'abilities'} .= "\n // $kwUnchanged"; - if ($simpleOnly eq 'true') { - exit 0; - } - } - } - } - } - - if (!$notKeyWord) { - $vars{'abilities'} .= "\n // $ability"; - if ($simpleOnly eq 'true') { - exit 0; - } - } - } - if ($vars{'abilities'}) { - $vars{'abilities'} = "\n" . $vars{'abilities'}; - } - - $vars{'baseSet'} = $vars{'set'}; - $vars{'baseClassName'} = $vars{'className'}; - - $result = $template->fill_in(HASH => \%vars); - } else { - $vars{'rarityExtended'} = ''; - if ($baseRarity ne $cards{$cardName}{$setName}[3]) { - $vars{'rarityExtended'} = "\n this.rarity = Rarity.$raritiesConversion{$cards{$cardName}{$setName}[3]};"; - } - $result = $templateExtended->fill_in(HASH => \%vars); - } - - open CARD, "> $fileName"; - print CARD $result; - close CARD; - - print "$vars{'set'}.$vars{'className'}\n"; +my @types; +$vars{'subType'} = ''; +my $type = $card[5]; +while ($type =~ m/([a-zA-Z]+)( )*/g) { + if (exists($cardTypes{$1})) { + push(@types, $cardTypes{$1}); } else { - print "Set not found in known sets: $setName\n"; + if (@types) { + $vars{'subType'} .= "\n this.subtype.add(\"$1\");"; + } else { + $vars{'subType'} .= "\n this.supertype.add(\"$1\");"; + } } } +$vars{'type'} = join(', ', @types); + +$vars{'abilitiesImports'} = ''; +$vars{'abilities'} = ''; + +my @abilities = split('\$', $card[8]); +foreach my $ability (@abilities) { + $ability =~ s/ .+?<\/i>//g; + + my $notKeyWord; + foreach my $keyword (keys %keywords) { + if (toCamelCase($ability) =~ m/^$keyword(?=[A-Z{\d]|$)/g) { + $notKeyWord = 'false'; + my @ka = split(', ', $ability); + foreach my $kw (@ka) { + my $kwUnchanged = $kw; + foreach my $kk (keys %keywords) { + if (toCamelCase($kw) =~ m/^$kk(?=[A-Z{\d]|$)/g) { + $kw = $kk; + } + } + if ($keywords{$kw}) { + $vars{'abilities'} .= "\n // " . ucfirst($kwUnchanged); + if ($keywords{$kw} eq 'instance') { + $vars{'abilities'} .= "\n this.addAbility(" . $kw . "Ability.getInstance());"; + } elsif ($keywords{$kw} eq 'new') { + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . "Ability());"; + } elsif ($keywords{$kw} eq 'color') { + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . "Ability(this.color));"; + } elsif ($keywords{$kw} eq 'number') { + $ability =~ m/(\b\d+?\b)/g; + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(' . $1 . '));'; + } elsif ($keywords{$kw} eq 'cost') { + $ability =~ m/({.*})/g; + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(new ManaCostsImpl("' . fixCost($1) . '")));'; + $vars{'abilitiesImports'} .= "\nimport mage.abilities.costs.mana.ManaCostsImpl;"; + } elsif ($keywords{$kw} eq 'card, manaString') { + $ability =~ m/({.*})/g; + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(this, "' . fixCost($1) . '"));'; + } elsif ($keywords{$kw} eq 'card, cost') { + $ability =~ m/({.*})/g; + $vars{'abilities'} .= "\n this.addAbility(new " . $kw . 'Ability(this, new ManaCostsImpl("' . fixCost($1) . '")));'; + $vars{'abilitiesImports'} .= "\nimport mage.abilities.costs.mana.ManaCostsImpl;"; + } + $vars{'abilitiesImports'} .= "\nimport mage.abilities.keyword." . $kw . "Ability;"; + } else { + $vars{'abilities'} .= "\n // $kwUnchanged"; + } + } + } + } + + if (!$notKeyWord) { + $vars{'abilities'} .= "\n // $ability"; + } +} +if ($vars{'abilities'}) { + $vars{'abilities'} = "\n" . $vars{'abilities'}; +} + +$result = $template->fill_in(HASH => \%vars); + +open CARD, "> $fileName"; +print CARD $result; +close CARD; + +print "$fileName\n"; diff --git a/Utils/gen_types_list.pl b/Utils/gen_types_list.pl new file mode 100644 index 00000000000..c85d86a94c8 --- /dev/null +++ b/Utils/gen_types_list.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl -w + +## +# File: gen_types_list.pl +# Author: spjspj +# Purpose: To open all card java files and count all subtypes/supertypes +# Purpose: Ones with unique spellings are possibly incorrect! +## + +use strict; +use Scalar::Util qw(looks_like_number); + +my $dir_listing = "dir \/a \/b \/s ..\\Mage.Sets\\ | find \".java\" |"; + +open (DIR_LISTING, "$dir_listing"); +my %types; +my %types_files; + +while () +{ + chomp; + my $file = $_; + + my $name = ""; + my $cardNum = ""; + + open (JAVA_FILE, "$file"); + + while () + { + chomp; + + # Eg: this.subtype.add("Human"); + my $line = $_; + if ($line =~ m/this.subtype.add.*"([^"]*)".;/) + { + $types{$1}++; + $types_files{$1} .= $file . ",,,"; + } + if ($line =~ m/this.supertype.add.*"([^"]*)"/) + { + $types{$1}++; + $types_files{$1} .= $file . ",,,"; + } + } + + close (JAVA_FILE); +} +my $key; +foreach $key (sort keys (%types)) +{ + print ("$types{$key} = $key .... "); + if ($types{$key} < 10) + { + print (" In files:$types_files{$key}"); + } + print ("\n"); +}