diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index ab6feee19e0..0a10d20f177 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -121,6 +121,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { private static ScheduledExecutorService pingTaskExecutor = Executors.newSingleThreadScheduledExecutor(); + private static long startTime; + /** * @return the session */ @@ -300,6 +302,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { disableButtons(); if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_CHECK, "true").equals("true")) checkForNewImages(); + logger.info("Client start up time: " + ((System.currentTimeMillis() - startTime) / 1000 + " ms")); if (autoConnect()) enableButtons(); else { @@ -930,6 +933,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { */ public static void main(final String args[]) { + startTime = System.currentTimeMillis(); + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(Thread t, Throwable e) { logger.fatal(null, e); diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage.Sets/src/mage/sets/Sets.java index 637ff7c8dd3..e2ded617368 100644 --- a/Mage.Sets/src/mage/sets/Sets.java +++ b/Mage.Sets/src/mage/sets/Sets.java @@ -120,31 +120,53 @@ public class Sets extends HashMap { private void addSet(ExpansionSet set) { this.put(set.getCode(), set); - cards.addAll(set.getCards()); - for (Card card: set.getCards()) { - names.add(card.getName()); - if (card.getCardType().contains(CardType.CREATURE)) { - for (String type : card.getSubtype()) { - creatureTypes.add(type); - } - } - if (!card.getCardType().contains(CardType.LAND)) nonLandNames.add(card.getName()); - } } + private static void loadCards() { + if (cards.isEmpty()) { + System.out.println("Loading cards..."); + long t1 = System.currentTimeMillis(); + for (ExpansionSet set : getInstance().values()) { + cards.addAll(set.getCards()); + for (Card card : set.getCards()) { + names.add(card.getName()); + if (card.getCardType().contains(CardType.CREATURE)) { + for (String type : card.getSubtype()) { + creatureTypes.add(type); + } + } + if (!card.getCardType().contains(CardType.LAND)) nonLandNames.add(card.getName()); + } + } + System.out.println("It took " + (System.currentTimeMillis() - t1) / 1000 + " ms to load all cards."); + } + } + public static Set getCardNames() { + if (names.isEmpty()) { + loadCards(); + } return names; } public static Set getNonLandCardNames() { + if (nonLandNames.isEmpty()) { + loadCards(); + } return nonLandNames; } public static Set getCreatureTypes() { + if (creatureTypes.isEmpty()) { + loadCards(); + } return creatureTypes; } public static Card getRandomCard() { + if (cards.isEmpty()) { + loadCards(); + } return cards.get(rnd.nextInt(cards.size())); } diff --git a/Mage/src/mage/cards/ExpansionSet.java b/Mage/src/mage/cards/ExpansionSet.java index 055f83760e4..e2cb824cad0 100644 --- a/Mage/src/mage/cards/ExpansionSet.java +++ b/Mage/src/mage/cards/ExpansionSet.java @@ -68,17 +68,28 @@ public abstract class ExpansionSet implements Serializable { protected int numBoosterDoubleFaced; protected int ratioBoosterMythic; + protected String packageName; + public ExpansionSet(String name, String code, String symbolCode, String packageName, Date releaseDate, SetType setType) { this.name = name; this.code = code; this.symbolCode = symbolCode; this.releaseDate = releaseDate; this.setType = setType; - this.cards = getCardClassesForPackage(packageName); - this.rarities = getCardsByRarity(); + this.packageName = packageName; + //this.cards = getCardClassesForPackage(packageName); + //this.rarities = getCardsByRarity(); } public List getCards() { + if (cards == null) { + synchronized (this) { + if (cards == null) { + this.cards = getCardClassesForPackage(packageName); + this.rarities = getCardsByRarity(); + } + } + } return cards; } @@ -118,7 +129,7 @@ public abstract class ExpansionSet implements Serializable { } public Card findCard(String name) { - for (Card card : cards) { + for (Card card : getCards()) { if (name.equalsIgnoreCase(card.getName())) { Card newCard = card.copy(); newCard.assignNewId(); @@ -129,7 +140,7 @@ public abstract class ExpansionSet implements Serializable { } public Card findCard(int cardNum) { - for (Card card : cards) { + for (Card card : getCards()) { if (cardNum == card.getCardNumber()) { Card newCard = card.copy(); newCard.assignNewId(); @@ -141,7 +152,7 @@ public abstract class ExpansionSet implements Serializable { public Card findCard(String name, boolean random) { List foundCards = new ArrayList(); - for (Card card : cards) { + for (Card card : getCards()) { if (name.equalsIgnoreCase(card.getName())) { foundCards.add(card); } @@ -155,7 +166,7 @@ public abstract class ExpansionSet implements Serializable { } public String findCardName(int cardNum) { - for (Card card : cards) { + for (Card card : getCards()) { if (card.getCardNumber() == cardNum) return card.getClass().getCanonicalName(); } @@ -425,7 +436,7 @@ public abstract class ExpansionSet implements Serializable { } protected Card getRandomDoubleFaced() { - int size = cards.size(); + int size = getCards().size(); if (size > 0) { Card card = cards.get(rnd.nextInt(size)); int retryCount = 1000;