diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java index fa6c54aa94..497bc1c188 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java @@ -10,5 +10,6 @@ public interface CardImageSource { String generateURL(CardDownloadData card) throws Exception; String generateTokenUrl(CardDownloadData card); + String getSourceName(); Float getAverageSize(); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java index 2eb32e5197..069a71940c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java @@ -96,6 +96,11 @@ public class MagicCardsImageSource implements CardImageSource { private static final long serialVersionUID = 1L; }; + @Override + public String getSourceName() { + return "magiccards.info"; + } + public static CardImageSource getInstance() { if (instance == null) { instance = new MagicCardsImageSource(); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java index b89656dbb0..66170a29bd 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java @@ -50,6 +50,11 @@ public class MtgImageSource implements CardImageSource { return instance; } + @Override + public String getSourceName() { + return "mtgimage.com"; + } + @Override public String generateURL(CardDownloadData card) throws Exception { Integer collectorId = card.getCollectorId(); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 5592699664..c1d4573685 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -1,14 +1,14 @@ package org.mage.plugins.card.dl.sources; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.mage.plugins.card.images.CardDownloadData; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - /** * * @author North @@ -26,74 +26,174 @@ public class WizardCardsImageSource implements CardImageSource { return instance; } + @Override + public String getSourceName() { + return "WOTC Gatherer"; + } + public WizardCardsImageSource() { sets = new HashMap<>(); setsAliases = new HashMap<>(); - setsAliases.put("DTK", "magicorigins/cig"); - setsAliases.put("DTK", "modernmasters2015/cig"); - setsAliases.put("FRF", "fatereforged/cig"); - setsAliases.put("C14", "commander2014/cig"); - setsAliases.put("KTK", "khansoftarkir/cig"); - setsAliases.put("M15", "magic2015coreset/cig"); - setsAliases.put("CNS", "vintagemasters/cig"); - setsAliases.put("CNS", "conspiracy/cig"); - setsAliases.put("JOU", "journeyintonyx/cig"); - setsAliases.put("BNG", "bornofthegods/cig"); - setsAliases.put("C13", "commander2013/cig"); - setsAliases.put("THS", "theros/cig"); - setsAliases.put("M14", "magic2014coreset/cig"); - setsAliases.put("MMA", "modernmasters/cig"); - setsAliases.put("DGM", "dragonsmaze/cig"); - setsAliases.put("GTC", "gatecrash/cig"); - setsAliases.put("RTR", "returntoravnica/cig"); - setsAliases.put("M13", "magic2013/cig"); - setsAliases.put("AVR", "avacynrestored/cig"); - setsAliases.put("DKA", "darkascension/cig"); - setsAliases.put("ISD", "innistrad/cig"); - setsAliases.put("M12", "magic2012/cig"); - setsAliases.put("CMD", "commander/cig"); - setsAliases.put("NPH", "newphyrexia/spoiler"); - setsAliases.put("MBS", "mirrodinbesieged/spoiler"); - setsAliases.put("SOM", "scarsofmirrodin/spoiler"); - setsAliases.put("M11", "magic2011/spoiler"); - setsAliases.put("ROE", "riseoftheeldrazi/spoiler"); - setsAliases.put("WWK", "worldwake/spoiler"); - setsAliases.put("ZEN", "zendikar/spoiler"); - setsAliases.put("M10", "magic2010/spoiler"); - setsAliases.put("ARB", "alarareborn/spoiler"); - setsAliases.put("CON", "conflux/spoiler"); - setsAliases.put("ALA", "shardsofalara/spoiler"); - setsAliases.put("PC2", "planechase2012edition/cig"); - setsAliases.put("PTK", "portalthreekingdoms/cig"); - setsAliases.put("DD3", "anthologyelvesvsgoblins/cig"); - setsAliases.put("DD3", "anthologyjacevschandra/cig"); - setsAliases.put("DD3", "anthologydivinevsdemonic/cig"); - setsAliases.put("DD3", "anthologygarrukvsliliana/cig"); - setsAliases.put("EVG", "elvesvsgoblins/cig"); - setsAliases.put("DD2", "jacevschandra/cig"); - setsAliases.put("DDC", "divinevsdemonic/cig"); - setsAliases.put("DDD", "garrukvsliliana/cig"); - setsAliases.put("DDE", "phyrexiavsthecoalition/cig"); - setsAliases.put("DDF", "elspethvstezzeret/cig"); - setsAliases.put("DDG", "knightsvsdragons/cig"); - setsAliases.put("DDH", "ajanivsnicolbolas/cig"); - setsAliases.put("DDI", "venservskoth/cig"); - setsAliases.put("DDJ", "izzetvsgolgari/cig"); - setsAliases.put("DDK", "sorinvstibalt/cig"); - setsAliases.put("DDL", "heroesvsmonsters/cig"); - setsAliases.put("DDM", "jacevsvraska/cig"); - setsAliases.put("DDN", "speedvscunning/cig"); - setsAliases.put("DDO", "elspethvskiora/cig"); + setsAliases.put("2ED", "Unlimited Edition"); + setsAliases.put("10E", "Tenth Edition"); + setsAliases.put("3ED", "Revised Edition"); + setsAliases.put("4ED", "Fourth Edition"); + setsAliases.put("5DN", "Fifth Dawn"); + setsAliases.put("5ED", "Fifth Edition"); + setsAliases.put("6ED", "Classic Sixth Edition"); + setsAliases.put("7ED", "Seventh Edition"); + setsAliases.put("8ED", "Eighth Edition"); + setsAliases.put("9ED", "Ninth Edition"); + setsAliases.put("ALA", "Shards of Alara"); + setsAliases.put("ALL", "Alliances"); + setsAliases.put("APC", "Apocalypse"); + setsAliases.put("ARB", "Alara Reborn"); + setsAliases.put("ARC", "Archenemy"); + setsAliases.put("ARN", "Arabian Nights"); + setsAliases.put("ATH", "Anthologies"); + setsAliases.put("ATQ", "Antiquities"); + setsAliases.put("AVR", "Avacyn Restored"); + setsAliases.put("BNG", "Born of the Gods"); + setsAliases.put("BOK", "Betrayers of Kamigawa"); + setsAliases.put("BRB", "Battle Royale Box Set"); + setsAliases.put("BTD", "Beatdown Box Set"); + setsAliases.put("C13", "Commander 2013 Edition"); + setsAliases.put("C14", "Commander 2014 Edition"); + setsAliases.put("CHK", "Champions of Kamigawa"); + setsAliases.put("CHR", "Chronicles"); + setsAliases.put("CMD", "Magic: The Gathering-Commander"); + setsAliases.put("CNS", "Magic: The Gathering-Conspiracy"); + setsAliases.put("CON", "Conflux"); + setsAliases.put("CSP", "Coldsnap"); + setsAliases.put("DD2", "Duel Decks: Jace vs. Chandra"); + setsAliases.put("DD3", "Duel Decks Anthology, Divine vs. Demonic^Duel Decks Anthology, Elves vs. Goblins^Duel Decks Anthology, Garruk vs. Liliana^Duel Decks Anthology, Jace vs. Chandra"); + setsAliases.put("DDC", "Duel Decks: Divine vs. Demonic"); + setsAliases.put("DDD", "Duel Decks: Garruk vs. Liliana"); + setsAliases.put("DDE", "Duel Decks: Phyrexia vs. the Coalition"); + setsAliases.put("DDF", "Duel Decks: Elspeth vs. Tezzeret"); + setsAliases.put("DDG", "Duel Decks: Knights vs. Dragons"); + setsAliases.put("DDH", "Duel Decks: Ajani vs. Nicol Bolas"); + setsAliases.put("DDI", "Duel Decks: Venser vs. Koth"); + setsAliases.put("DDJ", "Duel Decks: Izzet vs. Golgari"); + setsAliases.put("DDK", "Duel Decks: Sorin vs. Tibalt"); + setsAliases.put("DDL", "Duel Decks: Heroes vs. Monsters"); + setsAliases.put("DDM", "Duel Decks: Jace vs. Vraska"); + setsAliases.put("DDN", "Duel Decks: Speed vs. Cunning"); + setsAliases.put("DDO", "Duel Decks: Elspeth vs. Kiora"); + setsAliases.put("DGM", "Dragon's Maze"); + setsAliases.put("DIS", "Dissension"); + setsAliases.put("DKA", "Dark Ascension"); + setsAliases.put("DKM", "Deckmasters"); + setsAliases.put("DRK", "The Dark"); + setsAliases.put("DST", "Darksteel"); + setsAliases.put("DTK", "Dragons of Tarkir"); + setsAliases.put("EVE", "Eventide"); + setsAliases.put("EVG", "Duel Decks: Elves vs. Goblins"); + setsAliases.put("EXO", "Exodus"); + setsAliases.put("FEM", "Fallen Empires"); + setsAliases.put("FNMP", "Friday Night Magic"); + setsAliases.put("FRF", "Fate Reforged"); + setsAliases.put("FUT", "Future Sight"); + setsAliases.put("FVD", "From the Vault: Dragons"); + setsAliases.put("FVE", "From the Vault: Exiled"); + setsAliases.put("FVR", "From the Vault: Relics"); + setsAliases.put("GPT", "Guildpact"); + setsAliases.put("GPX", "Grand Prix"); + setsAliases.put("GRC", "WPN Gateway"); + setsAliases.put("GTC", "Gatecrash"); + setsAliases.put("HML", "Homelands"); + setsAliases.put("HOP", "Planechase"); + setsAliases.put("ICE", "Ice Age"); + setsAliases.put("INV", "Invasion"); + setsAliases.put("ISD", "Innistrad"); + setsAliases.put("JOU", "Journey into Nyx"); + setsAliases.put("JR", "Judge Promo"); + setsAliases.put("JUD", "Judgment"); + setsAliases.put("KTK", "Khans of Tarkir"); + setsAliases.put("LEA", "Limited Edition Alpha"); + setsAliases.put("LEB", "Limited Edition Beta"); + setsAliases.put("LEG", "Legends"); + setsAliases.put("LGN", "Legions"); + setsAliases.put("LRW", "Lorwyn"); + setsAliases.put("M10", "Magic 2010"); + setsAliases.put("M11", "Magic 2011"); + setsAliases.put("M12", "Magic 2012"); + setsAliases.put("M13", "Magic 2013"); + setsAliases.put("M14", "Magic 2014"); + setsAliases.put("M15", "Magic 2015"); + setsAliases.put("MBP", "Media Inserts"); + setsAliases.put("MBS", "Mirrodin Besieged"); + setsAliases.put("ME2", "Masters Edition II"); + setsAliases.put("ME3", "Masters Edition III"); + setsAliases.put("ME4", "Masters Edition IV"); + setsAliases.put("MED", "Masters Edition"); +// setsAliases.put("MGDC", "Game Day"); + setsAliases.put("MIR", "Mirage"); + setsAliases.put("MLP", "Launch Party"); + setsAliases.put("MMA", "Modern Masters"); + setsAliases.put("MMB", "Modern Masters 2015"); + setsAliases.put("MMQ", "Mercadian Masques"); + setsAliases.put("MOR", "Morningtide"); + setsAliases.put("MPRP", "Magic Player Rewards"); + setsAliases.put("MRD", "Mirrodin"); + setsAliases.put("NMS", "Nemesis"); + setsAliases.put("NPH", "New Phyrexia"); + setsAliases.put("ODY", "Odyssey"); + setsAliases.put("ONS", "Onslaught"); + setsAliases.put("ORI", "Magic Origins"); + setsAliases.put("PC2", "Planechase 2012 Edition"); + setsAliases.put("PCY", "Prophecy"); + setsAliases.put("PD2", "Premium Deck Series: Fire and Lightning"); + setsAliases.put("PDS", "Premium Deck Series: Slivers"); + setsAliases.put("PLC", "Planar Chaos"); + setsAliases.put("PLS", "Planeshift"); + setsAliases.put("PO2", "Portal Second Age"); + setsAliases.put("POR", "Portal"); + setsAliases.put("PTC", "Prerelease Events"); + setsAliases.put("PTK", "Portal Three Kingdoms"); + setsAliases.put("RAV", "Ravnica: City of Guilds"); + setsAliases.put("ROE", "Rise of the Eldrazi"); + setsAliases.put("RTR", "Return to Ravnica"); + setsAliases.put("S00", "Starter 2000"); + setsAliases.put("S99", "Starter 1999"); + setsAliases.put("SCG", "Scourge"); + setsAliases.put("SHM", "Shadowmoor"); + setsAliases.put("SOK", "Saviors of Kamigawa"); + setsAliases.put("SOM", "Scars of Mirrodin"); + setsAliases.put("STH", "Stronghold"); + setsAliases.put("THS", "Theros"); + setsAliases.put("TMP", "Tempest"); + setsAliases.put("TOR", "Torment"); + setsAliases.put("TSB", "Time Spiral 'Timeshifted'"); + setsAliases.put("TSP", "Time Spiral"); + setsAliases.put("UDS", "Urza's Destiny"); + setsAliases.put("UGL", "Unglued"); + setsAliases.put("ULG", "Urza's Legacy"); + setsAliases.put("UNH", "Unhinged"); + setsAliases.put("USG", "Urza's Saga"); + setsAliases.put("VG1", "Vanguard Set 1"); + setsAliases.put("VG2", "Vanguard Set 2"); + setsAliases.put("VG3", "Vanguard Set 3"); + setsAliases.put("VG4", "Vanguard Set 4"); + setsAliases.put("VGO", "MTGO Vanguard"); + setsAliases.put("VIS", "Visions"); + setsAliases.put("VMA", "Vintage Masters"); + setsAliases.put("WMCQ", "World Magic Cup Qualifier"); + setsAliases.put("WTH", "Weatherlight"); + setsAliases.put("WWK", "Worldwake"); + setsAliases.put("ZEN", "Zendikar"); } private Map<String, String> getSetLinks(String cardSet) { Map<String, String> setLinks = new HashMap<>(); try { - String urlDocument; - if (cardSet.equals("M15")) { - urlDocument = "http://magic.wizards.com/en/content/magic-2015-core-set-card-set-archive-products-game-info"; + String setNames = setsAliases.get(cardSet); + for (String setName : setNames.split("\\^")) { + String URLSetName = URLEncoder.encode(setName, "UTF-8"); + String urlDocument; + urlDocument = "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=+[%22" + URLSetName + "%22]"; Document doc = Jsoup.connect(urlDocument).get(); - Elements cardsImages = doc.select("div.advanced-card img"); + Elements cardsImages = doc.select("img[src^=../../Handlers/]"); for (int i = 0; i < cardsImages.size(); i++) { String cardName = normalizeName(cardsImages.get(i).attr("alt")); if (cardName != null && !cardName.isEmpty()) { @@ -104,46 +204,9 @@ public class WizardCardsImageSource implements CardImageSource { } cardName += landNumber; } - setLinks.put(cardName.toLowerCase(), cardsImages.get(i).attr("src")); - } else { - setLinks.put(Integer.toString(i), cardsImages.get(i).attr("src")); + setLinks.put(cardName.toLowerCase(), cardsImages.get(i).attr("src").substring(5)); } } - - } else { - urlDocument = "http://www.wizards.com/magic/tcg/article.aspx?x=mtg/tcg/" + setsAliases.get(cardSet); - Document doc = Jsoup.connect(urlDocument).get(); - Elements cardsImages = doc.select("img[height$=370]"); - for (int i = 0; i < cardsImages.size(); i++) { - String cardName = normalizeName(cardsImages.get(i).attr("title")); - if (cardName != null && !cardName.isEmpty()) { - if (cardName.equals("Forest") || cardName.equals("Swamp") || cardName.equals("Mountain") || cardName.equals("Island") || cardName.equals("Plains")) { - int landNumber = 1; - while (setLinks.get((cardName + landNumber).toLowerCase()) != null) { - landNumber++; - } - cardName += landNumber; - } - setLinks.put(cardName.toLowerCase(), cardsImages.get(i).attr("src")); - } else { - setLinks.put(Integer.toString(i), cardsImages.get(i).attr("src")); - } - } - - cardsImages = doc.select("img[height$=470]"); - for (int i = 0; i < cardsImages.size(); i++) { - String cardName = normalizeName(cardsImages.get(i).attr("title")); - - if (cardName != null && !cardName.isEmpty()) { - String[] cardNames = cardName.replace(")", "").split(" \\("); - for (String name : cardNames) { - setLinks.put(name.toLowerCase(), cardsImages.get(i).attr("src")); - } - } else { - setLinks.put(Integer.toString(i), cardsImages.get(i).attr("src")); - } - } - } } catch (IOException ex) { System.out.println("Exception when parsing the wizards page: " + ex.getMessage()); @@ -173,7 +236,8 @@ public class WizardCardsImageSource implements CardImageSource { if (card.isFlippedSide()) { //doesn't support rotated images return null; } - if (setsAliases.get(cardSet) != null) { + String setNames = setsAliases.get(cardSet); + if (setNames != null) { Map<String, String> setLinks = sets.get(cardSet); if (setLinks == null) { setLinks = getSetLinks(cardSet); @@ -191,7 +255,7 @@ public class WizardCardsImageSource implements CardImageSource { } } if (link != null && !link.startsWith("http://")) { - link = "http://www.wizards.com" + link; + link = "http://gatherer.wizards.com" + link; } return link; } 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 3fe998d1bd..29ff22a7ea 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 @@ -58,7 +58,6 @@ import net.java.truevfs.kernel.spec.FsSyncException; import org.apache.log4j.Logger; import org.mage.plugins.card.dl.sources.CardImageSource; import org.mage.plugins.card.dl.sources.MagicCardsImageSource; -import org.mage.plugins.card.dl.sources.MtgImageSource; import org.mage.plugins.card.dl.sources.WizardCardsImageSource; import org.mage.plugins.card.properties.SettingsManager; import org.mage.plugins.card.utils.CardImageUtils; @@ -85,7 +84,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab private Proxy p = Proxy.NO_PROXY; - private final ExecutorService executor = Executors.newFixedThreadPool(10); + // private ExecutorService executor = Executors.newFixedThreadPool(10); public static void main(String[] args) { startDownload(null, null); @@ -445,6 +444,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab update(0, cardsToDownload.size()); + ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < cardsToDownload.size() && !cancel; i++) { try { @@ -466,6 +466,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab Runnable task = new DownloadTask(card, new URL(url), cardsToDownload.size()); executor.execute(task); } else { + logger.info("Card not available on " + cardImageSource.getSourceName()+ ": " + card.getName() + " (" + card.getSet() + ")"); synchronized (sync) { update(cardIndex + 1, cardsToDownload.size()); } @@ -646,7 +647,6 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab bar.setString("0 cards remaining! Please close!"); } else { bar.setString(String.format("%d cards remaining! Please choose another source!", count)); - //executor = Executors.newFixedThreadPool(10); startDownloadButton.setEnabled(true); } } diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java index 022bf91263..1f8292d351 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java @@ -37,6 +37,7 @@ import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect; import mage.abilities.keyword.MorphAbility; import mage.cards.CardImpl; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; @@ -57,7 +58,7 @@ public class WallOfDeceit extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // {3}: Turn Wall of Deceit face down. - Effect effect = new BecomesFaceDownCreatureEffect(null, BecomesFaceDownCreatureEffect.FaceDownType.MANIFESTED); + Effect effect = new BecomesFaceDownCreatureEffect(Duration.Custom, BecomesFaceDownCreatureEffect.FaceDownType.MANIFESTED); effect.setText("Turn Wall of Deceit face down. <i>(It becomes a 2/2 creature.)</i>"); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{3}"))); diff --git a/Mage/src/mage/cards/CardsImpl.java b/Mage/src/mage/cards/CardsImpl.java index 9eebeb683e..2bb5c2f0e6 100644 --- a/Mage/src/mage/cards/CardsImpl.java +++ b/Mage/src/mage/cards/CardsImpl.java @@ -40,6 +40,7 @@ import java.util.UUID; import mage.constants.Zone; import mage.filter.FilterCard; import mage.game.Game; +import mage.players.Player; import org.apache.log4j.Logger; @@ -54,6 +55,7 @@ public class CardsImpl extends LinkedHashSet<UUID> implements Cards, Serializabl private static Random rnd = new Random(); private UUID ownerId; private Zone zone; + private boolean errorLogged = false; public CardsImpl() { } @@ -189,8 +191,17 @@ public class CardsImpl extends LinkedHashSet<UUID> implements Cards, Serializabl if (card != null) { cards.add(card); } else { - // seems like this can happen during the cancelation of a game - logger.error("Card not found cardId: " + cardId + " gameId: " + game.getId() ); + if (!errorLogged) { // this runs in iteration, so the flag helps to stop to fill the log file + // seems like this can happen during the cancelation of a game + logger.error("Card not found cardId: " + cardId + " gameId: " + game.getId() ); + for (Player player :game.getPlayers().values()) { + logger.error(player.getName() + " inGame=" + (player.isInGame() ? "true":"false")); + } + for (StackTraceElement stackTraceElement: Thread.currentThread().getStackTrace()) { + logger.error(stackTraceElement.toString()); + } + errorLogged = true; + } } } return cards; diff --git a/Mage/src/mage/cards/Sets.java b/Mage/src/mage/cards/Sets.java index 3b894e9347..f8ab9d12a2 100644 --- a/Mage/src/mage/cards/Sets.java +++ b/Mage/src/mage/cards/Sets.java @@ -30,18 +30,26 @@ package mage.cards; import java.io.FileNotFoundException; import java.io.PrintWriter; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; import mage.cards.decks.DeckCardInfo; -import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.cards.decks.DeckCardLists; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import static mage.constants.ColoredManaSymbol.B; +import static mage.constants.ColoredManaSymbol.G; +import static mage.constants.ColoredManaSymbol.R; +import static mage.constants.ColoredManaSymbol.U; +import static mage.constants.ColoredManaSymbol.W; import mage.util.ClassScanner; import org.apache.log4j.Logger; - /** * * @author BetaSteward_at_googlemail.com @@ -57,7 +65,7 @@ public class Sets extends HashMap<String, ExpansionSet> { } private Sets() { - ArrayList<String> packages = new ArrayList<String>(); + ArrayList<String> packages = new ArrayList<>(); packages.add("mage.sets"); for (Class c : ClassScanner.findClasses(packages, ExpansionSet.class)) { try { @@ -130,8 +138,8 @@ public class Sets extends HashMap<String, ExpansionSet> { public static void saveDeck(String file, DeckCardLists deck) throws FileNotFoundException { PrintWriter out = new PrintWriter(file); - Map<String, DeckCardInfo> deckCards = new HashMap<String, DeckCardInfo>(); - Map<String, DeckCardInfo> sideboard = new HashMap<String, DeckCardInfo>(); + Map<String, DeckCardInfo> deckCards = new HashMap<>(); + Map<String, DeckCardInfo> sideboard = new HashMap<>(); try { if (deck.getName() != null && deck.getName().length() > 0) { out.println("NAME:" + deck.getName());