*Added a map of color -> basic land type to Constant, since it might be of use elsewhere.

*Added Commander deck conformance check for basic land types.
This commit is contained in:
Hellfish
2013-04-23 18:00:44 +00:00
parent 3e76abbaf5
commit 45a9f0985a
2 changed files with 49 additions and 1 deletions

View File

@@ -20,10 +20,14 @@ package forge;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import forge.card.MagicColor;
/** /**
* <p> * <p>
* Constant interface. * Constant interface.
@@ -95,6 +99,20 @@ public final class Constant {
/** The Basic lands. */ /** The Basic lands. */
public static final List<String> BASIC_LANDS = Collections.unmodifiableList(Arrays.asList("Plains", "Island", "Swamp", "Mountain", "Forest")); public static final List<String> BASIC_LANDS = Collections.unmodifiableList(Arrays.asList("Plains", "Island", "Swamp", "Mountain", "Forest"));
public static final Map<String, String> COLOR_TO_BASIC_LAND_TYPE_MAP;
static
{
Map<String, String> colToType = new HashMap<String, String>();
colToType.put(Color.WHITE, "Plains");
colToType.put(Color.BLUE, "Island");
colToType.put(Color.BLACK, "Swamp");
colToType.put(Color.RED, "Mountain");
colToType.put(Color.GREEN, "Forest");
COLOR_TO_BASIC_LAND_TYPE_MAP = Collections.unmodifiableMap(colToType);
}
} }
/** /**

View File

@@ -19,14 +19,18 @@ package forge.deck;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.apache.commons.lang.math.IntRange; import org.apache.commons.lang.math.IntRange;
import forge.Constant;
import forge.Singletons; import forge.Singletons;
import forge.card.CardCoreType; import forge.card.CardCoreType;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.item.CardDb; import forge.item.CardDb;
import forge.item.CardPrinted; import forge.item.CardPrinted;
import forge.item.IPaperCard; import forge.item.IPaperCard;
@@ -146,18 +150,44 @@ public enum DeckFormat {
ColorSet cmdCI = cmd.get(0).getRules().getColorIdentity(); ColorSet cmdCI = cmd.get(0).getRules().getColorIdentity();
List<CardPrinted> erroneousCI = new ArrayList<CardPrinted>(); List<CardPrinted> erroneousCI = new ArrayList<CardPrinted>();
for(Entry<CardPrinted, Integer> cp : deck.get(DeckSection.Main)) { for(Entry<CardPrinted, Integer> cp : deck.get(DeckSection.Main)) {
if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor())) if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor()))
{ {
erroneousCI.add(cp.getKey()); erroneousCI.add(cp.getKey());
} }
if(cp.getKey().getRules().getType().isLand())
{
for(String key : Constant.Color.COLOR_TO_BASIC_LAND_TYPE_MAP.keySet())
{
if(!cmdCI.hasAnyColor(MagicColor.fromName(key)))
{
if(cp.getKey().getRules().getType().subTypeContains(Constant.Color.COLOR_TO_BASIC_LAND_TYPE_MAP.get(key)))
{
erroneousCI.add(cp.getKey());
}
}
}
}
} }
for(Entry<CardPrinted, Integer> cp : deck.get(DeckSection.Sideboard)) { for(Entry<CardPrinted, Integer> cp : deck.get(DeckSection.Sideboard)) {
if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor())) if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor()))
{ {
erroneousCI.add(cp.getKey()); erroneousCI.add(cp.getKey());
} }
if(cp.getKey().getRules().getType().isLand())
{
for(String key : Constant.Color.COLOR_TO_BASIC_LAND_TYPE_MAP.keySet())
{
if(!cmdCI.hasAnyColor(MagicColor.fromName(key)))
{
if(cp.getKey().getRules().getType().subTypeContains(Constant.Color.COLOR_TO_BASIC_LAND_TYPE_MAP.get(key)))
{
erroneousCI.add(cp.getKey());
}
}
}
}
} }
if(erroneousCI.size() > 0) if(erroneousCI.size() > 0)