mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Added formats filter to deckeditor
removed hardcoded formats where they were known to me
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -9781,6 +9781,7 @@ src/main/java/forge/error/ErrorViewer.java svneol=native#text/plain
|
||||
src/main/java/forge/error/ExceptionHandler.java svneol=native#text/plain
|
||||
src/main/java/forge/error/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/game/GameEndReason.java -text
|
||||
src/main/java/forge/game/GameFormat.java -text
|
||||
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
|
||||
@@ -9928,6 +9929,7 @@ src/main/java/net/slightlymagic/braids/util/progress_monitor/BraidsProgressMonit
|
||||
src/main/java/net/slightlymagic/braids/util/progress_monitor/StderrProgressMonitor.java svneol=native#text/plain
|
||||
src/main/java/net/slightlymagic/braids/util/progress_monitor/package-info.java svneol=native#text/plain
|
||||
src/main/java/net/slightlymagic/maxmtg/Predicate.java -text
|
||||
src/main/java/net/slightlymagic/maxmtg/PredicateString.java -text
|
||||
src/main/java/treeProperties/PropertyElement.java svneol=native#text/plain
|
||||
src/main/java/treeProperties/PropertyType.java svneol=native#text/plain
|
||||
src/main/java/treeProperties/TreeProperties.java svneol=native#text/plain
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name:Standard|Sets:ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12|Banned:Storeforge Mystic;Jace, the Mind Sculptor
|
||||
Name:Standard|Sets:ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12|Banned:Storeforge Mystic; Jace, the Mind Sculptor
|
||||
Name:Extended|Sets:LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12
|
||||
Name:Modern|Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12|Banned:Ancestral Vision; Ancient Den; Bitterblossom; Chrome Mox; Dark Depths; Dread Return; Glimpse of Nature; Golgari Grave-Troll; Great Furnace; Hypergenesis; Jace, the Mind Sculptor; Mental Misstep; Seat of the Synod; Sensei's Divining Top; Stoneforge Mystic; Skullclamp; Sword of the Meek; Tree of Tales; Umezawa's Jitte; Valakut, the Molten Pinnacle; Vault of Whispers
|
||||
Name:Legacy|Sets:(all)|Banned:Amulet of Quoz; Ancestral Recall; Balance; Bazaar of Baghdad; Black Lotus; Black Vise; Bronze Tablet; Channel; Chaos Orb; Contract from Below; Darkpact; Demonic Attorney; Demonic Consultation; Demonic Tutor; Earthcraft; Falling Star; Fastbond; Flash; Frantic Search; Goblin Recruiter; Gush; Hermit Druid; Imperial Seal; Jeweled Bird; Land Tax; Library of Alexandria; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mind Twist; Mind's Desire; Mishra's Workshop; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystical Tutor; Necropotence; Oath of Druids; Rebirth; Shahrazad; Skullclamp; Sol Ring; Strip Mine; Survival of the Fittest; Tempest Efreet; Time Vault; Time Walk; Timetwister; Timmerian Fiends; Tinker; Tolarian Academy; Vampiric Tutor; Wheel of Fortune; Windfall; Worldgorger Dragon; Yawgmoth's Bargain; Yawgmoth's Will
|
||||
Name:Vintage|Sets:(all)|Banned:Amulet of Quoz; Bronze Tablet; Chaos Orb; Contract from Below; Darkpact; Demonic Attorney; Falling Star; Jeweled Bird; Rebirth; Shahrazad; Tempest Efreet; Timmerian Fiends
|
||||
Name:Legacy|Banned:Amulet of Quoz; Ancestral Recall; Balance; Bazaar of Baghdad; Black Lotus; Black Vise; Bronze Tablet; Channel; Chaos Orb; Contract from Below; Darkpact; Demonic Attorney; Demonic Consultation; Demonic Tutor; Earthcraft; Falling Star; Fastbond; Flash; Frantic Search; Goblin Recruiter; Gush; Hermit Druid; Imperial Seal; Jeweled Bird; Land Tax; Library of Alexandria; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mind Twist; Mind's Desire; Mishra's Workshop; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystical Tutor; Necropotence; Oath of Druids; Rebirth; Shahrazad; Skullclamp; Sol Ring; Strip Mine; Survival of the Fittest; Tempest Efreet; Time Vault; Time Walk; Timetwister; Timmerian Fiends; Tinker; Tolarian Academy; Vampiric Tutor; Wheel of Fortune; Windfall; Worldgorger Dragon; Yawgmoth's Bargain; Yawgmoth's Will
|
||||
Name:Vintage|Banned:Amulet of Quoz; Bronze Tablet; Chaos Orb; Contract from Below; Darkpact; Demonic Attorney; Falling Star; Jeweled Bird; Rebirth; Shahrazad; Tempest Efreet; Timmerian Fiends
|
||||
@@ -3,12 +3,14 @@ package forge;
|
||||
import forge.card.CardPrinted;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.game.GameEndReason;
|
||||
import forge.game.GameFormat;
|
||||
import forge.game.GameLossReason;
|
||||
import forge.game.GamePlayerRating;
|
||||
import forge.game.GameSummary;
|
||||
import forge.game.PlayerIndex;
|
||||
import forge.gui.CardListViewer;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.gui.ListChooser;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.properties.NewConstants.LANG.Gui_WinLose.WINLOSE_TEXT;
|
||||
@@ -391,19 +393,11 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
||||
* TODO Write javadoc for this method.
|
||||
*/
|
||||
protected final void giveBooster() {
|
||||
String[] boosterTypes = {"Legacy", "Extended", "Standard"};
|
||||
String boosterType = GuiUtils.getChoice("Choose prize booster format", boosterTypes);
|
||||
List<String> setsToGive = null;
|
||||
if (boosterTypes[2].equals(boosterType)) { // T2
|
||||
setsToGive = new ArrayList<String>();
|
||||
setsToGive.addAll(Arrays.asList(new String[]{"M12", "NPH", "MBS", "M11", "ROE", "WWK", "ZEN"}));
|
||||
}
|
||||
if (boosterTypes[1].equals(boosterType)) { // Ext
|
||||
setsToGive = new ArrayList<String>();
|
||||
setsToGive.addAll(Arrays.asList(new String[]{"M12","NPH","MBS","M11","ROE","WWK","ZEN","M10","ARB","CFX","ALA","MOR","SHM","EVE","LRW"}));
|
||||
}
|
||||
|
||||
ArrayList<CardPrinted> cardsWon = model.quest.getCards().addCards(setsToGive);
|
||||
ListChooser<GameFormat> ch = new ListChooser<GameFormat>("Choose prize booster format", 1, SetUtils.getFormats());
|
||||
ch.show();
|
||||
GameFormat selected = ch.getSelectedValue();
|
||||
|
||||
ArrayList<CardPrinted> cardsWon = model.quest.getCards().addCards(selected.getFilter());
|
||||
ImageIcon icon = getIcon("BookIcon.png");
|
||||
CardListViewer c = new CardListViewer("Booster", "You have won the following new cards", cardsWon, icon);
|
||||
c.show();
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
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.StringUtils;
|
||||
|
||||
@@ -11,6 +13,7 @@ import net.slightlymagic.maxmtg.Predicate;
|
||||
|
||||
import forge.card.CardBlock;
|
||||
import forge.card.CardSet;
|
||||
import forge.game.GameFormat;
|
||||
|
||||
/**
|
||||
* <p>SetInfoUtil class.</p>
|
||||
@@ -25,14 +28,29 @@ public final class SetUtils {
|
||||
}
|
||||
|
||||
/** Constant <code>setData</code>. */
|
||||
private static HashMap<String, CardSet> setsByCode = new HashMap<String, CardSet>();
|
||||
private static Map<String, CardSet> setsByCode = new HashMap<String, CardSet>();
|
||||
private static List<CardSet> allSets = new ArrayList<CardSet>();
|
||||
private static List<CardBlock> allBlocks = new ArrayList<CardBlock>();
|
||||
|
||||
private static List<GameFormat> formats = new ArrayList<GameFormat>();
|
||||
private static GameFormat fmtStandard = null;
|
||||
private static GameFormat fmtExtended = null;
|
||||
private static GameFormat fmtModern = null;
|
||||
|
||||
public static GameFormat getStandard() { return fmtStandard; }
|
||||
public static GameFormat getExtended() { return fmtExtended; }
|
||||
public static GameFormat getModern() { return fmtModern; }
|
||||
|
||||
// list are immutable, no worries
|
||||
public static List<GameFormat> getFormats() { return formats; }
|
||||
public static List<CardBlock> getBlocks() { return allBlocks; }
|
||||
public static List<CardSet> getAllSets() { return allSets; }
|
||||
|
||||
// Perform that first of all
|
||||
static {
|
||||
loadSetData();
|
||||
loadBlockData();
|
||||
loadFormatData();
|
||||
}
|
||||
|
||||
public static CardSet getSetByCode(final String code) {
|
||||
@@ -45,33 +63,12 @@ public final class SetUtils {
|
||||
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");
|
||||
@@ -105,6 +102,7 @@ public final class SetUtils {
|
||||
allSets.add(set);
|
||||
}
|
||||
Collections.sort(allSets);
|
||||
allSets = Collections.unmodifiableList(allSets);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,6 +142,39 @@ public final class SetUtils {
|
||||
allBlocks.add(new CardBlock(index, name, sets , landSet, draftBoosters, sealedBoosters));
|
||||
}
|
||||
Collections.reverse(allBlocks);
|
||||
allBlocks = Collections.unmodifiableList(allBlocks);
|
||||
}
|
||||
|
||||
private static void loadFormatData() {
|
||||
ArrayList<String> fData = FileUtil.readFile("res/blockdata/formats.txt");
|
||||
|
||||
for (String s : fData) {
|
||||
if (StringUtils.isBlank(s)) { continue; }
|
||||
|
||||
String name = null;
|
||||
List<String> sets = new ArrayList<String>(); // default: all sets allowed
|
||||
List<String> bannedCards = new ArrayList<String>(); // default: nothing banned
|
||||
|
||||
String[] sParts = s.trim().split("\\|");
|
||||
for (String sPart : sParts) {
|
||||
String[] kv = sPart.split(":", 2);
|
||||
String key = kv[0].toLowerCase();
|
||||
if ("name".equals(key)) {
|
||||
name = kv[1];
|
||||
} else if ("sets".equals(key)) {
|
||||
sets.addAll(Arrays.asList(kv[1].split(", ")));
|
||||
} else if ("banned".equals(key)) {
|
||||
bannedCards.addAll(Arrays.asList(kv[1].split("; ")));
|
||||
}
|
||||
}
|
||||
if( name == null ) { throw new RuntimeException("Format must have a name! Check formats.txt file"); }
|
||||
GameFormat thisFormat = new GameFormat(name, sets, bannedCards);
|
||||
if ( name.equalsIgnoreCase("Standard") ) { fmtStandard = thisFormat; }
|
||||
if ( name.equalsIgnoreCase("Modern") ) { fmtModern = thisFormat; }
|
||||
if ( name.equalsIgnoreCase("Extended") ) { fmtExtended = thisFormat; }
|
||||
formats.add(thisFormat);
|
||||
}
|
||||
formats = Collections.unmodifiableList(formats);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package forge.card;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
|
||||
/**
|
||||
* This is a CardBlock class.
|
||||
*/
|
||||
public class CardBlock implements Comparable<CardBlock> {
|
||||
public final class CardBlock implements Comparable<CardBlock> {
|
||||
private static final CardSet[] EMPTY_SET_ARRAY = new CardSet[]{};
|
||||
|
||||
private final int orderNum;
|
||||
@@ -14,6 +18,7 @@ public class CardBlock implements Comparable<CardBlock> {
|
||||
private final CardSet landSet;
|
||||
private final int cntBoostersDraft;
|
||||
private final int cntBoostersSealed;
|
||||
private Predicate<CardPrinted> filter = null;
|
||||
|
||||
public CardBlock(final int index, final String name, final List<CardSet> sets,
|
||||
final CardSet landSet, final int cntBoostersDraft, final int cntBoostersSealed) {
|
||||
@@ -25,25 +30,40 @@ public class CardBlock implements Comparable<CardBlock> {
|
||||
this.cntBoostersSealed = cntBoostersSealed;
|
||||
}
|
||||
|
||||
public final String getName() {
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public final CardSet[] getSets() {
|
||||
public CardSet[] getSets() {
|
||||
return sets;
|
||||
}
|
||||
|
||||
public final CardSet getLandSet() {
|
||||
public CardSet getLandSet() {
|
||||
return landSet;
|
||||
}
|
||||
|
||||
public final int getCntBoostersDraft() {
|
||||
public int getCntBoostersDraft() {
|
||||
return cntBoostersDraft;
|
||||
}
|
||||
|
||||
public final int getCntBoostersSealed() {
|
||||
public int getCntBoostersSealed() {
|
||||
return cntBoostersSealed;
|
||||
}
|
||||
|
||||
public Predicate<CardPrinted> getFilter()
|
||||
{
|
||||
if (filter == null) { filter = buildFilter(); }
|
||||
return filter;
|
||||
}
|
||||
|
||||
private Predicate<CardPrinted> buildFilter()
|
||||
{
|
||||
List<String> setCodes = new ArrayList<String>();
|
||||
for (int i = 0; i < sets.length; i++) {
|
||||
setCodes.add(sets[i].getCode());
|
||||
}
|
||||
return CardPrinted.Predicates.printedInSets(setCodes, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
@@ -72,6 +92,6 @@ public class CardBlock implements Comparable<CardBlock> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() { return name; }
|
||||
public String toString() { return name + " (block)"; }
|
||||
|
||||
}
|
||||
|
||||
@@ -3,11 +3,12 @@ package forge.card;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.axis.utils.ArrayUtil;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import net.slightlymagic.braids.util.lambda.Lambda1;
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
import net.slightlymagic.maxmtg.Predicate.StringOp;
|
||||
import net.slightlymagic.maxmtg.PredicateString;
|
||||
import forge.AllZone;
|
||||
import forge.Card;
|
||||
import forge.CardUtil;
|
||||
@@ -146,9 +147,12 @@ public final class CardPrinted implements Comparable<CardPrinted> {
|
||||
}
|
||||
return new PredicateSets(Arrays.asList(new String[]{value}), true);
|
||||
}
|
||||
public static Predicate<CardPrinted> name(final StringOp op, final String what) {
|
||||
public static Predicate<CardPrinted> name(final PredicateString.StringOp op, final String what) {
|
||||
return new PredicateName(op, what);
|
||||
}
|
||||
public static Predicate<CardPrinted> namesExcept(final List<String> what) {
|
||||
return new PredicateNamesExcept(what);
|
||||
}
|
||||
|
||||
private static class PredicateRarity extends Predicate<CardPrinted> {
|
||||
private final CardRarity operand;
|
||||
@@ -177,31 +181,38 @@ public final class CardPrinted implements Comparable<CardPrinted> {
|
||||
}
|
||||
}
|
||||
|
||||
private static class PredicateName extends Predicate<CardPrinted> {
|
||||
private static class PredicateName extends PredicateString<CardPrinted> {
|
||||
private final String operand;
|
||||
private final StringOp operator;
|
||||
|
||||
@Override
|
||||
public boolean isTrue(final CardPrinted card) {
|
||||
return op(card.getName(), operand);
|
||||
}
|
||||
|
||||
private boolean op(final String op1, final String op2) {
|
||||
switch (operator) {
|
||||
case CONTAINS: return StringUtils.containsIgnoreCase(op1, op2);
|
||||
case NOT_CONTAINS: return !StringUtils.containsIgnoreCase(op1, op2);
|
||||
case EQUALS: return op1.equalsIgnoreCase(op2);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public PredicateName(final StringOp operator, final String operand)
|
||||
public PredicateName(final PredicateString.StringOp operator, final String operand)
|
||||
{
|
||||
super(operator);
|
||||
this.operand = operand;
|
||||
this.operator = operator;
|
||||
}
|
||||
}
|
||||
|
||||
private static class PredicateNamesExcept extends PredicateString<CardPrinted> {
|
||||
private final String[] operand;
|
||||
|
||||
@Override
|
||||
public boolean isTrue(final CardPrinted card) {
|
||||
for(int i = 0; i < operand.length; i++) {
|
||||
if ( op(card.getName(), operand[i]) ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public PredicateNamesExcept(final List<String> operand)
|
||||
{
|
||||
super(StringOp.EQUALS);
|
||||
this.operand = operand.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Pre-built predicates are stored here to allow their re-usage and easier access from code.
|
||||
*/
|
||||
@@ -215,10 +226,6 @@ public final class CardPrinted implements Comparable<CardPrinted> {
|
||||
public static final Predicate<CardPrinted> isSpecial = rarity(true, CardRarity.Special);
|
||||
public static final Predicate<CardPrinted> exceptLands = rarity(false, CardRarity.BasicLand);
|
||||
|
||||
// TODO: Update this code on each rotation (or move this list to a file)
|
||||
public static final Predicate<CardPrinted> isStandard = printedInSets(
|
||||
Arrays.asList(new String[] {"M12", "NPH", "MBS", "SOM", "M11", "ROE", "WWK", "ZEN"}), true);
|
||||
|
||||
public static final Predicate<CardPrinted> isTrue = Predicate.getTrue(CardPrinted.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.Set;
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
import net.slightlymagic.maxmtg.Predicate.ComparableOp;
|
||||
import net.slightlymagic.maxmtg.Predicate.PredicatesOp;
|
||||
import net.slightlymagic.maxmtg.Predicate.StringOp;
|
||||
import net.slightlymagic.maxmtg.PredicateString;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -139,21 +139,21 @@ public final class CardRules {
|
||||
}
|
||||
// Power
|
||||
// Toughness
|
||||
public static Predicate<CardRules> rules(final StringOp op, final String what) {
|
||||
public static Predicate<CardRules> rules(final PredicateString.StringOp op, final String what) {
|
||||
return new LeafString(LeafString.CardField.RULES, op, what);
|
||||
}
|
||||
public static Predicate<CardRules> name(final StringOp op, final String what) {
|
||||
public static Predicate<CardRules> name(final PredicateString.StringOp op, final String what) {
|
||||
return new LeafString(LeafString.CardField.NAME, op, what);
|
||||
}
|
||||
public static Predicate<CardRules> subType(final StringOp op, final String what) {
|
||||
public static Predicate<CardRules> subType(final PredicateString.StringOp op, final String what) {
|
||||
return new LeafString(LeafString.CardField.SUBTYPE, op, what);
|
||||
}
|
||||
public static Predicate<CardRules> joinedType(final StringOp op, final String what) {
|
||||
public static Predicate<CardRules> joinedType(final PredicateString.StringOp op, final String what) {
|
||||
return new LeafString(LeafString.CardField.JOINED_TYPE, op, what);
|
||||
}
|
||||
|
||||
public static Predicate<CardRules> wasPrintedInSet(final String setCode) {
|
||||
return new PredicateExitsInSet(setCode);
|
||||
public static Predicate<CardRules> wasPrintedInSets(final List<String> setCodes) {
|
||||
return new PredicateExitsInSets(setCodes);
|
||||
}
|
||||
|
||||
public static Predicate<CardRules> coreType(final boolean isEqual, final String what)
|
||||
@@ -191,7 +191,7 @@ public final class CardRules {
|
||||
return new LeafColor(LeafColor.ColorOperator.CountColorsGreaterOrEqual, cntColors);
|
||||
}
|
||||
|
||||
private static class LeafString extends Predicate<CardRules> {
|
||||
private static class LeafString extends PredicateString<CardRules> {
|
||||
public enum CardField {
|
||||
RULES,
|
||||
NAME,
|
||||
@@ -200,7 +200,6 @@ public final class CardRules {
|
||||
}
|
||||
|
||||
private final String operand;
|
||||
private final StringOp operator;
|
||||
private final CardField field;
|
||||
|
||||
@Override
|
||||
@@ -222,20 +221,11 @@ public final class CardRules {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean op(final String op1, final String op2) {
|
||||
switch (operator) {
|
||||
case CONTAINS: return StringUtils.containsIgnoreCase(op1, op2);
|
||||
case NOT_CONTAINS: return !StringUtils.containsIgnoreCase(op1, op2);
|
||||
case EQUALS: return op1.equalsIgnoreCase(op2);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public LeafString(final CardField field, final StringOp operator, final String operand)
|
||||
{
|
||||
super(operator);
|
||||
this.field = field;
|
||||
this.operand = operand;
|
||||
this.operator = operator;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -353,15 +343,18 @@ public final class CardRules {
|
||||
}
|
||||
}
|
||||
|
||||
private static class PredicateExitsInSet extends Predicate<CardRules> {
|
||||
private final String setCode;
|
||||
public PredicateExitsInSet(final String setsCode) {
|
||||
setCode = setsCode;
|
||||
private static class PredicateExitsInSets extends Predicate<CardRules> {
|
||||
private final List<String> sets;
|
||||
public PredicateExitsInSets(final List<String> wantSets) {
|
||||
sets = wantSets; // maybe should make a copy here?
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTrue(final CardRules subject) {
|
||||
return subject.setsPrinted.containsKey(setCode);
|
||||
for (String s : sets) {
|
||||
if (subject.setsPrinted.containsKey(s)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,4 +52,9 @@ public final class CardSet implements Comparable<CardSet> { // immutable
|
||||
CardSet other = (CardSet) obj;
|
||||
return other.name.equals(this.name) && this.code.equals(other.code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.name + " (set)";
|
||||
}
|
||||
}
|
||||
|
||||
51
src/main/java/forge/game/GameFormat.java
Normal file
51
src/main/java/forge/game/GameFormat.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package forge.game;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
|
||||
import forge.card.CardPrinted;
|
||||
import forge.card.CardRules;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public final class GameFormat {
|
||||
|
||||
private final String name;
|
||||
// contains allowed sets, when empty allows all sets
|
||||
private final List<String> allowedSetCodes;
|
||||
private final List<String> bannedCardNames;
|
||||
|
||||
private final Predicate<CardPrinted> filter;
|
||||
|
||||
|
||||
public GameFormat(final String fName, final List<String> sets, final List<String> bannedCards)
|
||||
{
|
||||
name = fName;
|
||||
allowedSetCodes = Collections.unmodifiableList(sets);
|
||||
bannedCardNames = Collections.unmodifiableList(bannedCards);
|
||||
filter = buildFilter();
|
||||
}
|
||||
|
||||
|
||||
private Predicate<CardPrinted> buildFilter() {
|
||||
Predicate<CardPrinted> banNames = CardPrinted.Predicates.namesExcept(bannedCardNames);
|
||||
Predicate<CardPrinted> allowSets = allowedSetCodes == null || allowedSetCodes.isEmpty()
|
||||
? CardPrinted.Predicates.Presets.isTrue
|
||||
: Predicate.brigde(CardRules.Predicates.wasPrintedInSets(allowedSetCodes), CardPrinted.fnGetRules);
|
||||
return Predicate.and(banNames, allowSets);
|
||||
}
|
||||
|
||||
public String getName() { return name; }
|
||||
public Predicate<CardPrinted> getFilter() { return filter; }
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name + " (format)";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import java.awt.Container;
|
||||
import java.awt.Font;
|
||||
import java.awt.Frame;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.WindowAdapter;
|
||||
@@ -15,23 +13,11 @@ import java.util.List;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
//import javax.swing.text.BadLocationException;
|
||||
//import javax.swing.text.Document;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
import net.slightlymagic.maxmtg.Predicate.StringOp;
|
||||
import forge.Command;
|
||||
import forge.Constant;
|
||||
import forge.SetUtils;
|
||||
import forge.card.CardRules;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardPrinted;
|
||||
import forge.deck.Deck;
|
||||
|
||||
@@ -12,13 +12,15 @@ import javax.swing.event.DocumentListener;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import net.slightlymagic.maxmtg.Predicate;
|
||||
import net.slightlymagic.maxmtg.Predicate.StringOp;
|
||||
import net.slightlymagic.maxmtg.PredicateString.StringOp;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.SetUtils;
|
||||
import forge.card.CardPrinted;
|
||||
import forge.card.CardRules;
|
||||
import forge.card.CardSet;
|
||||
import forge.game.GameFormat;
|
||||
|
||||
/**
|
||||
* A panel that holds Name, Type, Rules text fields aligned horizontally together with set filter
|
||||
@@ -58,9 +60,13 @@ public class FilterNameTypeSetPanel extends JComponent{
|
||||
|
||||
|
||||
searchSetCombo.removeAllItems();
|
||||
searchSetCombo.addItem("");
|
||||
for (int i = 0; i < SetUtils.getNameList().size(); i++)
|
||||
searchSetCombo.addItem(SetUtils.getNameList().get(i));
|
||||
searchSetCombo.addItem("(all sets and formats)");
|
||||
for (GameFormat s : SetUtils.getFormats()) {
|
||||
searchSetCombo.addItem(s);
|
||||
}
|
||||
for (CardSet s : SetUtils.getAllSets()) {
|
||||
searchSetCombo.addItem(s);
|
||||
}
|
||||
|
||||
this.add(searchSetCombo, "wmin 150, grow");
|
||||
}
|
||||
@@ -88,8 +94,12 @@ public class FilterNameTypeSetPanel extends JComponent{
|
||||
}
|
||||
|
||||
if (searchSetCombo.getSelectedIndex() != 0) {
|
||||
String setCode = SetUtils.getCode3ByName(searchSetCombo.getSelectedItem().toString());
|
||||
rules.add(CardPrinted.Predicates.printedInSets(setCode));
|
||||
Object selected = searchSetCombo.getSelectedItem();
|
||||
if (selected instanceof CardSet) {
|
||||
rules.add(CardPrinted.Predicates.printedInSets(((CardSet) selected).getCode()));
|
||||
} else if (selected instanceof GameFormat) {
|
||||
rules.add(((GameFormat) selected).getFilter());
|
||||
}
|
||||
}
|
||||
|
||||
switch (rules.size()){
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package forge.quest.data;
|
||||
|
||||
import forge.MyRandom;
|
||||
import forge.SetUtils;
|
||||
import forge.card.CardPool;
|
||||
import forge.card.CardPrinted;
|
||||
import forge.deck.Deck;
|
||||
@@ -122,9 +123,7 @@ public final class QuestData {
|
||||
public void newGame(final int diff, final String m0de, final boolean standardStart) {
|
||||
setDifficulty(diff);
|
||||
|
||||
Predicate<CardPrinted> filter = standardStart
|
||||
? CardPrinted.Predicates.Presets.isStandard
|
||||
: Predicate.getTrue(CardPrinted.class);
|
||||
Predicate<CardPrinted> filter = standardStart ? SetUtils.getStandard().getFilter() : CardPrinted.Predicates.Presets.isTrue;
|
||||
|
||||
myCards.setupNewGameCardPool(filter, diff);
|
||||
credits = QuestPreferences.getStartingCredits();
|
||||
|
||||
@@ -44,13 +44,11 @@ public final class QuestUtilCards {
|
||||
/**
|
||||
* <p>addCards.</p>
|
||||
*/
|
||||
public ArrayList<CardPrinted> addCards(final List<String> setsFilter) {
|
||||
public ArrayList<CardPrinted> addCards(final Predicate<CardPrinted> fSets) {
|
||||
int nCommon = QuestPreferences.getNumCommon();
|
||||
int nUncommon = QuestPreferences.getNumUncommon();
|
||||
int nRare = QuestPreferences.getNumRare();
|
||||
|
||||
Predicate<CardPrinted> fSets = CardPrinted.Predicates.printedInSets(setsFilter, true);
|
||||
|
||||
ArrayList<CardPrinted> newCards = new ArrayList<CardPrinted>();
|
||||
newCards.addAll(QuestBoosterPack.generateCards(fSets, nCommon, CardRarity.Common, null));
|
||||
newCards.addAll(QuestBoosterPack.generateCards(fSets, nUncommon, CardRarity.Uncommon, null));
|
||||
|
||||
@@ -30,12 +30,6 @@ public abstract class Predicate<T> {
|
||||
*/
|
||||
public enum ComparableOp { EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, GT_OR_EQUAL, LT_OR_EQUAL }
|
||||
|
||||
/**
|
||||
* Possible operators for string operands.
|
||||
* @author Max
|
||||
*
|
||||
*/
|
||||
public enum StringOp { CONTAINS, NOT_CONTAINS, EQUALS }
|
||||
|
||||
// This is the main method, predicates were made for.
|
||||
public abstract boolean isTrue(T subject);
|
||||
@@ -214,7 +208,7 @@ public abstract class Predicate<T> {
|
||||
// Predefined operators: and, or
|
||||
public static <T> Predicate<T> and(final Predicate<T> operand1, final Predicate<T> operand2) {
|
||||
if (operand1.is1()) { return operand2; }
|
||||
if (operand2.is1()) { return operand1; }
|
||||
if (operand2 == null || operand2.is1()) { return operand1; }
|
||||
return new NodeAnd<T>(operand1, operand2);
|
||||
}
|
||||
public static <T> Predicate<T> and(final Iterable<Predicate<T>> operand) { return new MultiNodeAnd<T>(operand); }
|
||||
@@ -330,7 +324,7 @@ public abstract class Predicate<T> {
|
||||
@Override public boolean isTrue(final T card) { return bValue; }
|
||||
public LeafConstant(final boolean value) { bValue = value; }
|
||||
}
|
||||
|
||||
|
||||
public static <T> Predicate<T> getTrue(final Class<T> cls) { return new LeafConstant<T>(true); }
|
||||
public static <T> Predicate<T> getFalse(final Class<T> cls) { return new LeafConstant<T>(false); }
|
||||
}
|
||||
|
||||
24
src/main/java/net/slightlymagic/maxmtg/PredicateString.java
Normal file
24
src/main/java/net/slightlymagic/maxmtg/PredicateString.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package net.slightlymagic.maxmtg;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Special predicate class to perform string operations.
|
||||
*/
|
||||
public abstract class PredicateString<T> extends Predicate<T> {
|
||||
/** Possible operators for string operands. */
|
||||
public enum StringOp { CONTAINS, NOT_CONTAINS, EQUALS, NOT_EQUALS }
|
||||
|
||||
protected final StringOp operator;
|
||||
protected final boolean op(final String op1, final String op2) {
|
||||
switch (operator) {
|
||||
case CONTAINS: return StringUtils.containsIgnoreCase(op1, op2);
|
||||
case NOT_CONTAINS: return !StringUtils.containsIgnoreCase(op1, op2);
|
||||
case EQUALS: return op1.equalsIgnoreCase(op2);
|
||||
case NOT_EQUALS: return op1.equalsIgnoreCase(op2);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public PredicateString(final StringOp operator) {this.operator = operator; }
|
||||
}
|
||||
Reference in New Issue
Block a user