Added MBS (sets, Collection Viewer, Downloader).

This commit is contained in:
magenoxx 2011-02-06 11:02:11 +03:00
parent 8718b3ed3e
commit 2a2f3a0ceb
5 changed files with 301 additions and 231 deletions

View file

@ -2,10 +2,7 @@ package mage.client.cards;
import mage.Constants; import mage.Constants;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.cards.ExpansionSet; import mage.cards.ExpansionSet;
import mage.sets.ScarsOfMirrodin;
import mage.sets.Sets; import mage.sets.Sets;
import mage.utils.CardUtil; import mage.utils.CardUtil;
@ -19,13 +16,13 @@ import java.util.*;
* @author nantuko * @author nantuko
*/ */
public class CardsStorage { public class CardsStorage {
private static List<Card> allCards = new ArrayList<Card>(); private static List<Card> allCards = new ArrayList<Card>();
private static Set<Card> nonBasicLandCards = new LinkedHashSet<Card>(); private static Set<Card> nonBasicLandCards = new LinkedHashSet<Card>();
private static Map<String, Integer> ratings; private static Map<String, Integer> ratings;
private static Integer min = Integer.MAX_VALUE, max = 0; private static Integer min = Integer.MAX_VALUE, max = 0;
private static int cardsCount; private static int cardsCount;
private static List<String> setCodes = new ArrayList<String>(); private static List<String> setCodes = new ArrayList<String>();
private static List<Card> notImplementedCards; private static List<Card> notImplementedCards;
/** /**
* Rating that is given for new cards. * Rating that is given for new cards.
@ -33,233 +30,248 @@ public class CardsStorage {
*/ */
private static final int DEFAULT_NOT_RATED_CARD_RATING = 6; private static final int DEFAULT_NOT_RATED_CARD_RATING = 6;
static { static {
for (ExpansionSet set : Sets.getInstance().values()) { for (ExpansionSet set : Sets.getInstance().values()) {
setCodes.add(set.getCode()); setCodes.add(set.getCode());
Set<Card> cards = set.createCards(); Set<Card> cards = set.createCards();
allCards.addAll(cards); allCards.addAll(cards);
for (Card card : cards) { for (Card card : cards) {
if (CardUtil.isLand(card) && !CardUtil.isBasicLand(card)) { if (CardUtil.isLand(card) && !CardUtil.isBasicLand(card)) {
nonBasicLandCards.add(card); nonBasicLandCards.add(card);
} }
} }
} }
Collections.sort(allCards, new CardComparator()); Collections.sort(allCards, new CardComparator());
Collections.sort(setCodes, new SetComparator()); Collections.sort(setCodes, new SetComparator());
cardsCount = allCards.size(); cardsCount = allCards.size();
} }
public static List<Card> getAllCards() { public static List<Card> getAllCards() {
return allCards; return allCards;
} }
/** /**
* Get cards from card pool starting from start index and ending with end index. * Get cards from card pool starting from start index and ending with end index.
* Can filter cards by set (if parameter is not null). * Can filter cards by set (if parameter is not null).
* *
* @param start * @param start
* @param end * @param end
* @param set Cards set code. Can be null. * @param set Cards set code. Can be null.
* @param onlyImplemented return only implemented cards * @param onlyImplemented return only implemented cards
* @return * @return
*/ */
public static List<Card> getAllCards(int start, int end, String set, boolean onlyImplemented) { public static List<Card> getAllCards(int start, int end, String set, boolean onlyImplemented) {
List<Card> cards = new ArrayList<Card>(); List<Card> cards = new ArrayList<Card>();
List<Card> pool; List<Card> pool;
if (set == null) { if (set == null) {
pool = allCards; pool = allCards;
} else { } else {
pool = new ArrayList<Card>(); pool = new ArrayList<Card>();
for (Card card : allCards) { for (Card card : allCards) {
if (card.getExpansionSetCode().equals(set)) { if (card.getExpansionSetCode().equals(set)) {
pool.add(card); pool.add(card);
} }
} }
} }
if (!onlyImplemented) { if (!onlyImplemented) {
for (Card card : getNotImplementedCards()) { for (Card card : getNotImplementedCards()) {
if (card.getExpansionSetCode().equals(set)) { if (card.getExpansionSetCode().equals(set)) {
pool.add(card); pool.add(card);
} }
} }
Collections.sort(pool, new CardComparator()); Collections.sort(pool, new CardComparator());
} }
for (int i = start; i < Math.min(end + 1, pool.size()); i++) { for (int i = start; i < Math.min(end + 1, pool.size()); i++) {
cards.add(pool.get(i)); cards.add(pool.get(i));
} }
return cards; return cards;
} }
public static int getCardsCount() { public static int getCardsCount() {
return cardsCount; return cardsCount;
} }
public static List<String> getSetCodes() { public static List<String> getSetCodes() {
return setCodes; return setCodes;
} }
public static Set<Card> getNonBasicLandCards() { public static Set<Card> getNonBasicLandCards() {
return nonBasicLandCards; return nonBasicLandCards;
} }
/** /**
* Return rating of a card: 1-10. * Return rating of a card: 1-10.
* *
* @param card * @param card
* @return * @return
*/ */
public static int rateCard(Card card) { public static int rateCard(Card card) {
if (ratings == null) { if (ratings == null) {
readRatings(); readRatings();
} }
if (ratings.containsKey(card.getName())) { if (ratings.containsKey(card.getName())) {
int r = ratings.get(card.getName()); int r = ratings.get(card.getName());
float f = 10.0f * (r - min) / (max - min); float f = 10.0f * (r - min) / (max - min);
// normalize to [1..10] // normalize to [1..10]
return (int) Math.round(f); return (int) Math.round(f);
} }
return DEFAULT_NOT_RATED_CARD_RATING; return DEFAULT_NOT_RATED_CARD_RATING;
} }
private synchronized static void readRatings() { private synchronized static void readRatings() {
if (ratings == null) { if (ratings == null) {
ratings = new HashMap<String, Integer>(); ratings = new HashMap<String, Integer>();
String filename = "/ratings.txt"; String filename = "/ratings.txt";
try { try {
InputStream is = CardsStorage.class.getResourceAsStream(filename); InputStream is = CardsStorage.class.getResourceAsStream(filename);
Scanner scanner = new Scanner(is); Scanner scanner = new Scanner(is);
while (scanner.hasNextLine()) { while (scanner.hasNextLine()) {
String line = scanner.nextLine(); String line = scanner.nextLine();
String[] s = line.split(":"); String[] s = line.split(":");
if (s.length == 2) { if (s.length == 2) {
Integer rating = Integer.parseInt(s[0].trim()); Integer rating = Integer.parseInt(s[0].trim());
String name = s[1].trim(); String name = s[1].trim();
if (rating > max) { if (rating > max) {
max = rating; max = rating;
} }
if (rating < min) { if (rating < min) {
min = rating; min = rating;
} }
ratings.put(name, rating); ratings.put(name, rating);
} }
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
ratings.clear(); // no rating available on exception ratings.clear(); // no rating available on exception
} }
} }
} }
/** /**
* Get list of not implemented cards. * Get list of not implemented cards.
* Used in collection viewer to show what cards need to be done for the latest set. * Used in collection viewer to show what cards need to be done for the latest set.
* *
* @return * @return
*/ */
public static List<Card> getNotImplementedCards() { public static List<Card> getNotImplementedCards() {
List<Card> cards = new ArrayList<Card>(); List<Card> cards = new ArrayList<Card>();
if (notImplementedCards == null) { if (notImplementedCards == null) {
String filename = "/som.txt"; String filename = "/som.txt";
if (allCards.size() == 0) { if (allCards.size() == 0) {
return cards; return cards;
} }
Card tmp = allCards.get(0);
Set<String> names = new HashSet<String>();
for (Card card : allCards) {
names.add(card.getExpansionSetCode() + card.getName());
}
try {
InputStream is = CardsStorage.class.getResourceAsStream(filename);
Scanner scanner = new Scanner(is);
String set = "SOM";
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] s = line.split("\\|");
if (s.length == 6) {
String name = s[1].trim();
if (!names.contains(set + name)) {
Integer cid = Integer.parseInt(s[5]);
Card card = tmp.copy();
card.setName(name);
card.setExpansionSetCode(set);
card.setCardNumber(cid);
card.setRarity(Constants.Rarity.NA); // mark as not implemented
card.getCardType().clear();
cards.add(card);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
names.clear();
names = null;
}
return cards;
}
public static void main(String[] argv) { Set<String> names = new HashSet<String>();
for (Card card : getAllCards()) { for (Card card : allCards) {
String name = card.getName(); names.add(card.getExpansionSetCode() + card.getName());
if (name.equals("Baneslayer Angel") || name.equals("Lightning Bolt") || name.equals("Zombie Outlander") }
|| name.equals("Naturalize") || name.equals("Kraken's Eye") || name.equals("Serra Angel")) {
System.out.println(name + " : " + rateCard(card));
}
}
}
/** readUnimplemented("SOM", "/som.txt", names, cards);
* Card comparator. readUnimplemented("MBS", "/mbs.txt", names, cards);
* First compares set codes, then collector ids and just then card names.
* <p/>
* Show latest set cards on top.
*
* @author nantuko
*/
private static class CardComparator implements Comparator<Card> {
private static final String LATEST_SET_CODE = "SOM";
@Override names.clear();
public int compare(Card o1, Card o2) { names = null;
String set1 = o1.getExpansionSetCode(); }
String set2 = o2.getExpansionSetCode(); return cards;
if (set1.equals(set2)) { }
Integer cid1 = o1.getCardNumber();
Integer cid2 = o2.getCardNumber();
if (cid1 == cid2) {
return o1.getName().compareTo(o2.getName());
} else {
return cid1.compareTo(cid2);
}
} else {
// put latest set on top
if (set1.equals(LATEST_SET_CODE)) {
return -1;
}
if (set2.equals(LATEST_SET_CODE)) {
return 1;
}
return set1.compareTo(set2);
}
}
}
/** private static void readUnimplemented(String set, String filename, Set<String> names, List<Card> cards) {
* Set comparator. Puts latest set on top. try {
*/ Card tmp = allCards.get(0);
private static class SetComparator implements Comparator<String> { InputStream is = CardsStorage.class.getResourceAsStream(filename);
private static final String LATEST_SET_CODE = "SOM"; Scanner scanner = new Scanner(is);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] s = line.split("\\|");
if (s.length == 6) {
String name = s[1].trim();
if (!names.contains(set + name)) {
Integer cid = Integer.parseInt(s[5]);
Card card = tmp.copy();
card.setName(name);
card.setExpansionSetCode(set);
card.setCardNumber(cid);
card.setRarity(Constants.Rarity.NA); // mark as not implemented
card.getCardType().clear();
cards.add(card);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override public static void main(String[] argv) {
public int compare(String set1, String set2) { for (Card card : getAllCards()) {
// put latest set on top String name = card.getName();
if (set1.equals(LATEST_SET_CODE)) { if (name.equals("Baneslayer Angel") || name.equals("Lightning Bolt") || name.equals("Zombie Outlander")
return -1; || name.equals("Naturalize") || name.equals("Kraken's Eye") || name.equals("Serra Angel")) {
} System.out.println(name + " : " + rateCard(card));
if (set2.equals(LATEST_SET_CODE)) { }
return 1; }
} }
return set1.compareTo(set2);
} /**
} * Card comparator.
* First compares set codes, then collector ids and just then card names.
* <p/>
* Show latest set cards on top.
*
* @author nantuko
*/
private static class CardComparator implements Comparator<Card> {
private static final String LATEST_SET_CODE = "SOM";
@Override
public int compare(Card o1, Card o2) {
String set1 = o1.getExpansionSetCode();
String set2 = o2.getExpansionSetCode();
if (set1.equals(set2)) {
Integer cid1 = o1.getCardNumber();
Integer cid2 = o2.getCardNumber();
if (cid1 == cid2) {
return o1.getName().compareTo(o2.getName());
} else {
return cid1.compareTo(cid2);
}
} else {
// put latest set on top
if (set1.equals(LATEST_SET_CODE)) {
return -1;
}
if (set2.equals(LATEST_SET_CODE)) {
return 1;
}
return set1.compareTo(set2);
}
}
}
/**
* Set comparator. Puts latest set on top.
*/
private static class SetComparator implements Comparator<String> {
private static final String LATEST_SET_CODE = "SOM";
private static final String LATEST_SET_CODE_2 = "MBS";
@Override
public int compare(String set1, String set2) {
// put latest set on top
if (set1.equals(LATEST_SET_CODE)) {
return -1;
}
if (set2.equals(LATEST_SET_CODE)) {
return 1;
}
if (set1.equals(LATEST_SET_CODE_2)) {
return -1;
}
if (set2.equals(LATEST_SET_CODE_2)) {
return 1;
}
return set1.compareTo(set2);
}
}
} }

View file

@ -295,10 +295,9 @@ public class MageBook extends JComponent {
private HoverButton pageRight; private HoverButton pageRight;
private int currentPage = 0; private int currentPage = 0;
private String currentSet = "SOM"; private String currentSet = "MBS";
private static CardDimensions cardDimensions = new CardDimensions(1.2d); private static CardDimensions cardDimensions = new CardDimensions(1.2d);
private static Font font = new Font("Arial", Font.PLAIN, 14);
private static final Logger log = Logger.getLogger(MageBook.class); private static final Logger log = Logger.getLogger(MageBook.class);
private Dimension cardDimension; private Dimension cardDimension;

View file

@ -12,9 +12,8 @@ import static org.mage.plugins.card.dl.DownloadJob.toFile;
public class GathererSets implements Iterable<DownloadJob> { public class GathererSets implements Iterable<DownloadJob> {
private static final File outDir = new File("plugins/images/sets"); private static final File outDir = new File("plugins/images/sets");
private static final String[] symbols = {"DIS", "GPT", "RAV", "MRD", private static final String[] symbols = {"DIS", "GPT", "RAV", "MRD", "10E", "HOP"};
"10E", "HOP"}; private static final String[] withMythics = {"ALA", "CFX", "ARB", "ZEN", "WWK", "ROE", "SOM", "M10", "M11", "DDF", "MBS"};
private static final String[] withMythics = {"ALA", "CFX", "ARB", "ZEN", "WWK", "ROE", "SOM", "M10", "M11", "DDF"};
@Override @Override
public Iterator<DownloadJob> iterator() { public Iterator<DownloadJob> iterator() {

View file

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

View file

@ -69,6 +69,7 @@ public class Sets extends HashMap<String, ExpansionSet> {
this.addSet(Magic2010.getInstance()); this.addSet(Magic2010.getInstance());
this.addSet(Magic2011.getInstance()); this.addSet(Magic2011.getInstance());
this.addSet(Mirrodin.getInstance()); this.addSet(Mirrodin.getInstance());
this.addSet(MirrodinBesieged.getInstance());
this.addSet(Planechase.getInstance()); this.addSet(Planechase.getInstance());
this.addSet(RavnicaCityOfGuilds.getInstance()); this.addSet(RavnicaCityOfGuilds.getInstance());
this.addSet(RiseOfTheEldrazi.getInstance()); this.addSet(RiseOfTheEldrazi.getInstance());