From 45a9f0985aaa02429aadcae1d35d1f7f6e4284f3 Mon Sep 17 00:00:00 2001 From: Hellfish Date: Tue, 23 Apr 2013 18:00:44 +0000 Subject: [PATCH] *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. --- src/main/java/forge/Constant.java | 18 +++++++++++++ src/main/java/forge/deck/DeckFormat.java | 32 +++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/main/java/forge/Constant.java b/src/main/java/forge/Constant.java index 85d24f7fb78..3c2c7b40238 100644 --- a/src/main/java/forge/Constant.java +++ b/src/main/java/forge/Constant.java @@ -20,10 +20,14 @@ 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 com.google.common.collect.ImmutableList; +import forge.card.MagicColor; + /** *

* Constant interface. @@ -95,6 +99,20 @@ public final class Constant { /** The Basic lands. */ public static final List BASIC_LANDS = Collections.unmodifiableList(Arrays.asList("Plains", "Island", "Swamp", "Mountain", "Forest")); + + public static final Map COLOR_TO_BASIC_LAND_TYPE_MAP; + + static + { + Map colToType = new HashMap(); + 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); + } } /** diff --git a/src/main/java/forge/deck/DeckFormat.java b/src/main/java/forge/deck/DeckFormat.java index f0514d80c90..c00bc421a56 100644 --- a/src/main/java/forge/deck/DeckFormat.java +++ b/src/main/java/forge/deck/DeckFormat.java @@ -19,14 +19,18 @@ package forge.deck; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.math.IntRange; +import forge.Constant; import forge.Singletons; import forge.card.CardCoreType; import forge.card.ColorSet; +import forge.card.MagicColor; import forge.item.CardDb; import forge.item.CardPrinted; import forge.item.IPaperCard; @@ -146,18 +150,44 @@ public enum DeckFormat { ColorSet cmdCI = cmd.get(0).getRules().getColorIdentity(); List erroneousCI = new ArrayList(); - + for(Entry cp : deck.get(DeckSection.Main)) { if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor())) { 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 cp : deck.get(DeckSection.Sideboard)) { if(!cp.getKey().getRules().getColorIdentity().hasNoColorsExcept(cmdCI.getColor())) { 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)