From 3115ee3c5c751321958ef67715b78d5f2130e02c Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Fri, 27 May 2011 23:04:48 -0400 Subject: [PATCH] Added deck types --- .../Mage.Deck.Constructed/pom.xml | 5 ++ .../src/mage/deck/Extended.java | 60 ++++++++++++++++ .../src/mage/deck/ScarsOfMirrodinBlock.java | 46 +++++++++++++ .../src/mage/deck/ShardsOfAlaraBlock.java | 46 +++++++++++++ .../src/mage/deck/Standard.java | 60 ++++++++++++++++ .../src/mage/deck/Vintage.java | 42 +++++++++++ .../src/mage/deck/ZendikarBlock.java | 23 +++++++ Mage.Server/config/config.xml | 7 +- Mage.Server/plugins/mage-deck-constructed.jar | Bin 3191 -> 5891 bytes Mage.Sets/src/mage/sets/Sets.java | 6 +- .../src/mage/cards/decks}/Constructed.java | 65 +++++++++++++++--- Mage/src/mage/cards/decks/DeckValidator.java | 2 + .../mage/cards/decks/DeckValidatorImpl.java | 8 +++ 13 files changed, 356 insertions(+), 14 deletions(-) create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ScarsOfMirrodinBlock.java create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ShardsOfAlaraBlock.java create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Vintage.java create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ZendikarBlock.java rename {Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck => Mage/src/mage/cards/decks}/Constructed.java (59%) diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml index 654c87c6797..883d7615545 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml @@ -20,6 +20,11 @@ Mage ${project.version} + + ${project.groupId} + Mage-Sets + ${project.version} + diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java new file mode 100644 index 00000000000..1a814d53153 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java @@ -0,0 +1,60 @@ +/* +* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.deck; + +import java.util.Calendar; +import java.util.GregorianCalendar; +import mage.Constants.SetType; +import mage.cards.ExpansionSet; +import mage.cards.decks.Constructed; +import mage.sets.Sets; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class Extended extends Constructed { + + public Extended() { + super("Constructed - Extended"); + GregorianCalendar current = new GregorianCalendar(); + GregorianCalendar cutoff; + if (current.get(Calendar.MONTH) > 9) { + cutoff = new GregorianCalendar(current.get(Calendar.YEAR) - 3, Calendar.SEPTEMBER, 1); + } + else { + cutoff = new GregorianCalendar(current.get(Calendar.YEAR) - 4, Calendar.SEPTEMBER, 1); + } + for (ExpansionSet set: Sets.getInstance().values()) { + if (set.getReleaseDate().after(cutoff.getTime()) && set.getSetType() != SetType.REPRINT) { + setCodes.add(set.getCode()); + } + } + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ScarsOfMirrodinBlock.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ScarsOfMirrodinBlock.java new file mode 100644 index 00000000000..5df864adb9f --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ScarsOfMirrodinBlock.java @@ -0,0 +1,46 @@ +/* +* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class ScarsOfMirrodinBlock extends Constructed { + + public ScarsOfMirrodinBlock() { + super("Constructed - Scars of Mirrodin Block"); + setCodes.add("SOM"); + setCodes.add("MBS"); + setCodes.add("NPH"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ShardsOfAlaraBlock.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ShardsOfAlaraBlock.java new file mode 100644 index 00000000000..570f7bf7212 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ShardsOfAlaraBlock.java @@ -0,0 +1,46 @@ +/* +* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class ShardsOfAlaraBlock extends Constructed { + + public ShardsOfAlaraBlock() { + super("Constructed - Shards Of Alara Block"); + setCodes.add("ALA"); + setCodes.add("CON"); + setCodes.add("ARB"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java new file mode 100644 index 00000000000..f15c6e5dc23 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java @@ -0,0 +1,60 @@ +/* +* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.deck; + +import java.util.Calendar; +import java.util.GregorianCalendar; +import mage.Constants.SetType; +import mage.cards.ExpansionSet; +import mage.cards.decks.Constructed; +import mage.sets.Sets; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class Standard extends Constructed { + + public Standard() { + super("Constructed - Standard"); + GregorianCalendar current = new GregorianCalendar(); + GregorianCalendar cutoff; + if (current.get(Calendar.MONTH) > 9) { + cutoff = new GregorianCalendar(current.get(Calendar.YEAR) - 1, Calendar.SEPTEMBER, 1); + } + else { + cutoff = new GregorianCalendar(current.get(Calendar.YEAR) - 2, Calendar.SEPTEMBER, 1); + } + for (ExpansionSet set: Sets.getInstance().values()) { + if (set.getReleaseDate().after(cutoff.getTime()) && set.getSetType() != SetType.REPRINT) { + setCodes.add(set.getCode()); + } + } + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Vintage.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Vintage.java new file mode 100644 index 00000000000..134d4b87708 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Vintage.java @@ -0,0 +1,42 @@ +/* +* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class Vintage extends Constructed { + + public Vintage() { + super("Constructed - Vintage"); + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ZendikarBlock.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ZendikarBlock.java new file mode 100644 index 00000000000..e1e67df5a2c --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/ZendikarBlock.java @@ -0,0 +1,23 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package mage.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class ZendikarBlock extends Constructed { + + public ZendikarBlock() { + super("Constructed - Zendikar Block"); + setCodes.add("ZEN"); + setCodes.add("WWK"); + setCodes.add("ROE"); + } + +} diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index 00f586ba5a9..0af9337b3ab 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -16,7 +16,12 @@ - + + + + + + diff --git a/Mage.Server/plugins/mage-deck-constructed.jar b/Mage.Server/plugins/mage-deck-constructed.jar index 3647989d7d0afaf8be3e1704bfbe762d4206dabf..7a164e1ad62b62b076635a90555feecbc0782667 100644 GIT binary patch literal 5891 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 HAN>0t-j5wc delta 2317 zcmaJ@2{aU1A0NwD2BR5ftRpg(WSKEZq_Ko%C{4CPLotMzVK5VkCWI&kQ%#d4gh;Zy zXKf;>l(L0~EMxmDy%$PF%JcAj^-k}d^Zn1c=iYPg@BIGvf9~(z-;L8>mX{*f3kib& zn~~kPFI@^LmDRWp`)A)f{`rlm^mMF0R!;N8K<-JsjT0Ji^TYE$QfhudFxRUuW7xD7hHs zr4WnN`+|`8sHf5p{clm!MvkJHA8zY1&g?OX5*f$w|AXE-({Vzw?P>>HVmb zSP=zd+2P)<_;4fMMXtQ$D^Sm}_l=gX6Dt;$=!Embjx>)J%V7vd+Gj;!YYM5a|GA>r9 zlg|2?bpBx%(`S7(;__|Y+?N7%PIkk)bAo9#lDJ+z`1#w{aBc2d2Gvl{@0e4A zBadGUV#`B~_gkJ%JmXu*DkLb8Ss&Kd!sW5M3^MR(_hXXouGMDI@Ibb_qU!HiUbh@EtXCQ5SBdM=X}8AQ-x{$De^*iY8TD z8N;pa9zjE8-S4^E7z;7>tuy(>1{Jp2b1P7&8z`2in7>ywA0i*ihYG&%Z;^K-}S>(8}iMuL(#>>2N1V|JqIEAg)T>W&DD_ zPuFV1bhHW&Wa56X%IFoyz+~!VDQ6!-lViA~SbqyQ8ua3K+khC(+Q-GwcEv+Ai&d$< z={a))mg4RejCK-}{eoD!%s&&jm@GV3I=zRmM(wNNZEG`I0)5Nb?u=&lsp3Qji+DG!UR?5&bHbicL~;~|#DK- zDBy8QVr$#9d57-Uda2qNte48~unR687xv66zsSbzIe}wJ;}2?%-n#P}WYqd%*}nG$)T~W{Oi26^^DM;@ZOZo^_{z z#YmR2S0CgK^q6&&gFnz^}c4#6ZHkbtHOYcrs*R<|o-$`0x&ZX}xM!UdmL z&)lVm3lb5B*7KXjq32tj0fWNLA1+W5U+hRWl0_wBrZ~BQkF|?s1$5J!U_4u9huVj? zV^X{%lv}JRENE3;eY;dyZEbZ&#z*CVPwI;1-}ID$z)8?+kRfyOjaLCIU()7)7EQ;0 zr zDpsqyY2z=v!^-9FZ;iAc39CRtn3Hxg4yRxj^GqsT;Ej;0{+cVm&~a#sVE6c2{l?4P zc;C`q+zl^z&BEuoD^iXMNxiQ4MF5!#OMk=&l!HGnEG{i~3zQ|`Lvf1=b9=1=YqXq| zD)Ouy#j?j#-W-+oMAHsp@F^3GktqF#WIHdR=qp$WpZt3z2^1Zsk9#f)dD`sA z_Dht&98ORs8%imwD1m_k2Oo~5sQVEFIxjeh-0ioNFlUTCDydzMicLG1bJ{GE95h-L zLnTsKW-K#0Hg#d(00q<7(qy!2m6-~yE}*p+K(>9@>5`!tA$jKG-Qtw;K)OpJxEY@j zMIk0cX9GD!;$&|J8>U;OAZZG0;9*=5?33Tb4Y{Y`*u1P;UWj-$cfPZbo`TJ4cT)}A z5!RJD+jJ*+1&Eg!Rlsl%Id#ZpB7x}FqcM^xmUNF>H00%#&k_&nFQ@9sAGmA04(DSW zl7rj*-}Gyca{zC)52cRvjEW33i8(r-R1}TxdGx#vVi&ir^j$Y%n-+@Q3l?&qZ#Y}{ zMl;*g2b&KEvv)z^df*q@E{k@roKS|xP=+;zMpcGJ#}=hNyP^zHyQlu6W3Q*v@v8F| zqb^LJP-qW32)chuclV*YfA(bd0@P^FW~Pk5dHtL>%WP%z7lK#OhNdaWebo^g(0>IN!glM z1hOrp6?OlC{;3xI?>PaRwP=d47hz_q|GIiVKmb5NOsL2PD~cTjmr?!K8Tw0 diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage.Sets/src/mage/sets/Sets.java index d8f72c2b1c2..8a3fad9dbae 100644 --- a/Mage.Sets/src/mage/sets/Sets.java +++ b/Mage.Sets/src/mage/sets/Sets.java @@ -232,10 +232,8 @@ public class Sets extends HashMap { public static ExpansionSet findSet(String code) { - for (ExpansionSet set: fINSTANCE.values()) { - if (set.getCode().equals(code)) - return set; - } + if (fINSTANCE.containsKey(code)) + return fINSTANCE.get(code); return null; } diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Constructed.java b/Mage/src/mage/cards/decks/Constructed.java similarity index 59% rename from Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Constructed.java rename to Mage/src/mage/cards/decks/Constructed.java index b76db08d3bd..1b62d39a7d5 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Constructed.java +++ b/Mage/src/mage/cards/decks/Constructed.java @@ -26,7 +26,7 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.deck; +package mage.cards.decks; import java.util.ArrayList; import java.util.Arrays; @@ -34,8 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import mage.cards.decks.Deck; -import mage.cards.decks.DeckValidatorImpl; +import mage.cards.Card; /** * @@ -43,18 +42,31 @@ import mage.cards.decks.DeckValidatorImpl; */ public class Constructed extends DeckValidatorImpl { + protected List banned = new ArrayList(); + protected List restricted = new ArrayList(); + protected List setCodes = new ArrayList(); + public Constructed() { super("Constructed"); } + protected Constructed(String name) { + super(name); + } + @Override public boolean validate(Deck deck) { + boolean valid = true; //20091005 - 100.2a - if (deck.getCards().size() < 60) - return false; + if (deck.getCards().size() < 60) { + invalid.put("Deck", "Must contain at least 60 cards: " + deck.getCards().size()); + valid = false; + } //20091005 - 100.4a - if (deck.getSideboard().size() != 0 && deck.getSideboard().size() != 15) - return false; + if (!deck.getSideboard().isEmpty() && deck.getSideboard().size() != 15) { + invalid.put("Sideboard", "Must have 0 or 15 cards: " + deck.getSideboard().size()); + valid = false; + } List basicLandNames = new ArrayList(Arrays.asList("Forest", "Island", "Mountain", "Swamp", "Plains")); Map counts = new HashMap(); @@ -63,12 +75,47 @@ public class Constructed extends DeckValidatorImpl { for (Entry entry: counts.entrySet()) { if (entry.getValue() > 4) { if (!basicLandNames.contains(entry.getKey()) && !entry.getKey().equals("Relentless Rats")) { - return false; + invalid.put(entry.getKey(), "Too many: " + entry.getValue()); + valid = false; + } + } + } + for (String bannedCard: banned) { + if (counts.containsKey(bannedCard)) { + invalid.put(bannedCard, "Banned"); + valid = false; + } + } + + for (String restrictedCard: restricted) { + if (counts.containsKey(restrictedCard)) { + int count = counts.get(restrictedCard); + if (count > 1) { + invalid.put(restrictedCard, "Restricted: " + count); + valid = false; + } + } + } + if (!setCodes.isEmpty()) { + for (Card card: deck.getCards()) { + if (!setCodes.contains(card.getExpansionSetCode())) { + if (!invalid.containsKey(card.getName())) { + invalid.put(card.getName(), "Invalid set: " + card.getExpansionSetCode()); + valid = false; + } + } + } + for (Card card: deck.getSideboard()) { + if (!setCodes.contains(card.getExpansionSetCode())) { + if (!invalid.containsKey(card.getName())) { + invalid.put(card.getName(), "Invalid set: " + card.getExpansionSetCode()); + valid = false; + } } } } - return true; + return valid; } } diff --git a/Mage/src/mage/cards/decks/DeckValidator.java b/Mage/src/mage/cards/decks/DeckValidator.java index f0c0bb656fa..c450583f412 100644 --- a/Mage/src/mage/cards/decks/DeckValidator.java +++ b/Mage/src/mage/cards/decks/DeckValidator.java @@ -29,6 +29,7 @@ package mage.cards.decks; import java.io.Serializable; +import java.util.Map; /** * @@ -38,5 +39,6 @@ public interface DeckValidator extends Serializable { public String getName(); public boolean validate(Deck deck); + public Map getInvalid(); } diff --git a/Mage/src/mage/cards/decks/DeckValidatorImpl.java b/Mage/src/mage/cards/decks/DeckValidatorImpl.java index 16fa9e8bb09..76d31d32b7d 100644 --- a/Mage/src/mage/cards/decks/DeckValidatorImpl.java +++ b/Mage/src/mage/cards/decks/DeckValidatorImpl.java @@ -29,6 +29,7 @@ package mage.cards.decks; import java.util.Collection; +import java.util.HashMap; import java.util.Map; import mage.cards.Card; @@ -40,6 +41,8 @@ public abstract class DeckValidatorImpl implements DeckValidator { protected String name; + protected Map invalid = new HashMap(); + public DeckValidatorImpl(String name) { this.name = name; } @@ -59,4 +62,9 @@ public abstract class DeckValidatorImpl implements DeckValidator { } } } + + @Override + public Map getInvalid() { + return invalid; + } }