From ba8532ea863879a5c4c91c39eee265df1f667644 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Wed, 15 Dec 2010 23:50:52 -0500 Subject: [PATCH] deck format change --- .../sample-decks/ALA Block Constructed.dck | Bin 1034 -> 503 bytes .../release/sample-decks/Black Blue M11.dck | Bin 1053 -> 620 bytes Mage.Client/release/sample-decks/Jund.dck | Bin 1136 -> 670 bytes .../release/sample-decks/NayaLightsaber.dck | Bin 1013 -> 630 bytes .../release/sample-decks/Pro Walker.dck | Bin 1122 -> 617 bytes Mage.Client/release/sample-decks/RB Aggro.dck | Bin 959 -> 488 bytes .../sample-decks/SanDiegoLuisScott-Vargas.dck | Bin 1323 -> 847 bytes .../sample-decks/SanDiegoVidugiris.dck | Bin 1093 -> 633 bytes .../client/deck/generator/DeckGenerator.java | 2 +- .../client/deckeditor/DeckEditorPanel.java | 5 +- .../mage/client/dialog/JoinTableDialog.java | 3 +- .../mage/client/dialog/NewTableDialog.java | 3 +- .../java/mage/client/game/PlayAreaPanel.java | 5 +- .../mage/client/table/TablePlayerPanel.java | 3 +- .../java/mage/client/table/TablesPanel.java | 5 +- Mage.Sets/src/mage/sets/Sets.java | 96 ++++++++++++++++++ Mage/src/mage/cards/ExpansionSet.java | 8 ++ Mage/src/mage/cards/decks/DeckCardLists.java | 48 ++------- 18 files changed, 127 insertions(+), 51 deletions(-) diff --git a/Mage.Client/release/sample-decks/ALA Block Constructed.dck b/Mage.Client/release/sample-decks/ALA Block Constructed.dck index 2b9a0df7b6d460e79a3c8c2473cee9167d5f3dc4..3ec473f9208dc1f8810f9e1f35718d8a09f725c9 100644 GIT binary patch literal 503 zcmZ9I&rZTX5XSFK`VO1$0$N&>-U?!jmO>EpU^qynV2b49mU+}-jb^<)?twCwlAwqx+~s_)n^d~BQYlg>j?WWh{ad7nWf3y-bYPc z63ALC)ZrrKS$aS58nM=aMe#(?7<~&)lf76wOB~7(t2PXxOQTP{pHQiij~$W33|s7s zy*hmH^ub%mI4gA{wk=5wzn<@$W4Q69Y8*3ww62rdxSlzow*y`>@#wN?t>&5mEZU1D zpyC}&$B3%On-+6qi^P5W(Ll_J57Z4FoDv%>C3)D9$U)cFrI)4_N2yX3-Y?_`OG7a1K-f#e}J)9exN&r F!5_mLl`jAQ literal 1034 zcmZ{jzi!k(5XL9u0wnwk2>~JTCj<}(B%hGzpgCVa0y!w+B1A(mXV2Not#{4tI58AR zJO%}Cz{ycM1#@T)a6vVuosjXU1=$-PdXmJa4DFX6c^D`ZOHNiuQ~A-7;Xi1Kk9j{vVBzA zV2R#!GJxT7aCI4bx>k%rwJED!+JWI_koE&6ZZ0_`sIvA9Yu?m>;bJg#^(RMIR&DW9 zUe}>lyd98n(>E%LrPkThpva!cnb)5VV7L>C_dAM>vz5rSYcSW!d(H$f+z7_SwEf!M zf0huXg;$>qV7T{h%cLSHr-pD&CZ>W)&8_zw!`hwc59^agTk#FHa=!OfZ=v< zF18m7u1leGZDWa+z2kffhMnN(XT?(F1uGZkl^X%Qg;`A5Lz0$_F86C`$s0BU7_Nt; zMb`lt*P5HS*Io$t?_pk%%4t^1moycoo7q;wur*3X+wRuW`Sw^V*GHW)b$jKX6toX( Gt@#7WyH9ig diff --git a/Mage.Client/release/sample-decks/Black Blue M11.dck b/Mage.Client/release/sample-decks/Black Blue M11.dck index 49be31027cb15fee75b2cc5259992b431465fcd1..2b6d14a471637431c6d2a62708769e0c54eadd5e 100644 GIT binary patch literal 620 zcmZWnOHaZ;5WbW2Kg`W*Ur_5!C?bY>0OG~;Ftnp=*oWC&K>hU&p%0^{Cg09{uj%uB zIlr4qtPe1iM}jhnf>8{w{Jo3ANdPPadf`!Es!B%+G!6?11 zMp0bBn$S5?J1O)#Yz`#Jn_(m$S5O$ESQi@_Hbcfsp&M8m-|Ivn^R0vws1aVsx&9^3 zD|p1C_7{ft&0gSm6web;i2D%!ldWAaWF&sn=eko3N~j{AHgVTdq`NLg}Q2z z+rQA5kteJPrX17~2W@9F?r3ZAsL+dV4%$(q(LV}~{$P#sU7OL>K+ZV|Qbu3SP!Re( z`(B_Q$WnGVlSU6noTL>jokZRAeZ(Wb|ULg4ptL> b>bN@l3I7}&))&Q5JFLAy#$|6L5!d+xve2s} literal 1053 zcma)*y>1gh5XUFPK}moR5)wX?fE9$GI%AX$2?;wP7@ZZ#wh#@)_-HqCIK|q8g{(R1SqPOB6JppZA`;U);{OKS`_(F-)$#h3iGfK8qV$Y>8jD|Z;7B(d zs8%?_5ay{j*4@r@CqeT?8*YIffEoy$>}+ihUP@Z{vJ~iFp8=$c2Epo^4xo8u#`r^h aOnc<)z|9qU2iv5=d3*)!EjZwmLF*3>M8b9e literal 1136 zcmZ`&%T5$Q6uroxfT#!tB=Hg7u6n?@(~Uj&OcMx0z>SML(=|QiR9B5vw_#*q;%B(< z5Bv}J{)ZcPuC#8AQnZoHNplO>6-JnvcU6rLIe&ciig5{_np{budGgdfS3eCe$`Va3iw)=}*XQW2oc3^OjG`wzClkZbgaf^B_zQ z6MXCn|SMbWsl_5qf|5PXh#b2ZXj=p(Y9; zte>3KNveE_9g8x5s(Q>nAA#Ur3{$TlwO&>tiSd|NbD>6$J=*Yn6n2wax+his!cT(f z^R<>9kF-_!1W`ASGs{hIkKkQs+1EfxEz4s`u_zx!urnm88dBVM9_HUH$7|?|F{r- H-`UY`bJKLC diff --git a/Mage.Client/release/sample-decks/NayaLightsaber.dck b/Mage.Client/release/sample-decks/NayaLightsaber.dck index 22475881a2e078d266c2f7ff41d36d871352bb0e..4527be87973e3d26a0d3ea5cd59c2aae006993cc 100644 GIT binary patch literal 630 zcmZuv%Wi`}47^9mKllS$DQuukxsiyrhd?4)B~l{}1~#zOYF#axw)y*-<|&cu*kjL( zokmF{PZxnj|Lw;yC%G59=?fz@C z1yh0?mgpLA1o5xZ^1l+zqfm^Va##~-y@&UPN{77YI8lfRFWQ+e=}^OqrElgPMF`>L zu&`+EGbOio;2H@lY~2r0bspg7FhwI!tzFrItDx>en=xGh7D(E@EDCZ5Wb?k9xDrO5LB mM7B5_j1L4a;1fijXcVj@^UxfAq8sJ~EM%>81u2&3_%eSUXtVVI literal 1013 zcmaKr%We}f6oyY}3Z-0HwOoXtTm?&~MeJaclyH$IX_Z8U4U01~&Wu~v4)#ep=>mzz zV8I*k9_)D!Htbk|?Fg)*gw3ZJ`8)sd^~-lyvIcG+VZm93Cbul-*`a069e3P+A}rY_ z$*=K`cej3?fyD%tf<~~G9N-x1BNDRit)~gp6drMc_34O2Rn&WAgeu(Fc`I_BY8Uw) zKEOgXbZs|$0`m#1VGK@uO!e{G=BKatc@Y*~L(Pg4UJU`@*>TPBEy2w&Rm;h;6RvV` zh{hF*yv;58sBSPVAIv zHISo{Wyoy zk#B^|JD4Gb#jg9rDF`0Uti{CL|=&-vz@ zj*={mC(gnG^(VP@OTh9y9mTTS%OSHn<58J*s|(9ai1^&M{@gH)Kn2L0}#Yo|ml(#vgd#m>WX`ytgl=ATWySR{(=Xgdvm5{b literal 1122 zcmZ{j&rTFU5XK7umGvKjibPP1e-o2I(3@TmRs-&43A+(59*XJOnP!{rwYzp1IGFet z9()7e!@KX{#hWMXo-uYd;^j+E`uEjWUETBLJ4`wYHxDqQBt!wIi%8Sa&>I%1c& zJTz>&sL*1vwvSrAA)OIw4jHFQVYm?;$E1bqq4jZ6G|6E=&M@4Gh+oNc_3_F|@&YwE zg-2x9d{Gt9vr!oCN7JFPN*rR3l66w#SfW}t%4m&(f@LZS!|mvcVHTV50c0g74 zwP2|+Jc{(_dF#sciSyT5W;xgW_$uEyhKJE&r6bejoJa|a$1K@*ZacS;+|#*j7H>tpw%@!>w5D@3U*CsDw}Lpw$7p`X7w; zrIkC>9b{$fHHM{=s`V{lDAy(|FK8~*tYpLyZ=gdd8!gkis48C%j!H%z^gr)r7nN#t fTmE&HN%O&1Nx@Ltwr0r_J+kF)_*J3&VQa;2tXXcM diff --git a/Mage.Client/release/sample-decks/RB Aggro.dck b/Mage.Client/release/sample-decks/RB Aggro.dck index d23e135df88cab9bb1c7b4e8aa3585480e5f0a7a..604fc329236cf12d5c053352c6e0b4fdca624b4e 100644 GIT binary patch literal 488 zcmZvYK~KU!5QXm~{D--DWw!-GZ>?5Lq!@vOMAF01ZrV+Ut!}%T`0Jgn3dC@oH}l>% zZxv^0v`!$dD%*}nA?)L29Es^HhlF%h_ePs)Jd&_~O;?c&r#WP;Gd*f^F%7RygR4_{ zIpsX>D|vTQAeEd3TeNJ>QYI#m2pMJhM*>Mpz1McTr$_{I*6;%h!cSN$ENaz_N5Su9 zz*s5TzJ7PuD1SAC3CWI&_CVUe!s+ryxqDtkGyd*T5p{298%RkV6@N-+7Rd_<5}kp( z<|~`<3&ZhE2iw}2QdwWn;CnmC;l(La)Oa8T5884jQ+gV~KP1j}{XbLRix4@)R+o^e j4o@6%sO#Qh)tatxjI(jaqdxaC=e&(VJCvCaesS72&S;L7 literal 959 zcmaKryK>Yp6oya829j_K2@S(7Kxn-QLkCSvLSV)z$fls7IBP4muvXqk$62!lGdu^F2Cf@-(blaxHG|AL@AogMwv)U8|^thbMJ|?WFIF# z&%VF8_2V2YCa~mX1Z&A#Ji}p4QVm)4B!Pj(i6B^SzbMrCa70Gx+aA>d8bB zJC*|o9t7L0GAf&4DWb%!nkt+f2}}!NS-%oMa5tE`!A2>n%*A(%MzeM`fZ$#*gyCXT zDv^0X+SyorF@Sy_v(K*UaZrtw)CaXY9hP1SAlM2m(n_DGx`|#0rR)?IC*4=I&}o5V dC7w&;#n&5x<)e6WH_uJwZw>zk;Qxlz<`>;5Em{Bo diff --git a/Mage.Client/release/sample-decks/SanDiegoLuisScott-Vargas.dck b/Mage.Client/release/sample-decks/SanDiegoLuisScott-Vargas.dck index 7c409355619e0270a047cc5ce831b5a3f8122e05..b6ec8eac967b8bc7b71fc83260fd100567b5c5a4 100644 GIT binary patch literal 847 zcmYjPU2obj6n#hHKinU%N_7Z~<&CgRlS(KGRgs4BU=owu&b66iy7k}hIDyhvU!RYA z&Rs9^EZIu)omFF3XYRI@_5SWzx<+>6k)ZvrY@LXCRMNIOdqufD^v}E9Ln0zPr?O+s z-EUf2t)&}}CbZAReInvnNh@wzZ`d@HTJ3w_@)3N~k~Y$}(ItK*3+oiXy-YYyH8VO-)NDn|`)fEs`k4?1y!#gMM`V z|E;7a<(z!A?$mMx7bj`DfpI{={S|fbCd8zq2NPBzdnDf~DwO6wXX)O1>H#>v0U;N1 zitdq~w?-YUYY^dk=ehc15N57YSZH8@RE}l5Wb^4K^1i*o)}lz0DcDnOZGCW(Ys&QT zW(K3jgXTB3h6)6CqnaShjRyPBa$jeRTAow|ry-HLxx@jD878S})vHBmTdh832pH}& z-JO(gzg*I}%aE)Y>h8Ch!1q-wxDK`SWtv90kY#3J1BVliEedhv-1&FZ%m$fVs~b$l zAxw5I+`*1@{THkE_tS#~coz;i;0&CUHB=pBSr>6WNETB~!kymK>wzo4gY!{0rl!TiaVv z%NXkNs$|#7bcReDj?iM8U^rx%`#~mbY7<(Y&0FNv#uTw!njzPLn2g4_mZU8AD98m@ z9pD59#tt*4~%6|fx_dFv=cwF8i2&c|8x7MtKby^Z;mt1y&9n8&Sm~x zF}=biho)1o&0fto&%YMn?7p_+5kbRrXC`AbaNkmBOdMhC<!S3M3KU)*6(dV2S0`X*w0*3Rh#qHS-2%DC@*ynbz_r4mAqA(2P=^J%DR)= z_^g11L-IpKefmg~K3OTz2goqs3%_j@j$xB7XNifra!3UO+;S_uR#)xSc>#|#i+5_i z-#)16hMbyk&}8IyAFb*+I@DZfqz4Xd0~v1xhb<3jVy3FL#2vjK&y=Ir3#p0q`aUre zO|=Rn(iOEPSN>(zBdBZ-$9m<=I`v3eRmP6J$8xAE?d7|sYyJmo6v)~C?qdwnkxJWF b{WiM6?)Sq~*JST@Mp8DNsRas_)F}KP2Y0$# literal 1093 zcmZ`&O>Yx15S`K#C@N6eQjnk!KE%;!5jVKBsY)vn8YNN7g~KH4-F4&GsXg0ndO+f5 zaNr;CKe+QhxNzeHwkv7{!sTgKe(%l9v**iqn6m~R3^C)Zk0!A!;r)SS+YamQzacEy z7mZ&hKi=Q}c?o74Fc)Y9i;W{Z!CFB=);#NF11buKoM7qvM54-S9Wp{??rh$Qg!i2Qb-sd@u6^8XdTjB z@Ff=r9z}us68-1v8|$o7C})Q9wb3Ubrt1VxBJpCB18x#jR7b+T9`>yFyb)nS6y3K_ zahKAVn@yE*>G?M!{7)p@!`n|=XfP2rG_~kO=P+^SeXUYil?OA%5UfoZtD&i|b=@=QnM)A}9!C0~GH-QH@?F6VnttxN%Mm8}vbkR#ouYI@ur{XR zI5gKp75ZB7x|NCfFOqKKaOAE>Wm_mUqboD?ag~{A&w4p!0jSzP7TKOC6 C=VUej diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java index 58f18f9e9d0..4aaddd57fa6 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java @@ -86,7 +86,7 @@ public class DeckGenerator { File tmp = File.createTempFile("tempDeck" + UUID.randomUUID().toString(), ".dck"); tmp.createNewFile(); deck.setName("Generated-Deck-" + UUID.randomUUID()); - deck.getDeckCardLists().save(tmp.getAbsolutePath()); + Sets.saveDeck(tmp.getAbsolutePath(), deck.getDeckCardLists()); //JOptionPane.showMessageDialog(null, "Deck has been generated."); return tmp.getAbsolutePath(); } catch (Exception e) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index d9eef521647..796d54fa3ce 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -57,6 +57,7 @@ import java.lang.reflect.Constructor; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; +import mage.sets.Sets; /** * @@ -300,7 +301,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { File file = fcSelectDeck.getSelectedFile(); try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); - deck = Deck.load(DeckCardLists.load(file.getPath()), true); + deck = Deck.load(Sets.loadDeck(file.getPath()), true); } catch (GameException ex) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), ex.getMessage(), "Error loading deck", JOptionPane.ERROR_MESSAGE); } catch (Exception ex) { @@ -330,7 +331,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { if (!fileName.endsWith(".dck")) fileName += ".dck"; setCursor(new Cursor(Cursor.WAIT_CURSOR)); - deck.getDeckCardLists().save(fileName); + Sets.saveDeck(fileName, deck.getDeckCardLists()); } catch (Exception ex) { Logger.getLogger(DeckEditorPanel.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java index 1782261b104..bd6cc42bf66 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java @@ -43,6 +43,7 @@ import javax.swing.JOptionPane; import mage.cards.decks.DeckCardLists; import mage.client.remote.Session; import mage.client.util.PhaseManager; +import mage.sets.Sets; import mage.util.Logging; /** @@ -138,7 +139,7 @@ public class JoinTableDialog extends MageDialog { Session session = MageFrame.getSession(); try { PhaseManager.getInstance().setName(this.newPlayerPanel.getPlayerName()); - joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), DeckCardLists.load(this.newPlayerPanel.getDeckFile())); + joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), Sets.loadDeck(this.newPlayerPanel.getDeckFile())); } catch (Exception ex) { handleError(ex); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index c15508ed7ad..b18a86b8549 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -53,6 +53,7 @@ import mage.client.remote.Session; import mage.client.table.TablePlayerPanel; import mage.client.util.Event; import mage.client.util.Listener; +import mage.sets.Sets; import mage.util.Logging; import mage.view.GameTypeView; import mage.view.TableView; @@ -289,7 +290,7 @@ public class NewTableDialog extends MageDialog { (MultiplayerAttackOption)this.cbAttackOption.getSelectedItem(), (RangeOfInfluence)this.cbRange.getSelectedItem()); try { - if (session.joinTable(roomId, table.getTableId(), this.player1Panel.getPlayerName(), DeckCardLists.load(this.player1Panel.getDeckFile()))) { + if (session.joinTable(roomId, table.getTableId(), this.player1Panel.getPlayerName(), Sets.loadDeck(this.player1Panel.getDeckFile()))) { for (TablePlayerPanel player: players) { if (!player.getPlayerType().equals("Human")) { if (!player.joinTable(roomId, table.getTableId())) { diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 0e179abf73f..e73831fb5fd 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -43,6 +43,7 @@ import java.util.logging.Logger; import mage.cards.decks.DeckCardLists; import mage.client.MageFrame; import mage.client.cards.BigCard; +import mage.sets.Sets; import mage.view.PlayerView; /** @@ -156,13 +157,11 @@ public class PlayAreaPanel extends javax.swing.JPanel { private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheatActionPerformed try { - MageFrame.getSession().cheat(gameId, playerId, DeckCardLists.load("cheat.dck")); + MageFrame.getSession().cheat(gameId, playerId, Sets.loadDeck("cheat.dck")); } catch (FileNotFoundException ex) { Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); - } catch (ClassNotFoundException ex) { - Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_btnCheatActionPerformed diff --git a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java index d1a3bbc7926..3cb2aa66fac 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java @@ -47,6 +47,7 @@ import mage.client.remote.Session; import mage.client.util.Config; import mage.client.util.Event; import mage.client.util.Listener; +import mage.sets.Sets; import mage.util.Logging; /** @@ -81,7 +82,7 @@ public class TablePlayerPanel extends javax.swing.JPanel { public boolean joinTable(UUID roomId, UUID tableId) throws FileNotFoundException, IOException, ClassNotFoundException { if (!this.cbPlayerType.getSelectedItem().equals("Human")) { - return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), DeckCardLists.load(this.newPlayerPanel.getDeckFile())); + return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), Sets.loadDeck(this.newPlayerPanel.getDeckFile())); } return true; } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 70d279e701e..94f01af53ea 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -63,6 +63,7 @@ import mage.client.dialog.TableWaitingDialog; import mage.client.remote.MageRemoteException; import mage.client.remote.Session; import mage.client.util.ButtonColumn; +import mage.sets.Sets; import mage.util.Logging; import mage.view.TableView; @@ -293,13 +294,13 @@ public class TablesPanel extends javax.swing.JPanel implements Observer { roomId, table.getTableId(), "Human", - DeckCardLists.load("test.dck") + Sets.loadDeck("test.dck") ); session.joinTable( roomId, table.getTableId(), "Computer", - DeckCardLists.load("test.dck") + Sets.loadDeck("test.dck") ); hideTables(); session.startGame(roomId, table.getTableId()); diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage.Sets/src/mage/sets/Sets.java index 5a6fd7e31ad..d281af5f222 100644 --- a/Mage.Sets/src/mage/sets/Sets.java +++ b/Mage.Sets/src/mage/sets/Sets.java @@ -28,11 +28,20 @@ package mage.sets; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; import java.util.Set; import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import mage.cards.Card; +import mage.cards.CardImpl; import mage.cards.ExpansionSet; +import mage.cards.decks.DeckCardLists; /** * @@ -89,4 +98,91 @@ public class Sets extends HashMap { } return null; } + + public static DeckCardLists loadDeck(String file) throws FileNotFoundException { + DeckCardLists deckList = new DeckCardLists(); + + File f = new File(file); + Scanner scanner = new Scanner(f); + Pattern pattern = Pattern.compile("(SB:)?\\s*(\\d*)\\s*\\[([a-zA-Z0-9]{3}):(\\d*)\\].*"); + try { + while (scanner.hasNextLine()) { + String line = scanner.nextLine().trim(); + if (line.startsWith("#")) continue; + Matcher m = pattern.matcher(line); + if (m.matches()) { + boolean sideboard = false; + if (m.group(1) != null && m.group(1).equals("SB:")) + sideboard = true; + int count = Integer.parseInt(m.group(2)); + String setCode = m.group(3); + int cardNum = Integer.parseInt(m.group(4)); + ExpansionSet set = Sets.findSet(setCode); + String card = set.findCard(cardNum); + for (int i = 0; i < count; i++) { + if (!sideboard) { + deckList.getCards().add(card); + } + else { + deckList.getSideboard().add(card); + } + } + } + else if (line.startsWith("NAME:")) { + deckList.setName(line.substring(5, line.length())); + } + else if (line.startsWith("AUTHOR:")) { + deckList.setAuthor(line.substring(7, line.length())); + } + } + } + finally { + scanner.close(); + } + + return deckList; + } + + public static void saveDeck(String file, DeckCardLists deck) throws FileNotFoundException { + PrintWriter out = new PrintWriter(file); + Map cards = new HashMap(); + Map sideboard = new HashMap(); + try { + if (deck.getName() != null && deck.getName().length() > 0) + out.println("NAME:" + deck.getName()); + if (deck.getAuthor() != null && deck.getAuthor().length() > 0) + out.println("AUTHOR:" + deck.getAuthor()); + for (String cardClass: deck.getCards()) { + if (cards.containsKey(cardClass)) { + cards.put(cardClass, cards.get(cardClass) + 1); + } + else { + cards.put(cardClass, 1); + } + } + for (String cardClass: deck.getSideboard()) { + if (sideboard.containsKey(cardClass)) { + sideboard.put(cardClass, sideboard.get(cardClass) + 1); + } + else { + sideboard.put(cardClass, 1); + } + } + for (Map.Entry entry: cards.entrySet()) { + Card card = CardImpl.createCard(entry.getKey()); + if (card != null) { + out.printf("%d [%s:%d] %s%n", entry.getValue(), card.getExpansionSetCode(), card.getCardNumber(), card.getName()); + } + } + for (Map.Entry entry: sideboard.entrySet()) { + Card card = CardImpl.createCard(entry.getKey()); + if (card != null) { + out.printf("SB: %d [%s:%d] %s%n", entry.getValue(), card.getExpansionSetCode(), card.getCardNumber(), card.getName()); + } + } + } + finally { + out.close(); + } + } } diff --git a/Mage/src/mage/cards/ExpansionSet.java b/Mage/src/mage/cards/ExpansionSet.java index 248fe26be10..e4870d6bd1e 100644 --- a/Mage/src/mage/cards/ExpansionSet.java +++ b/Mage/src/mage/cards/ExpansionSet.java @@ -143,6 +143,14 @@ public abstract class ExpansionSet implements Serializable { return null; } + public String findCard(int cardNum) { + for (Card card: createCards()) { + if (card.getCardNumber() == cardNum) + return card.getClass().getCanonicalName(); + } + return null; + } + protected ArrayList getCardClassesForPackage(String packageName) { ArrayList classes = new ArrayList(); // Get a File object for the package diff --git a/Mage/src/mage/cards/decks/DeckCardLists.java b/Mage/src/mage/cards/decks/DeckCardLists.java index 6bf09588687..d4153b25148 100644 --- a/Mage/src/mage/cards/decks/DeckCardLists.java +++ b/Mage/src/mage/cards/decks/DeckCardLists.java @@ -28,19 +28,9 @@ package mage.cards.decks; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; /** * @@ -49,39 +39,10 @@ import java.util.logging.Logger; public class DeckCardLists implements Serializable { private String name; + private String author; private List cards = new ArrayList(); private List sideboard = new ArrayList(); - public static DeckCardLists load(String file) throws FileNotFoundException, IOException, ClassNotFoundException { - - DeckCardLists deckList = new DeckCardLists(); - - FileInputStream fis; - ObjectInputStream ois; - - fis = new FileInputStream(file); - ois = new ObjectInputStream(fis); - try { - deckList = (DeckCardLists) ois.readObject(); - return deckList; - } finally { - ois.close(); - } - - } - - public void save(String file) throws FileNotFoundException, IOException { - - FileOutputStream fs = new FileOutputStream(file); - ObjectOutputStream os = new ObjectOutputStream(fs); - try { - os.writeObject(this); - } finally { - os.close(); - } - - } - /** * @return the cards */ @@ -118,4 +79,11 @@ public class DeckCardLists implements Serializable { this.name = name; } + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } }