SetInfoUtil cleaned out for unused code, init moved to static{} block, dependencies updated

limited game code moved to a matching package
deckeditor for drafting now lets pick a card by hitting space.
This commit is contained in:
Maxmtg
2011-09-04 15:48:59 +00:00
parent 5382bb7587
commit 79e3081e98
21 changed files with 421 additions and 568 deletions

17
.gitattributes vendored
View File

@@ -9521,12 +9521,8 @@ src/main/java/forge/AIPlayer.java svneol=native#text/plain
src/main/java/forge/AllZone.java svneol=native#text/plain
src/main/java/forge/AllZoneUtil.java svneol=native#text/plain
src/main/java/forge/Base64Coder.java svneol=native#text/plain
src/main/java/forge/BoosterDraft.java svneol=native#text/plain
src/main/java/forge/BoosterDraftAI.java svneol=native#text/plain
src/main/java/forge/BoosterDraft_1.java svneol=native#text/plain
src/main/java/forge/BoosterGenerator.java svneol=native#text/plain
src/main/java/forge/ButtonUtil.java svneol=native#text/plain
src/main/java/forge/CCnt.java svneol=native#text/plain
src/main/java/forge/Card.java svneol=native#text/plain
src/main/java/forge/CardContainer.java svneol=native#text/plain
src/main/java/forge/CardFilter.java svneol=native#text/plain
@@ -9557,8 +9553,6 @@ src/main/java/forge/Constant_StringArrayList.java svneol=native#text/plain
src/main/java/forge/Constant_StringHashMap.java svneol=native#text/plain
src/main/java/forge/CopyFiles.java svneol=native#text/plain
src/main/java/forge/Counters.java svneol=native#text/plain
src/main/java/forge/CustomDraft.java svneol=native#text/plain
src/main/java/forge/DeckColors.java svneol=native#text/plain
src/main/java/forge/DefaultPlayerZone.java svneol=native#text/plain
src/main/java/forge/Display.java svneol=native#text/plain
src/main/java/forge/EndOfCombat.java svneol=native#text/plain
@@ -9607,9 +9601,8 @@ src/main/java/forge/ReadBoosterPack.java svneol=native#text/plain
src/main/java/forge/ReadDraftBoosterPack.java svneol=native#text/plain
src/main/java/forge/ReadPriceList.java svneol=native#text/plain
src/main/java/forge/ReadQuest_Assignment.java svneol=native#text/plain
src/main/java/forge/SealedDeck.java svneol=native#text/plain
src/main/java/forge/SetInfo.java svneol=native#text/plain
src/main/java/forge/SetInfoUtil.java svneol=native#text/plain
src/main/java/forge/SetUtils.java svneol=native#text/plain
src/main/java/forge/SimpleCombat.java svneol=native#text/plain
src/main/java/forge/Singletons.java svneol=native#text/plain
src/main/java/forge/StaticEffect.java svneol=native#text/plain
@@ -9618,6 +9611,7 @@ src/main/java/forge/Time.java svneol=native#text/plain
src/main/java/forge/UndoCommand.java svneol=native#text/plain
src/main/java/forge/Upkeep.java svneol=native#text/plain
src/main/java/forge/ZCTrigger.java svneol=native#text/plain
src/main/java/forge/card/CardBlock.java -text
src/main/java/forge/card/CardColor.java -text
src/main/java/forge/card/CardCoreType.java -text
src/main/java/forge/card/CardDb.java -text
@@ -9779,6 +9773,13 @@ src/main/java/forge/game/GameLossReason.java -text
src/main/java/forge/game/GamePlayerRating.java -text
src/main/java/forge/game/GameSummary.java svneol=native#text/plain
src/main/java/forge/game/PlayerIndex.java -text
src/main/java/forge/game/limited/BoosterDraft.java svneol=native#text/plain
src/main/java/forge/game/limited/BoosterDraftAI.java svneol=native#text/plain
src/main/java/forge/game/limited/BoosterDraft_1.java svneol=native#text/plain
src/main/java/forge/game/limited/CCnt.java svneol=native#text/plain
src/main/java/forge/game/limited/CustomDraft.java svneol=native#text/plain
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
src/main/java/forge/game/limited/SealedDeck.java svneol=native#text/plain
src/main/java/forge/game/package-info.java -text
src/main/java/forge/gui/CardListViewer.java -text
src/main/java/forge/gui/ForgeAction.java svneol=native#text/plain

View File

@@ -13,6 +13,7 @@ import java.util.TreeMap;
import com.esotericsoftware.minlog.Log;
import forge.card.CardDb;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;
@@ -5790,7 +5791,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return a {@link java.lang.String} object.
*/
public String getMostRecentSet() {
return SetInfoUtil.getMostRecentSet(Sets);
return CardDb.instance().getCard(this.getName()).getSet();
}
private String ImageFilename = "";

View File

@@ -535,7 +535,7 @@ public final class CardUtil {
if (f.exists()) { return mwsSet3; }
//Second, try 2 letter set code with MWS filename format
String mwsSet2 = String.format("%s/%s%s.full", SetInfoUtil.getCode2ByCode(setName), mwsCardName, nn);
String mwsSet2 = String.format("%s/%s%s.full", SetUtils.getCode2ByCode(setName), mwsCardName, nn);
f = new File(path, mwsSet2 + ".jpg");
if (f.exists()) { return mwsSet2; }

View File

@@ -1054,37 +1054,26 @@ public class GameAction {
Card.resetUniqueNumber();
boolean canRandomFoil = Constant.Runtime.RndCFoil[0] && Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed);
Random generator = MyRandom.random;
for (Entry<CardPrinted, Integer> cardPile : humanDeck.getMain()) {
for (int i = 0; i < cardPile.getValue(); i++) {
String cardName = cardPile.getKey().getName();
String setCode = cardPile.getKey().getSet();
for (Entry<CardPrinted, Integer> stackOfCards : humanDeck.getMain()) {
CardPrinted cardPrinted = stackOfCards.getKey();
for (int i = 0; i < stackOfCards.getValue(); i++) {
Card card = c.getCard(cardName, AllZone.getHumanPlayer());
Card card = c.getCard(cardPrinted.getName(), AllZone.getHumanPlayer());
card.setCurSetCode(cardPrinted.getSet());
if (!setCode.equals(""))
card.setCurSetCode(setCode);
else if ((card.getSets().size() > 0)) // && card.getCurSetCode().equals(""))
card.setRandomSetCode();
if (!card.getCurSetCode().equals("")) {
int n = SetInfoUtil.getSetInfoCode(card.getSets(), card.getCurSetCode()).PicCount;
if (n > 1)
card.setRandomPicture(generator.nextInt(n - 1) + 1);
int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getSet()).getCopiesCount();
if (cntVariants > 1) { card.setRandomPicture(generator.nextInt(cntVariants - 1) + 1); }
card.setImageFilename(CardUtil.buildFilename(card));
}
// Assign random foiling on approximately 1:20 cards
if (Constant.Runtime.RndCFoil[0] && Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed)) {
if (MyRandom.percentTrue(5))
card.setFoil(MyRandom.random.nextInt(9) + 1);
if (cardPrinted.isFoil() || (canRandomFoil && MyRandom.percentTrue(5))) {
int iFoil = MyRandom.random.nextInt(9) + 1;
card.setFoil(iFoil);
}
// foiling for cards explicitly foiled in deck
if (cardPile.getKey().isFoil()) { card.setFoil(MyRandom.random.nextInt(9) + 1); }
//System.out.println("human random number:" + card.getRandomPicture());
//}
AllZone.getHumanLibrary().add(card);
@@ -1095,43 +1084,23 @@ public class GameAction {
}
ArrayList<String> RAICards = new ArrayList<String>();
for (Entry<CardPrinted, Integer> cardPile : computerDeck.getMain()) {
for (int i = 0; i < cardPile.getValue(); i++) {
for (Entry<CardPrinted, Integer> stackOfCards : computerDeck.getMain()) {
CardPrinted cardPrinted = stackOfCards.getKey();
for (int i = 0; i < stackOfCards.getValue(); i++) {
String cardName = cardPile.getKey().getName();
String setCode = cardPile.getKey().getSet();
Card card = c.getCard(cardPrinted.getName(), AllZone.getComputerPlayer());
card.setCurSetCode(cardPrinted.getSet());
Card card = c.getCard(cardName, AllZone.getComputerPlayer());
//if(card.isBasicLand()) {
//String PC = card.getSVar("PicCount");
//int n = 0;
//if (PC.matches("[0-9][0-9]?"))
// n = Integer.parseInt(PC);
//if (n > 1)
// card.setRandomPicture(generator.nextInt(n));
//System.out.println("computer random number:" + card.getRandomPicture());
//}
if (!setCode.equals(""))
card.setCurSetCode(setCode);
else if ((card.getSets().size() > 0)) // && card.getCurSetCode().equals(""))
card.setRandomSetCode();
if (!card.getCurSetCode().equals("")) {
int n = SetInfoUtil.getSetInfoCode(card.getSets(), card.getCurSetCode()).PicCount;
if (n > 1)
card.setRandomPicture(generator.nextInt(n - 1) + 1);
int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getSet()).getCopiesCount();
if (cntVariants > 1) { card.setRandomPicture(generator.nextInt(cntVariants - 1) + 1); }
card.setImageFilename(CardUtil.buildFilename(card));
}
// Assign random foiling on approximately 1:20 cards
if (Constant.Runtime.RndCFoil[0] && Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed)) {
if (MyRandom.percentTrue(5))
card.setFoil(MyRandom.random.nextInt(9) + 1);
if (cardPrinted.isFoil() || (canRandomFoil && MyRandom.percentTrue(5))) {
int iFoil = MyRandom.random.nextInt(9) + 1;
card.setFoil(iFoil);
}
if (cardPile.getKey().isFoil()) { card.setFoil(MyRandom.random.nextInt(9) + 1); }
AllZone.getComputerLibrary().add(card);

View File

@@ -394,7 +394,7 @@ public class Gui_DownloadSetPictures_LQ extends DefaultBoundedRangeModel impleme
for (int j = 0; j < cSetInfo.size(); j++) {
c.setCurSetCode(cSetInfo.get(j).Code);
String SC3 = c.getCurSetCode();
String SC2 = SetInfoUtil.getCode2ByCode(c.getCurSetCode());
String SC2 = SetUtils.getCode2ByCode(c.getCurSetCode());
int n = 0;
if (cSetInfo.get(j).PicCount > 0) {

View File

@@ -402,7 +402,7 @@ public class Gui_MigrateLocalMWSSetPictures_HQ extends DefaultBoundedRangeModel
for (int j = 0; j < cSetInfo.size(); j++) {
c.setCurSetCode(cSetInfo.get(j).Code);
String SC3 = c.getCurSetCode();
String SC2 = SetInfoUtil.getCode2ByCode(c.getCurSetCode());
String SC2 = SetUtils.getCode2ByCode(c.getCurSetCode());
int n = 0;
if (cSetInfo.get(j).PicCount > 0) {

View File

@@ -1,353 +0,0 @@
package forge;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import net.slightlymagic.maxmtg.Predicate;
import forge.card.CardSet;
/**
* <p>SetInfoUtil class.</p>
*
* @author Forge
* @version $Id$
*/
public final class SetInfoUtil {
private SetInfoUtil() {
throw new AssertionError();
}
/** Constant <code>setData</code>. */
private static HashMap<String, CardSet> setsByCode = new HashMap<String, CardSet>();
private static List<CardSet> allSets = new ArrayList<CardSet>();
/**
* <p>loadSetData.</p>
*/
private static void loadSetData() {
ArrayList<String> fData = FileUtil.readFile("res/blockdata/setdata.txt");
for (String s : fData) {
if (s.length() < 6) { continue; }
String[] sParts = s.trim().split("\\|");
String code = null, code2 = null, name = null;
int index = -1;
String alias = null;
for (String sPart : sParts) {
String[] kv = sPart.split(":", 2);
String key = kv[0].toLowerCase();
if ("code3".equals(key)) {
code = kv[1];
} else if ("code2".equals(key)) {
code2 = kv[1];
} else if ("name".equals(key)) {
name = kv[1];
} else if ("index".equals(key)) {
index = Integer.parseInt(kv[1]);
} else if ("alias".equals(key)) {
alias = kv[1];
}
}
CardSet set = new CardSet(index, name, code, code2);
setsByCode.put(code, set);
if (alias != null) { setsByCode.put(alias, set); }
allSets.add(set);
}
Collections.sort(allSets);
}
/**
*
* TODO Write javadoc for this method.
* @param code a String
* @return a CardSet
*/
public static CardSet getSetByCode(final String code) {
if (setsByCode.isEmpty()) { loadSetData(); }
return setsByCode.get(code);
}
/**
*
* TODO Write javadoc for this method.
* @param code a String
* @return a CardSet
*/
public static CardSet getSetByCodeOrThrow(final String code) {
if (setsByCode.isEmpty()) { loadSetData(); }
CardSet set = setsByCode.get(code);
if (null == set) { throw new RuntimeException(String.format("Set with code '%s' not found", code)); }
return set;
}
/**
*
* TODO Write javadoc for this method.
* @return a List<String>
*/
public static List<String> getCodeList() {
if (setsByCode.isEmpty()) { loadSetData(); }
return new ArrayList<String>(setsByCode.keySet());
}
/**
* <p>getSetNameList.</p>
*
* @return a {@link java.util.ArrayList} object.
*/
public static List<String> getNameList() {
if (setsByCode.isEmpty()) { loadSetData(); }
return Predicate.getTrue(CardSet.class).select(allSets, CardSet.fn1, CardSet.fnGetName);
}
/**
*
* TODO Write javadoc for this method.
* @param setName a String
* @return a String
*/
public static String getCode3ByName(final String setName) {
if (setsByCode.isEmpty()) { loadSetData(); }
for (CardSet s : setsByCode.values()) {
if (s.getName().equals(setName)) { return s.getCode(); }
}
return "";
}
/**
*
* TODO Write javadoc for this method.
* @param code a String
* @return a String
*/
public static String getCode2ByCode(final String code) {
if (setsByCode.isEmpty()) { loadSetData(); }
CardSet set = setsByCode.get(code);
return set == null ? "" : set.getCode2();
}
/**
* <p>getNameByCode.</p>
*
* @param code a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getNameByCode(final String code) {
if (setsByCode.isEmpty()) { loadSetData(); }
CardSet set = setsByCode.get(code);
return set == null ? "" : set.getName();
}
/**
* <p>getMostRecentSet.</p>
*
* @param alSI a {@link java.util.ArrayList} object.
* @return a {@link java.lang.String} object.
*/
public static String getMostRecentSet(final ArrayList<SetInfo> alSI) {
if (setsByCode.isEmpty()) { loadSetData(); }
int size = alSI.size();
if (size == 0) { return ""; }
if (size == 1) { return alSI.get(0).Code; }
CardSet[] sets = new CardSet[size];
for (int i = 0; i < size; i++) { sets[i] = setsByCode.get(alSI.get(i).Code); }
Arrays.sort(sets);
return sets[sets.length - 1].getCode();
}
/**
* <p>getSetInfoCode.</p>
*
* @param setList a {@link java.util.ArrayList} object.
* @param setCode a {@link java.lang.String} object.
* @return a {@link forge.SetInfo} object.
*/
public static SetInfo getSetInfoCode(final ArrayList<SetInfo> setList, final String setCode) {
SetInfo si;
for (int i = 0; i < setList.size(); i++) {
si = setList.get(i);
if (si.Code.equals(setCode)) { return si; }
}
return null;
}
/**
* <p>getIndexByCode.</p>
*
* @param code a {@link java.lang.String} object.
* @return a int.
*/
public static int getIndexByCode(final String code) {
if (setsByCode.isEmpty()) { loadSetData(); }
CardSet set = setsByCode.get(code);
return set == null ? 0 : set.getIndex();
}
/** Constant <code>blockData</code>. */
private static ArrayList<HashMap<String, String>> blockData = new ArrayList<HashMap<String, String>>();
/**
* <p>loadBlockData.</p>
*/
private static void loadBlockData() {
ArrayList<String> fData = FileUtil.readFile("res/blockdata/blocks.txt");
if (fData.size() > 0) {
for (int i = 0; i < fData.size(); i++) {
String s = fData.get(i);
if (s.length() > 5) {
HashMap<String, String> sm = new HashMap<String, String>();
String[] ss = s.split("\\|");
for (int j = 0; j < ss.length; j++) {
String[] kv = ss[j].split(":");
sm.put(kv[0], kv[1]);
}
blockData.add(sm);
}
}
}
}
/**
* <p>getBlockNameList.</p>
*
* @return a {@link java.util.ArrayList} object.
*/
public static ArrayList<String> getBlockNameList() {
ArrayList<String> bnl = new ArrayList<String>();
if (blockData.size() == 0) {
loadBlockData();
}
for (int i = 0; i < blockData.size(); i++) {
bnl.add(blockData.get(i).get("Name"));
}
return bnl;
}
/**
* <p>getSetsBlockName.</p>
*
* @param blockName a {@link java.lang.String} object.
* @return a {@link java.util.ArrayList} object.
*/
public static ArrayList<String> getSetsBlockName(final String blockName) {
ArrayList<String> sets = new ArrayList<String>();
if (blockData.size() == 0) {
loadBlockData();
}
for (int i = 0; i < blockData.size(); i++) {
if (blockData.get(i).get("Name").equals(blockName)) {
if (blockData.get(i).containsKey("Set0")) {
sets.add(blockData.get(i).get("Set0"));
}
if (blockData.get(i).containsKey("Set1")) {
sets.add(blockData.get(i).get("Set1"));
}
if (blockData.get(i).containsKey("Set2")) {
sets.add(blockData.get(i).get("Set2"));
}
}
}
return sets;
}
/**
* <p>getDraftPackCount.</p>
*
* @param blockName a {@link java.lang.String} object.
* @return a int.
*/
public static int getDraftPackCount(final String blockName) {
if (blockData.size() == 0) {
loadBlockData();
}
for (int i = 0; i < blockData.size(); i++) {
if (blockData.get(i).get("Name").equals(blockName)) {
return Integer.parseInt(blockData.get(i).get("DraftPacks"));
}
}
return 0;
}
/**
* <p>getSealedPackCount.</p>
*
* @param blockName a {@link java.lang.String} object.
* @return a int.
*/
public static int getSealedPackCount(final String blockName) {
if (blockData.size() == 0) {
loadBlockData();
}
for (int i = 0; i < blockData.size(); i++) {
if (blockData.get(i).get("Name").equals(blockName)) {
return Integer.parseInt(blockData.get(i).get("SealedPacks"));
}
}
return 0;
}
/**
* <p>getLandCode.</p>
*
* @param blockName a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getLandCode(final String blockName) {
if (blockData.size() == 0) {
loadBlockData();
}
for (int i = 0; i < blockData.size(); i++) {
if (blockData.get(i).get("Name").equals(blockName)) {
return blockData.get(i).get("LandSetCode");
}
}
return "M11"; // default, should never happen IRL
}
/**
*
* TODO Write javadoc for this method.
* @param fmt a String
* @return an ArrayList<String>
*/
public static ArrayList<String> getLegalSets(final String fmt) {
ArrayList<String> lglSets = new ArrayList<String>();
lglSets = FileUtil.readFile("res/blockdata/" + fmt + ".txt");
return lglSets;
}
}

View File

@@ -0,0 +1,152 @@
package forge;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import net.slightlymagic.maxmtg.Predicate;
import forge.card.CardBlock;
import forge.card.CardSet;
/**
* <p>SetInfoUtil class.</p>
*
* @author Forge
* @version $Id$
*/
public final class SetUtils {
private SetUtils() {
throw new AssertionError();
}
/** Constant <code>setData</code>. */
private static HashMap<String, CardSet> setsByCode = new HashMap<String, CardSet>();
private static List<CardSet> allSets = new ArrayList<CardSet>();
private static List<CardBlock> allBlocks = new ArrayList<CardBlock>();
// Perform that first of all
static {
loadSetData();
loadBlockData();
}
public static CardSet getSetByCode(final String code) {
return setsByCode.get(code);
}
public static CardSet getSetByCodeOrThrow(final String code) {
CardSet set = setsByCode.get(code);
if (null == set) { throw new RuntimeException(String.format("Set with code '%s' not found", code)); }
return set;
}
// deckeditor again
public static List<String> getNameList() {
return Predicate.getTrue(CardSet.class).select(allSets, CardSet.fn1, CardSet.fnGetName);
}
// deckeditor needs this
public static String getCode3ByName(final String setName) {
for (CardSet s : setsByCode.values()) {
if (s.getName().equals(setName)) { return s.getCode(); }
}
return "";
}
// used by image generating code
public static String getCode2ByCode(final String code) {
CardSet set = setsByCode.get(code);
return set == null ? "" : set.getCode2();
}
public static List<CardBlock> getBlocks() {
if (allBlocks.isEmpty()) { loadBlockData(); }
return Collections.unmodifiableList(allBlocks);
}
// parser code - quite boring.
private static void loadSetData() {
ArrayList<String> fData = FileUtil.readFile("res/blockdata/setdata.txt");
for (String s : fData) {
if (StringUtils.isBlank(s)) { continue; }
String[] sParts = s.trim().split("\\|");
String code = null, code2 = null, name = null;
int index = -1;
String alias = null;
for (String sPart : sParts) {
String[] kv = sPart.split(":", 2);
String key = kv[0].toLowerCase();
if ("code3".equals(key)) {
code = kv[1];
} else if ("code2".equals(key)) {
code2 = kv[1];
} else if ("name".equals(key)) {
name = kv[1];
} else if ("index".equals(key)) {
index = Integer.parseInt(kv[1]);
} else if ("alias".equals(key)) {
alias = kv[1];
}
}
CardSet set = new CardSet(index, name, code, code2);
setsByCode.put(code, set);
if (alias != null) { setsByCode.put(alias, set); }
allSets.add(set);
}
Collections.sort(allSets);
}
private static void loadBlockData() {
ArrayList<String> fData = FileUtil.readFile("res/blockdata/blocks.txt");
for (String s : fData) {
if (StringUtils.isBlank(s)) { continue; }
String[] sParts = s.trim().split("\\|");
String name = null;
int index = -1;
List<CardSet> sets = new ArrayList<CardSet>(4);
CardSet landSet = null;
int draftBoosters = 3;
int sealedBoosters = 6;
for (String sPart : sParts) {
String[] kv = sPart.split(":", 2);
String key = kv[0].toLowerCase();
if ("name".equals(key)) {
name = kv[1];
} else if ("index".equals(key)) {
index = Integer.parseInt(kv[1]);
} else if ("set0".equals(key) || "set1".equals(key) || "set2".equals(key)) {
sets.add(getSetByCodeOrThrow(kv[1]));
} else if ("landsetcode".equals(key)) {
landSet = getSetByCodeOrThrow(kv[1]);
} else if ("draftpacks".equals(key)) {
draftBoosters = Integer.parseInt(kv[1]);
} else if ("sealedpacks".equals(key)) {
sealedBoosters = Integer.parseInt(kv[1]);
}
}
allBlocks.add(new CardBlock(index, name, sets , landSet, draftBoosters, sealedBoosters));
}
Collections.reverse(allBlocks);
}
}

View File

@@ -0,0 +1,77 @@
package forge.card;
import java.util.List;
/**
* This is a CardBlock class.
*/
public class CardBlock implements Comparable<CardBlock> {
private static final CardSet[] EMPTY_SET_ARRAY = new CardSet[]{};
private final int orderNum;
private final String name;
private final CardSet[] sets;
private final CardSet landSet;
private final int cntBoostersDraft;
private final int cntBoostersSealed;
public CardBlock(final int index, final String name, final List<CardSet> sets,
final CardSet landSet, final int cntBoostersDraft, final int cntBoostersSealed) {
this.orderNum = index;
this.name = name;
this.sets = sets.toArray(EMPTY_SET_ARRAY);
this.landSet = landSet;
this.cntBoostersDraft = cntBoostersDraft;
this.cntBoostersSealed = cntBoostersSealed;
}
public final String getName() {
return name;
}
public final CardSet[] getSets() {
return sets;
}
public final CardSet getLandSet() {
return landSet;
}
public final int getCntBoostersDraft() {
return cntBoostersDraft;
}
public final int getCntBoostersSealed() {
return cntBoostersSealed;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((landSet == null) ? 0 : landSet.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) { return true; }
if (obj == null) { return false; }
if (getClass() != obj.getClass()) { return false; }
CardBlock other = (CardBlock) obj;
if (!landSet.equals(other.landSet)) { return false; }
if (!name.equals(other.name)) { return false; }
return true;
}
@Override
public int compareTo(final CardBlock o) {
return this.orderNum - o.orderNum;
}
@Override
public String toString() { return name; }
}

View File

@@ -1,5 +1,7 @@
package forge;
package forge.game.limited;
import forge.Card;
import forge.CardList;
import forge.card.CardPoolView;
import forge.card.CardPrinted;
import forge.deck.Deck;

View File

@@ -1,5 +1,15 @@
package forge;
package forge.game.limited;
import forge.AllZone;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.Constant;
import forge.MyRandom;
import forge.Constant.Color;
import forge.Constant.GameType;
import forge.Constant.Runtime;
import forge.card.spellability.Ability_Mana;
import forge.deck.Deck;
@@ -284,7 +294,7 @@ public class BoosterDraftAI {
* <p>buildDeck.</p>
*
* @param dList a {@link forge.CardList} object.
* @param pClrs a {@link forge.DeckColors} object.
* @param pClrs a {@link forge.game.limited.DeckColors} object.
* @return a {@link forge.deck.Deck} object.
*/
private Deck buildDeck(CardList dList, DeckColors pClrs) {
@@ -552,8 +562,9 @@ public class BoosterDraftAI {
public BoosterDraftAI() {
//choose colors for decks
int[] n = getDeckColors();
for (int i = 0; i < n.length; i++)
for (int i = 0; i < n.length; i++) {
deckColor[i] = deckColorChoices[n[i]];
}
//initilize color map
colorToLand.put(Constant.Color.Black, "Swamp");
@@ -574,19 +585,14 @@ public class BoosterDraftAI {
private ArrayList<DeckColors> playerColors = new ArrayList<DeckColors>();
//all 10 two color combinations
private String[][] deckColorChoices =
{
{Constant.Color.Black, Constant.Color.Blue},
{Constant.Color.Black, Constant.Color.Green},
{Constant.Color.Black, Constant.Color.Red},
{Constant.Color.Black, Constant.Color.White},
private String[][] deckColorChoices = {
{Constant.Color.Black, Constant.Color.Blue}, {Constant.Color.Black, Constant.Color.Green},
{Constant.Color.Black, Constant.Color.Red}, {Constant.Color.Black, Constant.Color.White},
{Constant.Color.Blue, Constant.Color.Green},
{Constant.Color.Blue, Constant.Color.Red},
{Constant.Color.Blue, Constant.Color.Green}, {Constant.Color.Blue, Constant.Color.Red},
{Constant.Color.Blue, Constant.Color.White},
{Constant.Color.Green, Constant.Color.Red},
{Constant.Color.Green, Constant.Color.White},
{Constant.Color.Green, Constant.Color.Red}, {Constant.Color.Green, Constant.Color.White},
{Constant.Color.Red, Constant.Color.White}
};
@@ -639,34 +645,10 @@ public class BoosterDraftAI {
else if (b.getCurSetRarity().equals("Mythic"))
rarB = 8;
/**
* <p>Constructor for deckColors.</p>
*
* @param c1 a {@link java.lang.String} object.
* @param c2 a {@link java.lang.String} object.
* @param sp a {@link java.lang.String} object.
*/
int scoreA = ((attA + defA) / cmcA) + keyA + abA + trgA + rarA;
int scoreB = ((attB + defB) / cmcB) + keyB + abB + trgB + rarB;
if (scoreA == scoreB)
return 0;
/**
* <p>Constructor for deckColors.</p>
*/
else if (scoreA > scoreB)
return 1;
else if (scoreB > scoreA)
return -1;
/**
* <p>ColorToMana.</p>
*
* @param color a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
return 0;
return scoreA - scoreB;
}
};
}//BoosterDraftAI()

View File

@@ -1,8 +1,18 @@
package forge;
package forge.game.limited;
import forge.AllZone;
import forge.BoosterGenerator;
import forge.Card;
import forge.CardList;
import forge.Constant;
import forge.FileUtil;
import forge.SetUtils;
import forge.Constant.Runtime;
import forge.card.CardBlock;
import forge.card.CardPool;
import forge.card.CardPoolView;
import forge.card.CardPrinted;
import forge.card.CardSet;
import forge.deck.Deck;
import forge.gui.GuiUtils;
@@ -20,8 +30,8 @@ import javax.swing.JOptionPane;
public class BoosterDraft_1 implements BoosterDraft {
private final BoosterDraftAI draftAI = new BoosterDraftAI();
private static final int nPlayers = 8;
//private static int boosterPackSize = 15;
private static int stopCount = 45; //boosterPackSize * 3;//should total of 45
//private static int boosterPackSize = 14; // 10 com + 3 unc + 1 rare/myth
private static int stopCount = 42; //boosterPackSize * 3;//should total of 42 - because you don't draft lands
private int currentCount = 0;
private List<List<CardPrinted>> pack; //size 8
@@ -68,61 +78,50 @@ public class BoosterDraft_1 implements BoosterDraft {
LandSetCode[0] = AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer()).getMostRecentSet();
} else if (draftType.equals("Block")) { // Draft from cards by block or set
ArrayList<String> bNames = SetInfoUtil.getBlockNameList();
ArrayList<String> rbNames = new ArrayList<String>();
for (int i = bNames.size() - 1; i >= 0; i--) {
rbNames.add(bNames.get(i));
}
List<CardBlock> blocks = SetUtils.getBlocks();
Object o = GuiUtils.getChoice("Choose Block", rbNames.toArray());
Object o = GuiUtils.getChoice("Choose Block", blocks.toArray());
CardBlock block = (CardBlock) o;
ArrayList<String> blockSets = SetInfoUtil.getSetsBlockName(o.toString());
int nPacks = SetInfoUtil.getDraftPackCount(o.toString());
CardSet[] cardSets = block.getSets();
String[] sets = new String[cardSets.length];
for (int k = cardSets.length - 1; k >= 0 ; --k) { sets[k] = cardSets[k].getCode();}
int nPacks = block.getCntBoostersDraft();
ArrayList<String> setCombos = new ArrayList<String>();
//if (blockSets.get(1).equals("") && blockSets.get(2).equals("")) { // Block only has one set
if (blockSets.size() == 1) {
BoosterGenerator bpOne = new BoosterGenerator(blockSets.get(0));
int n = 0;
for (int i = 0; i < nPacks; i++) {
packs.add(bpOne);
n += bpOne.getBoosterPackSize();
if (sets.length >= 2) {
setCombos.add(String.format("%s/%s/%s", sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s/%s/%s", sets[1], sets[0], sets[0]));
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[0]));
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[1]));
}
stopCount = n;
} else {
//if (!blockSets.get(1).equals("") && blockSets.get(2).equals("")) { // Block only has two sets
if (blockSets.size() == 2) {
setCombos.add(String.format("%s/%s/%s", blockSets.get(0), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(1)));
}
//else if (!blockSets.get(1).equals("") && !blockSets.get(2).equals("")) { // Block has three sets
else if (blockSets.size() == 3) {
setCombos.add(String.format("%s/%s/%s", blockSets.get(0), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(2), blockSets.get(1), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(1)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(2), blockSets.get(2), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(2), blockSets.get(2), blockSets.get(1)));
setCombos.add(String.format("%s/%s/%s", blockSets.get(2), blockSets.get(2), blockSets.get(2)));
if (sets.length >= 3) {
setCombos.add(String.format("%s/%s/%s", sets[2], sets[1], sets[0]));
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[0]));
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[1]));
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[2]));
}
int sumCards = 0;
if (sets.length > 1) {
Object p = GuiUtils.getChoice("Choose Set Combination", setCombos.toArray());
String[] pp = p.toString().split("/");
int n = 0;
for (int i = 0; i < nPacks; i++) {
BoosterGenerator bpMulti = new BoosterGenerator(pp[i]);
packs.add(bpMulti);
n += bpMulti.getBoosterPackSize();
sumCards += bpMulti.getBoosterPackSize();
}
stopCount = n;
} else {
BoosterGenerator bpOne = new BoosterGenerator(sets[0]);
for (int i = 0; i < nPacks; i++) {
packs.add(bpOne);
sumCards += bpOne.getBoosterPackSize();
}
}
stopCount = sumCards;
LandSetCode[0] = block.getLandSet().getCode();
LandSetCode[0] = SetInfoUtil.getLandCode(o.toString());
} else if (draftType.equals("Custom")) { // Draft from user-defined cardpools
String[] dList;
ArrayList<CustomDraft> customs = new ArrayList<CustomDraft>();

View File

@@ -1,4 +1,4 @@
package forge;
package forge.game.limited;
/**
* <p>CCnt class.</p>

View File

@@ -1,4 +1,6 @@
package forge;
package forge.game.limited;
import forge.AllZone;
/**
* <p>CustomDraft class.</p>

View File

@@ -1,4 +1,6 @@
package forge;
package forge.game.limited;
import forge.Constant;
/**
* Created by IntelliJ IDEA.

View File

@@ -1,6 +1,19 @@
package forge;
package forge.game.limited;
import forge.AllZone;
import forge.BoosterGenerator;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.Constant;
import forge.FileUtil;
import forge.MyRandom;
import forge.SetUtils;
import forge.card.CardBlock;
import forge.card.CardDb;
import forge.card.CardPool;
import forge.card.CardSet;
import forge.card.spellability.Ability_Mana;
import forge.deck.Deck;
import forge.gui.GuiUtils;
@@ -8,6 +21,7 @@ import forge.gui.GuiUtils;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* <p>SealedDeck class.</p>
@@ -32,49 +46,44 @@ public class SealedDeck {
for (int i = 0; i < 6; i++)
packs.add(bpFull);
LandSetCode[0] = AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer()).getMostRecentSet();
LandSetCode[0] = CardDb.instance().getCard("Plains").getSet();
} else if (sealedType.equals("Block")) {
ArrayList<String> bNames = SetInfoUtil.getBlockNameList();
ArrayList<String> rbNames = new ArrayList<String>();
for (int i = bNames.size() - 1; i >= 0; i--)
rbNames.add(bNames.get(i));
Object o = GuiUtils.getChoice("Choose Block", rbNames.toArray());
Object o = GuiUtils.getChoice("Choose Block", SetUtils.getBlocks().toArray());
CardBlock block = (CardBlock) o;
ArrayList<String> blockSets = SetInfoUtil.getSetsBlockName(o.toString());
int nPacks = SetInfoUtil.getSealedPackCount(o.toString());
CardSet[] cardSets = block.getSets();
String[] sets = new String[cardSets.length];
for (int k = cardSets.length - 1; k >= 0 ; --k) { sets[k] = cardSets[k].getCode();}
ArrayList<String> setCombos = new ArrayList<String>();
int nPacks = block.getCntBoostersSealed();
//if (blockSets.get(1).equals("") && blockSets.get(2).equals("")) { // Block only has one set
if (blockSets.size() == 1) {
BoosterGenerator bpOne = new BoosterGenerator(blockSets.get(0));
for (int i = 0; i < nPacks; i++)
packs.add(bpOne);
} else {
//if (!blockSets.get(1).equals("") && blockSets.get(2).equals("")) { // Block only has two sets
if (blockSets.size() == 2) {
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0)));
List<String> setCombos = new ArrayList<String>();
if (sets.length >= 2) {
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", sets[0], sets[0], sets[0], sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", sets[1], sets[1], sets[0], sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", sets[1], sets[1], sets[1], sets[0], sets[0], sets[0]));
}
//else if (!blockSets.get(1).equals("") && !blockSets.get(2).equals("")) { // Block has three sets
else if (blockSets.size() == 3) {
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", blockSets.get(1), blockSets.get(1), blockSets.get(0), blockSets.get(0), blockSets.get(0), blockSets.get(0)));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", blockSets.get(2), blockSets.get(2), blockSets.get(1), blockSets.get(1), blockSets.get(0), blockSets.get(0)));
if (sets.length >= 3) {
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", sets[2], sets[2], sets[2], sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s/%s/%s/%s/%s/%s", sets[2], sets[2], sets[1], sets[1], sets[0], sets[0]));
}
if (sets.length > 1) {
Object p = GuiUtils.getChoice("Choose Set Combination", setCombos.toArray());
String pp[] = p.toString().split("/");
String[] pp = p.toString().split("/");
for (int i = 0; i < nPacks; i++) {
BoosterGenerator bpMulti = new BoosterGenerator(pp[i]);
packs.add(bpMulti);
}
} else {
BoosterGenerator bpOne = new BoosterGenerator(sets[0]);
for (int i = 0; i < nPacks; i++) { packs.add(bpOne); }
}
LandSetCode[0] = blockSets.get(0);
LandSetCode[0] = block.getLandSet().getCode();
} else if (sealedType.equals("Custom")) {
String dList[];

View File

@@ -28,7 +28,7 @@ import net.slightlymagic.maxmtg.Predicate;
import net.slightlymagic.maxmtg.Predicate.StringOp;
import forge.Command;
import forge.Constant;
import forge.SetInfoUtil;
import forge.SetUtils;
import forge.card.CardRules;
import forge.card.CardDb;
import forge.card.CardPrinted;
@@ -278,8 +278,8 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
searchSetCombo.removeAllItems();
searchSetCombo.addItem("");
for (int i = 0; i < SetInfoUtil.getNameList().size(); i++)
searchSetCombo.addItem(SetInfoUtil.getNameList().get(i));
for (int i = 0; i < SetUtils.getNameList().size(); i++)
searchSetCombo.addItem(SetUtils.getNameList().get(i));
searchSetCombo.addItemListener(itemListenerUpdatesDisplay);
this.getContentPane().add(searchSetCombo, "wmin 150, grow");
@@ -326,7 +326,7 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
}
if (searchSetCombo.getSelectedIndex() != 0) {
String setCode = SetInfoUtil.getCode3ByName(searchSetCombo.getSelectedItem().toString());
String setCode = SetUtils.getCode3ByName(searchSetCombo.getSelectedItem().toString());
rules.add(CardRules.Predicates.wasPrintedInSet(setCode));
}

View File

@@ -1,7 +1,6 @@
package forge.gui.deckeditor;
import forge.AllZone;
import forge.BoosterDraft;
import forge.Constant;
import forge.FileUtil;
import forge.HttpUtil;
@@ -11,6 +10,7 @@ import forge.card.CardPrinted;
import forge.deck.Deck;
import forge.deck.DeckManager;
import forge.error.ErrorViewer;
import forge.game.limited.BoosterDraft;
import forge.gui.GuiUtils;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
@@ -44,7 +44,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
/**
* <p>showGui.</p>
*
* @param in_boosterDraft a {@link forge.BoosterDraft} object.
* @param in_boosterDraft a {@link forge.game.limited.BoosterDraft} object.
*/
public void showGui(BoosterDraft in_boosterDraft) {
boosterDraft = in_boosterDraft;
@@ -97,16 +97,23 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
top.setup(columns, cardView);
bottom.setup(columns, cardView);
this.setSize(1024, 740);
this.setSize(980, 740);
GuiUtils.centerFrame(this);
this.setResizable(false);
top.getTable().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final KeyEvent e) {
if (e.getKeyChar() == ' ') { jButton1_actionPerformed(null); }
}
});
}
public DeckEditorDraft() {
try {
top = new TableWithCards("Choose one card", false);
bottom = new TableWithCards("Previously Picked Cards", true);
bottom = new TableWithCards("Previously picked cards", true);
filterBoxes = null;
cardView = new CardPanelLite();
jbInit();
@@ -124,11 +131,11 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
top.getTableDecorated().setBounds(new Rectangle(19, 28, 661, 344));
bottom.getTableDecorated().setBounds(new Rectangle(19, 478, 661, 184));
cardView.setBounds(new Rectangle(693, 23, 239, 665));
top.getTableDecorated().setBounds(new Rectangle(19, 28, 680, 344));
bottom.getTableDecorated().setBounds(new Rectangle(19, 478, 680, 184));
bottom.getLabel().setBounds(new Rectangle(19, 680, 665, 31));
bottom.getLabel().setBounds(new Rectangle(19, 665, 665, 31));
cardView.setBounds(new Rectangle(715, 23, 240, 666));
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
this.setTitle("Booster Draft");
@@ -197,7 +204,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
private void showChoices(CardPoolView list) {
top.setDeck(list);
cardView.showCard(null);
top.fixSelection(0);
}//showChoices()
/**

View File

@@ -3,7 +3,7 @@ package forge.gui.deckeditor;
import java.util.Map.Entry;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.SetInfoUtil;
import forge.SetUtils;
import forge.card.CardPrinted;
/**
@@ -71,7 +71,7 @@ public abstract class PresetColumns {
@SuppressWarnings("rawtypes")
public static final Lambda1<Comparable, Entry<CardPrinted, Integer>> fnSetCompare =
new Lambda1<Comparable, Entry<CardPrinted, Integer>>() { @Override
public Comparable apply(final Entry<CardPrinted, Integer> from) { return SetInfoUtil.getSetByCode(from.getKey().getSet()); } };
public Comparable apply(final Entry<CardPrinted, Integer> from) { return SetUtils.getSetByCode(from.getKey().getSet()); } };
public static final Lambda1<Object, Entry<CardPrinted, Integer>> fnSetGet =
new Lambda1<Object, Entry<CardPrinted, Integer>>() { @Override
public Object apply(final Entry<CardPrinted, Integer> from) { return from.getKey().getSet(); } };

View File

@@ -160,4 +160,5 @@ public final class TableWithCards {
public CardPoolView getCards() {
return pool;
}
}

View File

@@ -9,6 +9,8 @@ import forge.deck.DeckManager;
import forge.deck.generate.*;
import forge.error.BugzReporter;
import forge.error.ErrorViewer;
import forge.game.limited.BoosterDraft_1;
import forge.game.limited.SealedDeck;
import forge.gui.GuiUtils;
import forge.gui.ListChooser;
import forge.gui.deckeditor.DeckEditorDraft;