implement varied images for booster packs (waiting in branch until images are synced to server)

This commit is contained in:
myk
2013-03-24 14:13:15 +00:00
10 changed files with 427 additions and 208 deletions

1
.gitattributes vendored
View File

@@ -12,7 +12,6 @@
/pom.xml svneol=native#text/xml /pom.xml svneol=native#text/xml
res/ai/Default.ai -text res/ai/Default.ai -text
res/blockdata/blocks.txt svneol=native#text/plain res/blockdata/blocks.txt svneol=native#text/plain
res/blockdata/boosters.txt -text
res/blockdata/fantasyblocks.txt -text res/blockdata/fantasyblocks.txt -text
res/blockdata/fatpacks.txt -text res/blockdata/fatpacks.txt -text
res/blockdata/formats.txt -text res/blockdata/formats.txt -text

View File

@@ -1,79 +1,79 @@
Set:10E|LandSet:10E|Commons:10|Uncommons:3|Rares:1 Set:10E|LandSet:10E|Commons:10|Uncommons:3|Rares:1|Images:5
Set:2ED|Commons:11|Uncommons:3|Rares:1 Set:2ED|Commons:11|Uncommons:3|Rares:1|Images:1
Set:3ED|Commons:11|Uncommons:3|Rares:1 Set:3ED|Commons:11|Uncommons:3|Rares:1|Images:1
Set:4ED|Commons:11|Uncommons:3|Rares:1 Set:4ED|Commons:11|Uncommons:3|Rares:1|Images:5
Set:5DN|Commons:11|Uncommons:3|Rares:1 Set:5DN|Commons:11|Uncommons:3|Rares:1|Images:3
Set:5ED|Commons:11|Uncommons:3|Rares:1 Set:5ED|Commons:11|Uncommons:3|Rares:1|Images:5
Set:6ED|Commons:11|Uncommons:3|Rares:1 Set:6ED|Commons:11|Uncommons:3|Rares:1|Images:1
Set:7ED|Commons:10|Uncommons:3|Rares:1 Set:7ED|Commons:10|Uncommons:3|Rares:1|Images:5
Set:8ED|Commons:10|Uncommons:3|Rares:1 Set:8ED|Commons:10|Uncommons:3|Rares:1|Images:5
Set:9ED|Commons:10|Uncommons:3|Rares:1 Set:9ED|Commons:10|Uncommons:3|Rares:1|Images:5
Set:ALA|Commons:10|Uncommons:3|Rares:1 Set:ALA|Commons:10|Uncommons:3|Rares:1|Images:5
Set:ALL|Commons:8|Uncommons:3|Rares:1 Set:ALL|Commons:8|Uncommons:3|Rares:1|Images:1
Set:APC|Commons:11|Uncommons:3|Rares:1 Set:APC|Commons:11|Uncommons:3|Rares:1|Images:1
Set:ARB|LandSet:ALA|Commons:10|Uncommons:3|Rares:1 Set:ARB|LandSet:ALA|Commons:10|Uncommons:3|Rares:1|Images:3
Set:ARN|Commons:6|Uncommons:2 Set:ARN|Commons:6|Uncommons:2|Images:1
Set:ATQ|Commons:5|Uncommons:2|Rares:1 Set:ATQ|Commons:5|Uncommons:2|Rares:1|Images:1
Set:AVR|Commons:10|Uncommons:3|Rares:1 Set:AVR|Commons:10|Uncommons:3|Rares:1|Images:5
Set:BOK|Commons:11|Uncommons:3|Rares:1 Set:BOK|Commons:11|Uncommons:3|Rares:1|Images:3
Set:CFX|LandSet:ALA|Commons:10|Uncommons:3|Rares:1 Set:CFX|LandSet:ALA|Commons:10|Uncommons:3|Rares:1|Images:3
Set:CHK|Commons:11|Uncommons:3|Rares:1 Set:CHK|Commons:11|Uncommons:3|Rares:1|Images:5
Set:CHR|Commons:9|Uncommons:3 Set:CHR|Commons:9|Uncommons:3|Images:1
Set:CSP|Commons:11|Uncommons:3|Rares:1 Set:CSP|Commons:11|Uncommons:3|Rares:1|Images:3
Set:DIS|Commons:11|Uncommons:3|Rares:1 Set:DIS|Commons:11|Uncommons:3|Rares:1|Images:3
Set:DRK|Commons:6|Rares:2 Set:DKA|LandSet:ISD|Commons:9|Uncommons:3|DoubleFaced:1|Rares:1|Images:3
Set:DST|Commons:11|Uncommons:3|Rares:1 Set:DRK|Commons:6|Rares:2|Images:1
Set:EVE|Commons:11|Uncommons:3|Rares:1 Set:DST|Commons:11|Uncommons:3|Rares:1|Images:3
Set:EXO|Commons:11|Uncommons:3|Rares:1 Set:EVE|Commons:11|Uncommons:3|Rares:1|Images:3
Set:FEM|Commons:5|Uncommons:2|Rares:1 Set:EXO|Commons:11|Uncommons:3|Rares:1|Images:1
Set:FUT|Commons:11|Uncommons:3|Rares:1 Set:FEM|Commons:5|Uncommons:2|Rares:1|Images:1
Set:GPT|Commons:11|Uncommons:3|Rares:1 Set:FUT|Commons:11|Uncommons:3|Rares:1|Images:3
Set:GTC|Commons:10|Uncommons:3|Rares:1 Set:GPT|Commons:11|Uncommons:3|Rares:1|Images:3
Set:HML|Commons:6|Uncommons:2 Set:GTC|Commons:10|Uncommons:3|Rares:1|Images:5
Set:ICE|Commons:11|Uncommons:3|Rares:1 Set:HML|Commons:6|Uncommons:2|Images:1
Set:INV|Commons:11|Uncommons:3|Rares:1 Set:ICE|Commons:11|Uncommons:3|Rares:1|Images:5
Set:JUD|Commons:11|Uncommons:3|Rares:1 Set:INV|Commons:11|Uncommons:3|Rares:1|Images:3
Set:LEA|Commons:11|Uncommons:3|Rares:1 Set:ISD|Commons:9|Uncommons:3|DoubleFaced:1|Rares:1|Images:5
Set:LEB|Commons:11|Uncommons:3|Rares:1 Set:JUD|Commons:11|Uncommons:3|Rares:1|Images:1
Set:LEG|Commons:11|Uncommons:3|Rares:1 Set:LEA|Commons:11|Uncommons:3|Rares:1|Images:1
Set:LGN|Commons:11|Uncommons:3|Rares:1 Set:LEB|Commons:11|Uncommons:3|Rares:1|Images:1
Set:LRW|Commons:11|Uncommons:3|Rares:1 Set:LEG|Commons:11|Uncommons:3|Rares:1|Images:1
Set:M10|Commons:10|Uncommons:3|Rares:1 Set:LGN|Commons:11|Uncommons:3|Rares:1|Images:3
Set:M11|Commons:10|Uncommons:3|Rares:1 Set:LRW|Commons:11|Uncommons:3|Rares:1|Images:5
Set:M12|Commons:10|Uncommons:3|Rares:1 Set:M10|Commons:10|Uncommons:3|Rares:1|Images:5
Set:M13|Commons:10|Uncommons:3|Rares:1 Set:M11|Commons:10|Uncommons:3|Rares:1|Images:5
Set:MBS|Commons:10|Uncommons:3|Rares:1 Set:M12|Commons:10|Uncommons:3|Rares:1|Images:5
Set:MIR|Commons:11|Uncommons:3|Rares:1 Set:M13|Commons:10|Uncommons:3|Rares:1|Images:5
Set:MMQ|Commons:11|Uncommons:3|Rares:1 Set:MBS|Commons:10|Uncommons:3|Rares:1|Images:3
Set:MOR|Commons:11|Uncommons:3|Rares:1 Set:MIR|Commons:11|Uncommons:3|Rares:1|Images:5
Set:MRD|Commons:11|Uncommons:3|Rares:1 Set:MMQ|Commons:11|Uncommons:3|Rares:1|Images:3
Set:NMS|Commons:11|Uncommons:3|Rares:1 Set:MOR|Commons:11|Uncommons:3|Rares:1|Images:3
Set:NPH|Commons:10|Uncommons:3|Rares:1 Set:MRD|Commons:11|Uncommons:3|Rares:1|Images:5
Set:ODY|Commons:11|Uncommons:3|Rares:1 Set:NMS|Commons:11|Uncommons:3|Rares:1|Images:1
Set:ONS|Commons:11|Uncommons:3|Rares:1 Set:NPH|Commons:10|Uncommons:3|Rares:1|Images:3
Set:PO2|Commons:11|Uncommons:3|Rares:1 Set:ODY|Commons:11|Uncommons:3|Rares:1|Images:3
Set:PCY|Commons:11|Uncommons:3|Rares:1 Set:ONS|Commons:11|Uncommons:3|Rares:1|Images:5
Set:PLC|Commons:11|Uncommons:3|Rares:1 Set:PCY|Commons:11|Uncommons:3|Rares:1|Images:1
Set:PLS|Commons:11|Uncommons:3|Rares:1 Set:PLC|Commons:11|Uncommons:3|Rares:1|Images:3
Set:POR|Commons:11|Uncommons:3|Rares:1 Set:PLS|Commons:11|Uncommons:3|Rares:1|Images:1
Set:PTK|Commons:5|Uncommons:2|Rares:1 Set:PO2|Commons:11|Uncommons:3|Rares:1|Images:1
Set:RAV|Commons:11|Uncommons:3|Rares:1 Set:POR|Commons:11|Uncommons:3|Rares:1|Images:5
Set:ROE|Commons:10|Uncommons:3|Rares:1 Set:PTK|Commons:5|Uncommons:2|Rares:1|Images:1
Set:RTR|Commons:10|Uncommons:3|Rares:1 Set:RAV|Commons:11|Uncommons:3|Rares:1|Images:5
Set:SCG|Commons:11|Uncommons:3|Rares:1 Set:ROE|Commons:10|Uncommons:3|Rares:1|Images:5
Set:SHM|Commons:11|Uncommons:3|Rares:1 Set:RTR|Commons:10|Uncommons:3|Rares:1|Images:5
Set:SOK|Commons:11|Uncommons:3|Rares:1 Set:SCG|Commons:11|Uncommons:3|Rares:1|Images:3
Set:SOM|Commons:10|Uncommons:3|Rares:1 Set:SHM|Commons:11|Uncommons:3|Rares:1|Images:5
Set:STH|Commons:11|Uncommons:3|Rares:1 Set:SOK|Commons:11|Uncommons:3|Rares:1|Images:3
Set:TMP|Commons:11|Uncommons:3|Rares:1 Set:SOM|Commons:10|Uncommons:3|Rares:1|Images:5
Set:TOR|Commons:11|Uncommons:3|Rares:1 Set:STH|Commons:11|Uncommons:3|Rares:1|Images:1
Set:TSP|Commons:10|Uncommons:3|Rares:1|Special:1 Set:TMP|Commons:11|Uncommons:3|Rares:1|Images:3
Set:UDS|Commons:11|Uncommons:3|Rares:1 Set:TOR|Commons:11|Uncommons:3|Rares:1|Images:1
Set:ULG|Commons:11|Uncommons:3|Rares:1 Set:TSP|Commons:10|Uncommons:3|Rares:1|Special:1|Images:5
Set:USG|Commons:11|Uncommons:3|Rares:1 Set:UDS|Commons:11|Uncommons:3|Rares:1|Images:1
Set:VIS|Commons:11|Uncommons:3|Rares:1 Set:ULG|Commons:11|Uncommons:3|Rares:1|Images:1
Set:WTH|Commons:11|Uncommons:3|Rares:1 Set:USG|Commons:11|Uncommons:3|Rares:1|Images:3
Set:WWK|LandSet:ZEN|Commons:10|Uncommons:3|Rares:1 Set:VIS|Commons:11|Uncommons:3|Rares:1|Images:1
Set:ZEN|Commons:10|Uncommons:3|Rares:1 Set:WTH|Commons:11|Uncommons:3|Rares:1|Images:1
Set:ISD|Commons:9|Uncommons:3|DoubleFaced:1|Rares:1 Set:WWK|LandSet:ZEN|Commons:10|Uncommons:3|Rares:1|Images:3
Set:DKA|LandSet:ISD|Commons:9|Uncommons:3|DoubleFaced:1|Rares:1 Set:ZEN|Commons:10|Uncommons:3|Rares:1|Images:5

