diff --git a/forge-core/src/main/java/forge/card/mana/ManaCost.java b/forge-core/src/main/java/forge/card/mana/ManaCost.java
index b4aa275464f..f84d1d86259 100644
--- a/forge-core/src/main/java/forge/card/mana/ManaCost.java
+++ b/forge-core/src/main/java/forge/card/mana/ManaCost.java
@@ -22,9 +22,6 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import forge.card.ColorSet;
-import forge.card.MagicColor;
-
/**
*
* CardManaCost class.
@@ -49,20 +46,14 @@ public final class ManaCost implements Comparable, Iterable 0 ? new ManaCost(cntColorless) : NO_COST;
}
@@ -95,47 +86,8 @@ public final class ManaCost implements Comparable, Iterable shardsTemp = new ArrayList();
- this.hasNoCost = false;
- if (colorProfile == MagicColor.COLORLESS) {
- shardsTemp.add(ManaCostShard.X);
- }
- else {
- ColorSet colorSet = ColorSet.fromMask(colorProfile);
- if (colorSet.hasWhite()) {
- shardsTemp.add(ManaCostShard.WHITE);
- }
- if (colorSet.hasBlue()) {
- shardsTemp.add(ManaCostShard.BLUE);
- }
- if (colorSet.hasBlack()) {
- shardsTemp.add(ManaCostShard.BLACK);
- }
- if (colorSet.hasRed()) {
- shardsTemp.add(ManaCostShard.RED);
- }
- if (colorSet.hasGreen()) {
- shardsTemp.add(ManaCostShard.GREEN);
- }
- }
- this.genericCost = 0;
+ this.genericCost = parser.getTotalColorlessCost(); // collect generic mana
+ // here
sealClass(shardsTemp);
}
@@ -293,10 +245,6 @@ public final class ManaCost implements Comparable, Iterable {
- /**
- * Instantiates a new deck section.
- */
public CardPool() {
super(PaperCard.class);
}
- /**
- * Instantiates a new deck section.
- *
- * @param cards the cards
- */
public CardPool(final Iterable> cards) {
this();
this.addAll(cards);
}
-
- /**
- * Adds the card.
- *
- * @param cardName
- * the card name
- * @param setCode
- * the set code
- */
public void add(final String cardName, final String setCode) {
this.add(cardName, setCode, -1, 1);
}
- /**
- * Adds the card.
- *
- * @param cardName
- * the card name
- * @param setCode
- * the set code
- * @param amount
- * the amount of cards to add
- */
public void add(final String cardName, final String setCode, final int amount) {
this.add(cardName, setCode, -1, amount);
}
- /**
- * Adds the card.
- *
- * @param cardName the card name
- * @param setCode the set code
- * @param artIndex the card art index, -1 for random
- * @param amount the amount
- */
public void add(final String cardName, final String setCode, final int artIndex, final int amount) {
PaperCard cp = StaticData.instance().getCommonCards().tryGetCard(cardName, setCode, artIndex);
if ( cp == null )
diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java
index a81cc1ae566..423c09e6d49 100644
--- a/forge-core/src/main/java/forge/deck/Deck.java
+++ b/forge-core/src/main/java/forge/deck/Deck.java
@@ -34,8 +34,8 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate;
import forge.card.CardDb;
+import forge.card.ColorSet;
import forge.card.MagicColor;
-import forge.card.mana.ManaCost;
import forge.deck.io.DeckFileHeader;
import forge.deck.io.DeckSerializer;
import forge.item.PaperCard;
@@ -59,9 +59,6 @@ import forge.util.ItemPoolView;
public class Deck extends DeckBase implements Iterable> {
private final Map parts = new EnumMap(DeckSection.class);
private final Set tags = new TreeSet(String.CASE_INSENSITIVE_ORDER);
- private ManaCost color;
- private String format;
- private int formatCompare;
// gameType is from Constant.GameType, like GameType.Regular
/**
@@ -244,9 +241,6 @@ public class Deck extends DeckBase implements Iterable save() {
- this.color = null; //ensure color and format are recalculated
- this.format = null;
-
final List out = new ArrayList();
out.add(String.format("[metadata]"));
@@ -289,75 +283,23 @@ public class Deck extends DeckBase implements Iterable deckEntry : this) {
- switch (deckEntry.getKey()) {
- case Main:
- case Sideboard:
- case Commander:
- for (Entry poolEntry : deckEntry.getValue()) {
- colorProfile |= poolEntry.getKey().getRules().getColor().getColor();
- }
- break;
- default:
- break; //ignore other sections
+ for (Entry deckEntry : this) {
+ switch (deckEntry.getKey()) {
+ case Main:
+ case Sideboard:
+ case Commander:
+ for (Entry poolEntry : deckEntry.getValue()) {
+ colorProfile |= poolEntry.getKey().getRules().getColor().getColor();
}
- }
- color = ManaCost.fromColorProfile(colorProfile);
- }
- return color;
- }
-
- public String getFormat(Map> formatPredicates) {
- if (format == null) {
- formatCompare = 0; //build format compare value, with higher values for being valid in a more recent format
- int value = (int)Math.pow(2, formatPredicates.size() - 1);
- StringBuilder builder = new StringBuilder();
-
- formatLoop:
- for (Entry> format : formatPredicates.entrySet()) {
- for (Entry deckEntry : this) {
- switch (deckEntry.getKey()) {
- case Main:
- case Sideboard:
- case Commander:
- for (Entry poolEntry : deckEntry.getValue()) {
- if (!format.getValue().apply(poolEntry.getKey())) {
- value /= 2;
- continue formatLoop; //if found card that's not legal in this format, move to next format
- }
- }
- break;
- default:
- break; //ignore other sections
- }
- }
- //add format if reached this point
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(format.getKey());
-
- formatCompare += value; //increment format compare value
- value /= 2;
- }
-
- if (builder.length() > 0) {
- format = builder.toString();
- }
- else {
- format = "(none)";
+ break;
+ default:
+ break; //ignore other sections
}
}
- return format;
- }
-
- public int getFormatCompare(Map> formatPredicates) {
- getFormat(formatPredicates); //ensure formatCompare defined
- return formatCompare;
+ return ColorSet.fromMask(colorProfile);
}
//create predicate that applys a card predicate to all cards in deck
diff --git a/forge-core/src/main/java/forge/util/storage/StorageBase.java b/forge-core/src/main/java/forge/util/storage/StorageBase.java
index a74694c0e6d..4ff9874a8d8 100644
--- a/forge-core/src/main/java/forge/util/storage/StorageBase.java
+++ b/forge-core/src/main/java/forge/util/storage/StorageBase.java
@@ -22,7 +22,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import java.util.Map.Entry;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
@@ -66,10 +65,6 @@ public class StorageBase implements IStorage {
return new ArrayList(this.map.keySet());
}
- public Iterable> entrySet() {
- return this.map.entrySet();
- }
-
@Override
public Iterator iterator() {
return this.map.values().iterator();
diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java
index f03fd6d1bf7..b2d544ecccf 100644
--- a/forge-game/src/main/java/forge/game/GameFormat.java
+++ b/forge-game/src/main/java/forge/game/GameFormat.java
@@ -21,10 +21,7 @@ import java.io.File;
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 java.util.Map.Entry;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -33,6 +30,7 @@ import com.google.common.collect.Lists;
import forge.StaticData;
import forge.card.CardEdition;
+import forge.deck.Deck;
import forge.item.PaperCard;
import forge.item.IPaperCard;
import forge.util.FileSection;
@@ -73,6 +71,8 @@ public class GameFormat implements Comparable {
this(fName, sets, bannedCards, 0);
}
+ public static final GameFormat NoFormat = new GameFormat("(none)", null, null, Integer.MAX_VALUE);
+
public GameFormat(final String fName, final Iterable sets, final List bannedCards, int compareIdx) {
this.index = compareIdx;
this.name = fName;
@@ -219,15 +219,8 @@ public class GameFormat implements Comparable {
}
public static class Collection extends StorageBase {
- private final Map> formatPredicates;
-
public Collection(StorageReaderBase reader) {
super("Format collections", reader);
-
- formatPredicates = new HashMap>();
- for (Entry format : this.entrySet()) {
- formatPredicates.put(format.getKey(), format.getValue().getFilterRules()); //allow reprints
- }
}
public GameFormat getStandard() {
@@ -246,8 +239,13 @@ public class GameFormat implements Comparable {
return this.map.get(format);
}
- public Map> getFormatPredicates() {
- return this.formatPredicates;
+ public GameFormat getFormatOfDeck(Deck deck) {
+ for(GameFormat gf : this) {
+ if ( Deck.createPredicate(gf.getFilterRules()).apply(deck) )
+ return gf;
+ }
+
+ return NoFormat;
}
}
diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java
index e78bc9c3b5f..e55a0c97b30 100644
--- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java
+++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java
@@ -22,7 +22,6 @@ import java.util.Map.Entry;
import forge.Singletons;
import forge.card.CardEdition;
import forge.card.MagicColor;
-import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckGroup;
import forge.deck.DeckSection;
diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java
index 0ce41b3b86b..58c5d9d92f1 100644
--- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java
+++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java
@@ -40,7 +40,7 @@ public class DeckColorFilter extends StatTypeFilter {
return new Predicate() {
@Override
public boolean apply(Deck input) {
- byte colorProfile = input.getColor().getColorProfile();
+ byte colorProfile = input.getColor().getColor();
if (colorProfile == 0) {
return buttonMap.get(StatTypes.DECK_COLORLESS).getSelected();
}
@@ -73,43 +73,43 @@ public class DeckColorFilter extends StatTypeFilter {
private static final Predicate IS_WHITE = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().hasColor(MagicColor.WHITE);
+ return deck.getColor().hasAnyColor(MagicColor.WHITE);
}
};
private static final Predicate IS_BLUE = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().hasColor(MagicColor.BLUE);
+ return deck.getColor().hasAnyColor(MagicColor.BLUE);
}
};
public static final Predicate IS_BLACK = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().hasColor(MagicColor.BLACK);
+ return deck.getColor().hasAnyColor(MagicColor.BLACK);
}
};
public static final Predicate IS_RED = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().hasColor(MagicColor.RED);
+ return deck.getColor().hasAnyColor(MagicColor.RED);
}
};
public static final Predicate IS_GREEN = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().hasColor(MagicColor.GREEN);
+ return deck.getColor().hasAnyColor(MagicColor.GREEN);
}
};
private static final Predicate IS_COLORLESS = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return deck.getColor().getColorProfile() == 0;
+ return deck.getColor().getColor() == 0;
}
};
private static final Predicate IS_MULTICOLOR = new Predicate() {
@Override
public boolean apply(final Deck deck) {
- return BinaryUtil.bitCount(deck.getColor().getColorProfile()) > 1;
+ return BinaryUtil.bitCount(deck.getColor().getColor()) > 1;
}
};
diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java
index b89a118c332..4c54a3b2580 100644
--- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java
+++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java
@@ -23,7 +23,6 @@ import java.util.regex.Pattern;
import javax.swing.table.TableColumn;
import com.google.common.base.Function;
-
import forge.Singletons;
import forge.card.CardAiHints;
import forge.card.CardEdition;
@@ -406,7 +405,8 @@ public class ItemColumn extends TableColumn {
if (deck == null) {
return -1;
}
- return deck.getFormatCompare(Singletons.getModel().getFormats().getFormatPredicates());
+ return Singletons.getModel().getFormats().getFormatOfDeck(deck).getIndex();
+
}
},
new Function, Object>() {
@@ -416,7 +416,7 @@ public class ItemColumn extends TableColumn {
if (deck == null) {
return null;
}
- return deck.getFormat(Singletons.getModel().getFormats().getFormatPredicates());
+ return Singletons.getModel().getFormats().getFormatOfDeck(deck);
}
}),
DECK_MAIN("Main", "Main Deck", 35, 35, 35, SortState.ASC, new IntegerRenderer(),
@@ -525,7 +525,7 @@ public class ItemColumn extends TableColumn {
private static Deck toDeck(final InventoryItem i) {
return i instanceof Deck ? ((Deck) i) : null;
}
- private static ManaCost toDeckColor(final InventoryItem i) {
+ private static ColorSet toDeckColor(final InventoryItem i) {
return i instanceof Deck ? ((Deck) i).getColor() : null;
}
private static int toDeckCount(final InventoryItem i, DeckSection section) {