View File

@@ -1,80 +1,240 @@
http://www.cardforge.org/fpics/products/boosters/10E.png http://www.cardforge.org/fpics/products/boosters/10E_1.png
http://www.cardforge.org/fpics/products/boosters/10E_2.png
http://www.cardforge.org/fpics/products/boosters/10E_3.png
http://www.cardforge.org/fpics/products/boosters/10E_4.png
http://www.cardforge.org/fpics/products/boosters/10E_5.png
http://www.cardforge.org/fpics/products/boosters/2ED.png http://www.cardforge.org/fpics/products/boosters/2ED.png
http://www.cardforge.org/fpics/products/boosters/3ED.png http://www.cardforge.org/fpics/products/boosters/3ED.png
http://www.cardforge.org/fpics/products/boosters/4ED.png http://www.cardforge.org/fpics/products/boosters/4ED_1.png
http://www.cardforge.org/fpics/products/boosters/5DN.png http://www.cardforge.org/fpics/products/boosters/4ED_2.png
http://www.cardforge.org/fpics/products/boosters/5ED.png http://www.cardforge.org/fpics/products/boosters/4ED_3.png
http://www.cardforge.org/fpics/products/boosters/4ED_4.png
http://www.cardforge.org/fpics/products/boosters/4ED_5.png
http://www.cardforge.org/fpics/products/boosters/5DN_1.png
http://www.cardforge.org/fpics/products/boosters/5DN_2.png
http://www.cardforge.org/fpics/products/boosters/5DN_3.png
http://www.cardforge.org/fpics/products/boosters/5ED_1.png
http://www.cardforge.org/fpics/products/boosters/5ED_2.png
http://www.cardforge.org/fpics/products/boosters/5ED_3.png
http://www.cardforge.org/fpics/products/boosters/5ED_4.png
http://www.cardforge.org/fpics/products/boosters/5ED_5.png
http://www.cardforge.org/fpics/products/boosters/6ED.png http://www.cardforge.org/fpics/products/boosters/6ED.png
http://www.cardforge.org/fpics/products/boosters/7ED.png http://www.cardforge.org/fpics/products/boosters/7ED_1.png
http://www.cardforge.org/fpics/products/boosters/8ED.png http://www.cardforge.org/fpics/products/boosters/7ED_2.png
http://www.cardforge.org/fpics/products/boosters/9ED.png http://www.cardforge.org/fpics/products/boosters/7ED_3.png
http://www.cardforge.org/fpics/products/boosters/ALA.png http://www.cardforge.org/fpics/products/boosters/7ED_4.png
http://www.cardforge.org/fpics/products/boosters/7ED_5.png
http://www.cardforge.org/fpics/products/boosters/8ED_1.png
http://www.cardforge.org/fpics/products/boosters/8ED_2.png
http://www.cardforge.org/fpics/products/boosters/8ED_3.png
http://www.cardforge.org/fpics/products/boosters/8ED_4.png
http://www.cardforge.org/fpics/products/boosters/8ED_5.png
http://www.cardforge.org/fpics/products/boosters/9ED_1.png
http://www.cardforge.org/fpics/products/boosters/9ED_2.png
http://www.cardforge.org/fpics/products/boosters/9ED_3.png
http://www.cardforge.org/fpics/products/boosters/9ED_4.png
http://www.cardforge.org/fpics/products/boosters/9ED_5.png
http://www.cardforge.org/fpics/products/boosters/ALA_1.png
http://www.cardforge.org/fpics/products/boosters/ALA_2.png
http://www.cardforge.org/fpics/products/boosters/ALA_3.png
http://www.cardforge.org/fpics/products/boosters/ALA_4.png
http://www.cardforge.org/fpics/products/boosters/ALA_5.png
http://www.cardforge.org/fpics/products/boosters/ALL.png http://www.cardforge.org/fpics/products/boosters/ALL.png
http://www.cardforge.org/fpics/products/boosters/APC.png http://www.cardforge.org/fpics/products/boosters/APC.png
http://www.cardforge.org/fpics/products/boosters/ARB.png http://www.cardforge.org/fpics/products/boosters/ARB_1.png
http://www.cardforge.org/fpics/products/boosters/ARB_2.png
http://www.cardforge.org/fpics/products/boosters/ARB_3.png
http://www.cardforge.org/fpics/products/boosters/ARN.png http://www.cardforge.org/fpics/products/boosters/ARN.png
http://www.cardforge.org/fpics/products/boosters/ATQ.png http://www.cardforge.org/fpics/products/boosters/ATQ.png
http://www.cardforge.org/fpics/products/boosters/AVR.png http://www.cardforge.org/fpics/products/boosters/AVR_1.png
http://www.cardforge.org/fpics/products/boosters/BOK.png http://www.cardforge.org/fpics/products/boosters/AVR_2.png
http://www.cardforge.org/fpics/products/boosters/CFX.png http://www.cardforge.org/fpics/products/boosters/AVR_3.png
http://www.cardforge.org/fpics/products/boosters/CHK.png http://www.cardforge.org/fpics/products/boosters/AVR_4.png
http://www.cardforge.org/fpics/products/boosters/AVR_5.png
http://www.cardforge.org/fpics/products/boosters/BOK_1.png
http://www.cardforge.org/fpics/products/boosters/BOK_2.png
http://www.cardforge.org/fpics/products/boosters/BOK_3.png
http://www.cardforge.org/fpics/products/boosters/CFX_1.png
http://www.cardforge.org/fpics/products/boosters/CFX_2.png
http://www.cardforge.org/fpics/products/boosters/CFX_3.png
http://www.cardforge.org/fpics/products/boosters/CHK_1.png
http://www.cardforge.org/fpics/products/boosters/CHK_2.png
http://www.cardforge.org/fpics/products/boosters/CHK_3.png
http://www.cardforge.org/fpics/products/boosters/CHK_4.png
http://www.cardforge.org/fpics/products/boosters/CHK_5.png
http://www.cardforge.org/fpics/products/boosters/CHR.png http://www.cardforge.org/fpics/products/boosters/CHR.png
http://www.cardforge.org/fpics/products/boosters/CSP.png http://www.cardforge.org/fpics/products/boosters/CSP_1.png
http://www.cardforge.org/fpics/products/boosters/DIS.png http://www.cardforge.org/fpics/products/boosters/CSP_2.png
http://www.cardforge.org/fpics/products/boosters/DKA.png http://www.cardforge.org/fpics/products/boosters/CSP_3.png
http://www.cardforge.org/fpics/products/boosters/DIS_1.png
http://www.cardforge.org/fpics/products/boosters/DIS_2.png
http://www.cardforge.org/fpics/products/boosters/DIS_3.png
http://www.cardforge.org/fpics/products/boosters/DKA_1.png
http://www.cardforge.org/fpics/products/boosters/DKA_2.png
http://www.cardforge.org/fpics/products/boosters/DKA_3.png
http://www.cardforge.org/fpics/products/boosters/DRK.png http://www.cardforge.org/fpics/products/boosters/DRK.png
http://www.cardforge.org/fpics/products/boosters/DST.png http://www.cardforge.org/fpics/products/boosters/DST_1.png
http://www.cardforge.org/fpics/products/boosters/EVE.png http://www.cardforge.org/fpics/products/boosters/DST_2.png
http://www.cardforge.org/fpics/products/boosters/DST_3.png
http://www.cardforge.org/fpics/products/boosters/EVE_1.png
http://www.cardforge.org/fpics/products/boosters/EVE_2.png
http://www.cardforge.org/fpics/products/boosters/EVE_3.png
http://www.cardforge.org/fpics/products/boosters/EXO.png http://www.cardforge.org/fpics/products/boosters/EXO.png
http://www.cardforge.org/fpics/products/boosters/FEM.png http://www.cardforge.org/fpics/products/boosters/FEM.png
http://www.cardforge.org/fpics/products/boosters/FUT.png http://www.cardforge.org/fpics/products/boosters/FUT_1.png
http://www.cardforge.org/fpics/products/boosters/GPT.png http://www.cardforge.org/fpics/products/boosters/FUT_2.png
http://www.cardforge.org/fpics/products/boosters/GTC.png http://www.cardforge.org/fpics/products/boosters/FUT_3.png
http://www.cardforge.org/fpics/products/boosters/GPT_1.png
http://www.cardforge.org/fpics/products/boosters/GPT_2.png
http://www.cardforge.org/fpics/products/boosters/GPT_3.png
http://www.cardforge.org/fpics/products/boosters/GTC_1.png
http://www.cardforge.org/fpics/products/boosters/GTC_2.png
http://www.cardforge.org/fpics/products/boosters/GTC_3.png
http://www.cardforge.org/fpics/products/boosters/GTC_4.png
http://www.cardforge.org/fpics/products/boosters/GTC_5.png
http://www.cardforge.org/fpics/products/boosters/HML.png http://www.cardforge.org/fpics/products/boosters/HML.png
http://www.cardforge.org/fpics/products/boosters/ICE.png http://www.cardforge.org/fpics/products/boosters/ICE_1.png
http://www.cardforge.org/fpics/products/boosters/INV.png http://www.cardforge.org/fpics/products/boosters/ICE_2.png
http://www.cardforge.org/fpics/products/boosters/ISD.png http://www.cardforge.org/fpics/products/boosters/ICE_3.png
http://www.cardforge.org/fpics/products/boosters/ICE_4.png
http://www.cardforge.org/fpics/products/boosters/ICE_5.png
http://www.cardforge.org/fpics/products/boosters/INV_1.png
http://www.cardforge.org/fpics/products/boosters/INV_2.png
http://www.cardforge.org/fpics/products/boosters/INV_3.png
http://www.cardforge.org/fpics/products/boosters/ISD_1.png
http://www.cardforge.org/fpics/products/boosters/ISD_2.png
http://www.cardforge.org/fpics/products/boosters/ISD_3.png
http://www.cardforge.org/fpics/products/boosters/ISD_4.png
http://www.cardforge.org/fpics/products/boosters/ISD_5.png
http://www.cardforge.org/fpics/products/boosters/JUD.png http://www.cardforge.org/fpics/products/boosters/JUD.png
http://www.cardforge.org/fpics/products/boosters/LEA.png http://www.cardforge.org/fpics/products/boosters/LEA.png
http://www.cardforge.org/fpics/products/boosters/LEB.png http://www.cardforge.org/fpics/products/boosters/LEB.png
http://www.cardforge.org/fpics/products/boosters/LEG.png http://www.cardforge.org/fpics/products/boosters/LEG.png
http://www.cardforge.org/fpics/products/boosters/LGN.png http://www.cardforge.org/fpics/products/boosters/LGN_1.png
http://www.cardforge.org/fpics/products/boosters/LRW.png http://www.cardforge.org/fpics/products/boosters/LGN_2.png
http://www.cardforge.org/fpics/products/boosters/M10.png http://www.cardforge.org/fpics/products/boosters/LGN_3.png
http://www.cardforge.org/fpics/products/boosters/M11.png http://www.cardforge.org/fpics/products/boosters/LRW_1.png
http://www.cardforge.org/fpics/products/boosters/M12.png http://www.cardforge.org/fpics/products/boosters/LRW_2.png
http://www.cardforge.org/fpics/products/boosters/M13.png http://www.cardforge.org/fpics/products/boosters/LRW_3.png
http://www.cardforge.org/fpics/products/boosters/MBS.png http://www.cardforge.org/fpics/products/boosters/LRW_4.png
http://www.cardforge.org/fpics/products/boosters/MIR.png http://www.cardforge.org/fpics/products/boosters/LRW_5.png
http://www.cardforge.org/fpics/products/boosters/MMQ.png http://www.cardforge.org/fpics/products/boosters/M10_1.png
http://www.cardforge.org/fpics/products/boosters/MOR.png http://www.cardforge.org/fpics/products/boosters/M10_2.png
http://www.cardforge.org/fpics/products/boosters/MRD.png http://www.cardforge.org/fpics/products/boosters/M10_3.png
http://www.cardforge.org/fpics/products/boosters/M10_4.png
http://www.cardforge.org/fpics/products/boosters/M10_5.png
http://www.cardforge.org/fpics/products/boosters/M11_1.png
http://www.cardforge.org/fpics/products/boosters/M11_2.png
http://www.cardforge.org/fpics/products/boosters/M11_3.png
http://www.cardforge.org/fpics/products/boosters/M11_4.png
http://www.cardforge.org/fpics/products/boosters/M11_5.png
http://www.cardforge.org/fpics/products/boosters/M12_1.png
http://www.cardforge.org/fpics/products/boosters/M12_2.png
http://www.cardforge.org/fpics/products/boosters/M12_3.png
http://www.cardforge.org/fpics/products/boosters/M12_4.png
http://www.cardforge.org/fpics/products/boosters/M12_5.png
http://www.cardforge.org/fpics/products/boosters/M13_1.png
http://www.cardforge.org/fpics/products/boosters/M13_2.png
http://www.cardforge.org/fpics/products/boosters/M13_3.png
http://www.cardforge.org/fpics/products/boosters/M13_4.png
http://www.cardforge.org/fpics/products/boosters/M13_5.png
http://www.cardforge.org/fpics/products/boosters/MBS_1.png
http://www.cardforge.org/fpics/products/boosters/MBS_2.png
http://www.cardforge.org/fpics/products/boosters/MBS_3.png
http://www.cardforge.org/fpics/products/boosters/MIR_1.png
http://www.cardforge.org/fpics/products/boosters/MIR_2.png
http://www.cardforge.org/fpics/products/boosters/MIR_3.png
http://www.cardforge.org/fpics/products/boosters/MIR_4.png
http://www.cardforge.org/fpics/products/boosters/MIR_5.png
http://www.cardforge.org/fpics/products/boosters/MMQ_1.png
http://www.cardforge.org/fpics/products/boosters/MMQ_2.png
http://www.cardforge.org/fpics/products/boosters/MMQ_3.png
http://www.cardforge.org/fpics/products/boosters/MOR_1.png
http://www.cardforge.org/fpics/products/boosters/MOR_2.png
http://www.cardforge.org/fpics/products/boosters/MOR_3.png
http://www.cardforge.org/fpics/products/boosters/MRD_1.png
http://www.cardforge.org/fpics/products/boosters/MRD_2.png
http://www.cardforge.org/fpics/products/boosters/MRD_3.png
http://www.cardforge.org/fpics/products/boosters/MRD_4.png
http://www.cardforge.org/fpics/products/boosters/MRD_5.png
http://www.cardforge.org/fpics/products/boosters/NMS.png http://www.cardforge.org/fpics/products/boosters/NMS.png
http://www.cardforge.org/fpics/products/boosters/NPH.png http://www.cardforge.org/fpics/products/boosters/NPH_1.png
http://www.cardforge.org/fpics/products/boosters/ODY.png http://www.cardforge.org/fpics/products/boosters/NPH_2.png
http://www.cardforge.org/fpics/products/boosters/ONS.png http://www.cardforge.org/fpics/products/boosters/NPH_3.png
http://www.cardforge.org/fpics/products/boosters/ODY_1.png
http://www.cardforge.org/fpics/products/boosters/ODY_2.png
http://www.cardforge.org/fpics/products/boosters/ODY_3.png
http://www.cardforge.org/fpics/products/boosters/ONS_1.png
http://www.cardforge.org/fpics/products/boosters/ONS_2.png
http://www.cardforge.org/fpics/products/boosters/ONS_3.png
http://www.cardforge.org/fpics/products/boosters/ONS_4.png
http://www.cardforge.org/fpics/products/boosters/ONS_5.png
http://www.cardforge.org/fpics/products/boosters/PCY.png http://www.cardforge.org/fpics/products/boosters/PCY.png
http://www.cardforge.org/fpics/products/boosters/PLC.png http://www.cardforge.org/fpics/products/boosters/PLC_1.png
http://www.cardforge.org/fpics/products/boosters/PLC_2.png
http://www.cardforge.org/fpics/products/boosters/PLC_3.png
http://www.cardforge.org/fpics/products/boosters/PLS.png http://www.cardforge.org/fpics/products/boosters/PLS.png
http://www.cardforge.org/fpics/products/boosters/PO2.png http://www.cardforge.org/fpics/products/boosters/PO2.png
http://www.cardforge.org/fpics/products/boosters/POR.png http://www.cardforge.org/fpics/products/boosters/POR_1.png
http://www.cardforge.org/fpics/products/boosters/POR_2.png
http://www.cardforge.org/fpics/products/boosters/POR_3.png
http://www.cardforge.org/fpics/products/boosters/POR_4.png
http://www.cardforge.org/fpics/products/boosters/POR_5.png
http://www.cardforge.org/fpics/products/boosters/PTK.png http://www.cardforge.org/fpics/products/boosters/PTK.png
http://www.cardforge.org/fpics/products/boosters/RAV.png http://www.cardforge.org/fpics/products/boosters/RAV_1.png
http://www.cardforge.org/fpics/products/boosters/ROE.png http://www.cardforge.org/fpics/products/boosters/RAV_2.png
http://www.cardforge.org/fpics/products/boosters/RTR.png http://www.cardforge.org/fpics/products/boosters/RAV_3.png
http://www.cardforge.org/fpics/products/boosters/RAV_4.png
http://www.cardforge.org/fpics/products/boosters/RAV_5.png
http://www.cardforge.org/fpics/products/boosters/ROE_1.png
http://www.cardforge.org/fpics/products/boosters/ROE_2.png
http://www.cardforge.org/fpics/products/boosters/ROE_3.png
http://www.cardforge.org/fpics/products/boosters/ROE_4.png
http://www.cardforge.org/fpics/products/boosters/ROE_5.png
http://www.cardforge.org/fpics/products/boosters/RTR_1.png
http://www.cardforge.org/fpics/products/boosters/RTR_2.png
http://www.cardforge.org/fpics/products/boosters/RTR_3.png
http://www.cardforge.org/fpics/products/boosters/RTR_4.png
http://www.cardforge.org/fpics/products/boosters/RTR_5.png
http://www.cardforge.org/fpics/products/boosters/S99.png http://www.cardforge.org/fpics/products/boosters/S99.png
http://www.cardforge.org/fpics/products/boosters/SCG.png http://www.cardforge.org/fpics/products/boosters/SCG_1.png
http://www.cardforge.org/fpics/products/boosters/SHM.png http://www.cardforge.org/fpics/products/boosters/SCG_2.png
http://www.cardforge.org/fpics/products/boosters/SOK.png http://www.cardforge.org/fpics/products/boosters/SCG_3.png
http://www.cardforge.org/fpics/products/boosters/SOM.png http://www.cardforge.org/fpics/products/boosters/SHM_1.png
http://www.cardforge.org/fpics/products/boosters/SHM_2.png
http://www.cardforge.org/fpics/products/boosters/SHM_3.png
http://www.cardforge.org/fpics/products/boosters/SHM_4.png
http://www.cardforge.org/fpics/products/boosters/SHM_5.png
http://www.cardforge.org/fpics/products/boosters/SOK_1.png
http://www.cardforge.org/fpics/products/boosters/SOK_2.png
http://www.cardforge.org/fpics/products/boosters/SOK_3.png
http://www.cardforge.org/fpics/products/boosters/SOM_1.png
http://www.cardforge.org/fpics/products/boosters/SOM_2.png
http://www.cardforge.org/fpics/products/boosters/SOM_3.png
http://www.cardforge.org/fpics/products/boosters/SOM_4.png
http://www.cardforge.org/fpics/products/boosters/SOM_5.png
http://www.cardforge.org/fpics/products/boosters/STH.png http://www.cardforge.org/fpics/products/boosters/STH.png
http://www.cardforge.org/fpics/products/boosters/TMP.png http://www.cardforge.org/fpics/products/boosters/TMP_1.png
http://www.cardforge.org/fpics/products/boosters/TMP_2.png
http://www.cardforge.org/fpics/products/boosters/TMP_3.png
http://www.cardforge.org/fpics/products/boosters/TOR.png http://www.cardforge.org/fpics/products/boosters/TOR.png
http://www.cardforge.org/fpics/products/boosters/TSP.png http://www.cardforge.org/fpics/products/boosters/TSP_1.png
http://www.cardforge.org/fpics/products/boosters/TSP_2.png
http://www.cardforge.org/fpics/products/boosters/TSP_3.png
http://www.cardforge.org/fpics/products/boosters/TSP_4.png
http://www.cardforge.org/fpics/products/boosters/TSP_5.png
http://www.cardforge.org/fpics/products/boosters/UDS.png http://www.cardforge.org/fpics/products/boosters/UDS.png
http://www.cardforge.org/fpics/products/boosters/ULG.png http://www.cardforge.org/fpics/products/boosters/ULG.png
http://www.cardforge.org/fpics/products/boosters/USG.png http://www.cardforge.org/fpics/products/boosters/USG_1.png
http://www.cardforge.org/fpics/products/boosters/USG_2.png
http://www.cardforge.org/fpics/products/boosters/USG_3.png
http://www.cardforge.org/fpics/products/boosters/VIS.png http://www.cardforge.org/fpics/products/boosters/VIS.png
http://www.cardforge.org/fpics/products/boosters/WTH.png http://www.cardforge.org/fpics/products/boosters/WTH.png
http://www.cardforge.org/fpics/products/boosters/WWK.png http://www.cardforge.org/fpics/products/boosters/WWK_1.png
http://www.cardforge.org/fpics/products/boosters/ZEN.png http://www.cardforge.org/fpics/products/boosters/WWK_2.png
http://www.cardforge.org/fpics/products/boosters/WWK_3.png
http://www.cardforge.org/fpics/products/boosters/ZEN_1.png
http://www.cardforge.org/fpics/products/boosters/ZEN_2.png
http://www.cardforge.org/fpics/products/boosters/ZEN_3.png
http://www.cardforge.org/fpics/products/boosters/ZEN_4.png
http://www.cardforge.org/fpics/products/boosters/ZEN_5.png

View File

@@ -18,8 +18,10 @@
package forge; package forge;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@@ -70,22 +72,30 @@ public class ImageCache {
public static final String PRECON_PREFIX = "p:"; public static final String PRECON_PREFIX = "p:";
public static final String TOURNAMENTPACK_PREFIX = "o:"; public static final String TOURNAMENTPACK_PREFIX = "o:";
static private final LoadingCache<String, BufferedImage> CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader()); private static final Set<String> _missingIconKeys = new HashSet<String>();
private static final BufferedImage emptyImage = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB); private static final LoadingCache<String, BufferedImage> _CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
private static BufferedImage defaultImage = emptyImage; private static final BufferedImage _defaultImage;
static { static {
BufferedImage defImage = null;
try { try {
ClassLoader cl = Thread.currentThread().getContextClassLoader(); ClassLoader cl = Thread.currentThread().getContextClassLoader();
InputStream isNoCardJpg = cl.getResourceAsStream("no_card.jpg"); InputStream isNoCardJpg = cl.getResourceAsStream("no_card.jpg");
defaultImage = ImageIO.read(isNoCardJpg); defImage = ImageIO.read(isNoCardJpg);
} catch (IOException e) { } catch (Exception e) {
// TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. // resource not found; perhaps we're running straight from source
e.printStackTrace(); try {
defImage = ImageIO.read(new File("src/main/resources/no_card.jpg"));
} catch (Exception ex) {
System.err.println("could not load default card image");
}
} finally {
_defaultImage = (null == defImage) ? new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB) : defImage;
} }
} }
public static void clear() { public static void clear() {
CACHE.invalidateAll(); _CACHE.invalidateAll();
_missingIconKeys.clear();
} }
/** /**
@@ -99,7 +109,7 @@ public class ImageCache {
} else { } else {
key = card.getImageKey(); key = card.getImageKey();
} }
return scaleImage(key, width, height); return scaleImage(key, width, height, true);
} }
/** /**
@@ -107,7 +117,7 @@ public class ImageCache {
* and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension. * and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension.
*/ */
public static BufferedImage getImage(InventoryItem ii, int width, int height) { public static BufferedImage getImage(InventoryItem ii, int width, int height) {
return scaleImage(getImageKey(ii, false), width, height); return scaleImage(getImageKey(ii, false), width, height, true);
} }
/** /**
@@ -115,40 +125,42 @@ public class ImageCache {
* in the cache and cannot be loaded from disk. * in the cache and cannot be loaded from disk.
*/ */
public static ImageIcon getIcon(IHasIcon ihi) { public static ImageIcon getIcon(IHasIcon ihi) {
BufferedImage i = scaleImage(ihi.getIconImageKey(), -1, -1); String imageKey = ihi.getIconImageKey();
if (null == i) { final BufferedImage i;
if (_missingIconKeys.contains(imageKey) ||
null == (i = scaleImage(ihi.getIconImageKey(), -1, -1, false))) {
_missingIconKeys.add(imageKey);
return FSkin.getIcon(FSkin.InterfaceIcons.ICO_UNKNOWN); return FSkin.getIcon(FSkin.InterfaceIcons.ICO_UNKNOWN);
} }
return new ImageIcon(i); return new ImageIcon(i);
} }
private static BufferedImage scaleImage(String key, final int width, final int height) { private static BufferedImage scaleImage(String key, final int width, final int height, boolean useDefaultImage) {
if (StringUtils.isEmpty(key) || (3 > width && -1 != width) || (3 > height && -1 != height)) { if (StringUtils.isEmpty(key) || (3 > width && -1 != width) || (3 > height && -1 != height)) {
// picture too small or key not defined; return a blank // picture too small or key not defined; return a blank
return null; return null;
} }
StringBuilder rsKey = new StringBuilder(key); String resizedKey = String.format("%s#%dx%d", key, width, height);
rsKey.append("#").append(width).append('x').append(height);
String resizedKey = rsKey.toString();
final BufferedImage cached = CACHE.getIfPresent(resizedKey); final BufferedImage cached = _CACHE.getIfPresent(resizedKey);
if (null != cached) { if (null != cached) {
//System.out.println("found cached image: " + resizedKey);
return cached; return cached;
} }
boolean mayEnlarge = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_SCALE_LARGER);
BufferedImage original = getImage(key); BufferedImage original = getImage(key);
if (null == original) { if (null == original) {
original = defaultImage; if (!useDefaultImage) {
CACHE.put(key, defaultImage); // This instructs cache to give up finding a picture if it was not found once
}
if (original == emptyImage) { // the found image is a placeholder for missing picture?
return null; return null;
} }
// henceforth use a default picture for this key if image not found
original = _defaultImage;
_CACHE.put(key, _defaultImage);
}
boolean mayEnlarge = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_SCALE_LARGER);
double scale = Math.min( double scale = Math.min(
-1 == width ? 1 : (double)width / original.getWidth(), -1 == width ? 1 : (double)width / original.getWidth(),
-1 == height? 1 : (double)height / original.getHeight()); -1 == height? 1 : (double)height / original.getHeight());
@@ -162,12 +174,22 @@ public class ImageCache {
} else { } else {
int destWidth = (int)(original.getWidth() * scale); int destWidth = (int)(original.getWidth() * scale);
int destHeight = (int)(original.getHeight() * scale); int destHeight = (int)(original.getHeight() * scale);
ResampleOp resampler = new ResampleOp(destWidth, destHeight);
// if this scale has been used before, get the cached version instead of rescaling
String effectiveResizedKey = String.format("%s#%dx%d", key, destWidth, destHeight);
result = _CACHE.getIfPresent(effectiveResizedKey);
if (null == result) {
ResampleOp resampler = new ResampleOp(destWidth, destHeight);
result = resampler.filter(original, null); result = resampler.filter(original, null);
CACHE.put(resizedKey, result); //System.out.println("caching resized image: " + effectiveResizedKey);
_CACHE.put(effectiveResizedKey, result);
//} else {
// System.out.println("retrieved resized image: " + effectiveResizedKey);
}
} }
//System.out.println("caching image: " + resizedKey);
_CACHE.put(resizedKey, result);
return result; return result;
} }
@@ -176,7 +198,7 @@ public class ImageCache {
*/ */
private static BufferedImage getImage(final String key) { private static BufferedImage getImage(final String key) {
try { try {
return ImageCache.CACHE.get(key); return ImageCache._CACHE.get(key);
} catch (final ExecutionException ex) { } catch (final ExecutionException ex) {
if (ex.getCause() instanceof NullPointerException) { if (ex.getCause() instanceof NullPointerException) {
return null; return null;
@@ -196,8 +218,11 @@ public class ImageCache {
return getImageKey((CardPrinted)ii, altState, true); return getImageKey((CardPrinted)ii, altState, true);
if ( ii instanceof TournamentPack ) if ( ii instanceof TournamentPack )
return ImageCache.TOURNAMENTPACK_PREFIX + ((TournamentPack)ii).getEdition(); return ImageCache.TOURNAMENTPACK_PREFIX + ((TournamentPack)ii).getEdition();
if ( ii instanceof BoosterPack ) if ( ii instanceof BoosterPack ) {
return ImageCache.BOOSTER_PREFIX + ((BoosterPack)ii).getEdition(); BoosterPack bp = (BoosterPack)ii;
String suffix = (1 >= bp.getBoosterData().getArtIndices()) ? "" : ("_" + bp.getArtIndex());
return ImageCache.BOOSTER_PREFIX + bp.getEdition() + suffix;
}
if ( ii instanceof FatPack ) if ( ii instanceof FatPack )
return ImageCache.FATPACK_PREFIX + ((FatPack)ii).getEdition(); return ImageCache.FATPACK_PREFIX + ((FatPack)ii).getEdition();
if ( ii instanceof PreconDeck ) if ( ii instanceof PreconDeck )

View File

@@ -16,16 +16,15 @@ public class BoosterData extends PackData {
private final int foilRate; private final int foilRate;
private static final int CARDS_PER_BOOSTER = 15; private static final int CARDS_PER_BOOSTER = 15;
public BoosterData(final String edition, final String editionLand, final int nC, final int nU, final int nR, final int nS, final int nDF) { public BoosterData(String edition, String editionLand, int nC, int nU, int nR, int nS, int nDF, int artIndices) {
// if this booster has more that 10 cards, there must be a land in // if this booster has more that 10 cards, there must be a land in
// 15th slot unless it's already taken // 15th slot unless it's already taken
this(edition, editionLand, nC, nU, nR, nS, nDF, (nC + nR + nU + nS + nDF) > 10 ? BoosterData.CARDS_PER_BOOSTER - nC - nR - nU this(edition, editionLand, nC, nU, nR, nS, nDF, artIndices,
- nS - nDF : 0, 68); (nC + nR + nU + nS + nDF) > 10 ? BoosterData.CARDS_PER_BOOSTER - nC - nR - nU - nS - nDF : 0, 68);
} }
public BoosterData(final String edition0, final String editionLand, final int nC, final int nU, final int nR, final int nS, final int nDF, final int nL, public BoosterData(String edition, String editionLand, int nC, int nU, int nR, int nS, int nDF, int artIndices, int nL, int oneFoilPer) {
final int oneFoilPer) { super(edition, editionLand, nL > 0 ? nL : 0, artIndices);
super(edition0, editionLand, nL > 0 ? nL : 0);
this.nCommon = nC; this.nCommon = nC;
this.nUncommon = nU; this.nUncommon = nU;
this.nRare = nR; this.nRare = nR;
@@ -41,6 +40,7 @@ public class BoosterData extends PackData {
public final Predicate<CardPrinted> getEditionFilter() { public final Predicate<CardPrinted> getEditionFilter() {
return IPaperCard.Predicates.printedInSets(getEdition()); return IPaperCard.Predicates.printedInSets(getEdition());
} }
public final Predicate<CardPrinted> getLandEditionFilter() { public final Predicate<CardPrinted> getLandEditionFilter() {
return IPaperCard.Predicates.printedInSets(getLandEdition()); return IPaperCard.Predicates.printedInSets(getLandEdition());
} }
@@ -141,6 +141,7 @@ public class BoosterData extends PackData {
int nR = section.getInt("Rares", 0); int nR = section.getInt("Rares", 0);
int nS = section.getInt("Special", 0); int nS = section.getInt("Special", 0);
int nDf = section.getInt("DoubleFaced", 0); int nDf = section.getInt("DoubleFaced", 0);
int artIndices = section.getInt("Images", 1);
int nLand = section.getInt("BasicLands", 0); int nLand = section.getInt("BasicLands", 0);
int nFoilRate = section.getInt("FoilRate", 68); int nFoilRate = section.getInt("FoilRate", 68);
String edition = section.get("Set"); String edition = section.get("Set");
@@ -149,7 +150,7 @@ public class BoosterData extends PackData {
editionLand = edition; editionLand = edition;
} }
return new BoosterData(edition, editionLand, nC, nU, nR, nS, nDf, nLand, nFoilRate); return new BoosterData(edition, editionLand, nC, nU, nR, nS, nDf, artIndices, nLand, nFoilRate);
} }
} }
} }

View File

@@ -15,7 +15,7 @@ public class FatPackData extends PackData {
public FatPackData(String edition0, String landEdition0, int nBoosters, int nBasicLands) public FatPackData(String edition0, String landEdition0, int nBoosters, int nBasicLands)
{ {
super(edition0, landEdition0, nBasicLands); super(edition0, landEdition0, nBasicLands, 1);
cntBoosters = nBoosters; cntBoosters = nBoosters;
} }

View File

@@ -18,29 +18,39 @@
package forge.card; package forge.card;
import org.apache.commons.lang.NullArgumentException;
import com.google.common.base.Function; import com.google.common.base.Function;
public class PackData { public class PackData {
private final String edition; private final String edition;
private final String landEdition;
private final int cntLands;
private final int artIndices;
public final String getEdition() { public final String getEdition() {
return edition; return edition;
} }
private final String landEdition;
public final String getLandEdition() { public final String getLandEdition() {
return landEdition == null ? edition : landEdition; return landEdition == null ? edition : landEdition;
} }
private final int cntLands;
public int getCntLands() { public int getCntLands() {
return cntLands; return cntLands;
} }
public PackData(String edition0, String landEdition0, int nBasicLands) public int getArtIndices() {
return artIndices;
}
public PackData(String edition0, String landEdition0, int nBasicLands, int artIndices0)
{ {
if (null == edition0) { throw new NullArgumentException("edition0"); }
edition = edition0; edition = edition0;
landEdition = landEdition0; landEdition = landEdition0;
cntLands = nBasicLands; cntLands = nBasicLands;
artIndices = artIndices0;
} }
public static final Function<? super PackData, String> FN_GET_CODE = new Function<PackData, String>() { public static final Function<? super PackData, String> FN_GET_CODE = new Function<PackData, String>() {
@@ -49,4 +59,24 @@ public class PackData {
return arg1.edition; return arg1.edition;
} }
}; };
@Override
public final boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return false;
}
PackData other = (PackData)obj;
return edition.equals(other.edition);
}
@Override
public final int hashCode() {
return edition.hashCode();
}
} }

View File

@@ -46,4 +46,8 @@ public class BoosterPack extends OpenablePack {
public final Object clone() { public final Object clone() {
return new BoosterPack(name, contents); return new BoosterPack(name, contents);
} }
public BoosterData getBoosterData() {
return contents;
}
} }

View File

@@ -28,8 +28,6 @@ import forge.card.CardEdition;
import forge.card.FatPackData; import forge.card.FatPackData;
public class FatPack extends OpenablePack { public class FatPack extends OpenablePack {
/** The Constant fnFromSet. */
public static final Function<CardEdition, FatPack> FN_FROM_SET = new Function<CardEdition, FatPack>() { public static final Function<CardEdition, FatPack> FN_FROM_SET = new Function<CardEdition, FatPack>() {
@Override @Override
public FatPack apply(final CardEdition arg1) { public FatPack apply(final CardEdition arg1) {

View File

@@ -20,6 +20,8 @@ package forge.item;
import java.util.List; import java.util.List;
import org.apache.commons.lang.NullArgumentException;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@@ -28,23 +30,28 @@ import forge.card.BoosterData;
import forge.card.BoosterGenerator; import forge.card.BoosterGenerator;
import forge.card.CardRulesPredicates; import forge.card.CardRulesPredicates;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.MyRandom;
public abstract class OpenablePack implements InventoryItemFromSet { public abstract class OpenablePack implements InventoryItemFromSet {
protected final BoosterData contents; protected final BoosterData contents;
protected final String name; protected final String name;
private final int artIndex;
private final int hash;
private List<CardPrinted> cards = null; private List<CardPrinted> cards = null;
private BoosterGenerator generator = null; private BoosterGenerator generator = null;
public OpenablePack(final String name0, final BoosterData boosterData) { public OpenablePack(String name0, BoosterData boosterData) {
this.contents = boosterData; if (null == name0) { throw new NullArgumentException("name0"); }
this.name = name0; if (null == boosterData) { throw new NullArgumentException("boosterData"); }
contents = boosterData;
name = name0;
artIndex = MyRandom.getRandom().nextInt(boosterData.getArtIndices()) + 1;
hash = name.hashCode() ^ getClass().hashCode() ^ contents.hashCode() ^ artIndex;
} }
@Override @Override
public final String getName() { public final String getName() {
return this.name + " " + this.getItemType(); return name + " " + getItemType();
} }
public String getDescription() { public String getDescription() {
@@ -53,23 +60,27 @@ public abstract class OpenablePack implements InventoryItemFromSet {
@Override @Override
public final String getEdition() { public final String getEdition() {
return this.contents.getEdition(); return contents.getEdition();
}
public final int getArtIndex() {
return artIndex;
} }
public final List<CardPrinted> getCards() { public final List<CardPrinted> getCards() {
if (null == this.cards) { if (null == cards) {
this.cards = this.generate(); cards = generate();
} }
return this.cards; return cards;
} }
public int getTotalCards() { public int getTotalCards() {
return this.contents.getTotal(); return contents.getTotal();
} }
@Override @Override
public final boolean equals(final Object obj) { public final boolean equals(Object obj) {
if (this == obj) { if (this == obj) {
return true; return true;
} }
@@ -79,34 +90,25 @@ public abstract class OpenablePack implements InventoryItemFromSet {
if (this.getClass() != obj.getClass()) { if (this.getClass() != obj.getClass()) {
return false; return false;
} }
final OpenablePack other = (OpenablePack) obj; OpenablePack other = (OpenablePack)obj;
if (this.contents == null) { return name.equals(other.name) && contents.equals(other.contents) && artIndex == other.artIndex;
if (other.contents != null) {
return false;
}
} else if (!this.contents.equals(other.contents)) {
return false;
}
return true;
} }
@Override @Override
public final int hashCode() { public final int hashCode() {
final int prime = 31; System.out.println(String.format("returning hash: %d for edition=%s; idx=%d", hash, getEdition(), getArtIndex()));
int result = 1; return hash;
result = (prime * result) + ((this.contents == null) ? 0 : this.contents.hashCode());
return result;
} }
protected List<CardPrinted> generate() { protected List<CardPrinted> generate() {
if (null == this.generator) { if (null == generator) {
this.generator = new BoosterGenerator(this.contents.getEditionFilter()); generator = new BoosterGenerator(contents.getEditionFilter());
} }
final List<CardPrinted> myCards = this.generator.getBoosterPack(this.contents); final List<CardPrinted> myCards = generator.getBoosterPack(contents);
final int cntLands = this.contents.getCntLands(); final int cntLands = contents.getCntLands();
if (cntLands > 0) { if (cntLands > 0) {
myCards.add(this.getRandomBasicLand(this.contents.getLandEdition())); myCards.add(getRandomBasicLand(contents.getLandEdition()));
} }
return myCards; return myCards;
} }