From d58222b028b642cc7841fc91689c508961bee7c4 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Thu, 14 Feb 2013 13:26:13 -0500 Subject: [PATCH] v5.3.0 Release (hopefully) *Removed unneeded textures. *Added new, better textures! *Revamped upgrade system. *Machines and generators now only stack to 1. *Machines and generators now drop with their upgrades and charge stored in NBT. *Fixed NEI plugin. *Removed divider system for portable energy storage. *Fixed some sound bugs. *Fixed crazy entity item for energy cube and advanced solar generator. *Made energy cube only drop in survival. *Rewrote infusion system. *Added liquid dictionary support. *Added biofuel to ore dictionary. *Bugfixes. Wooo! --- .../mekanism/animate/CombinerFront.png | Bin 2683 -> 6149 bytes .../mekanism/animate/CrusherFront.png | Bin 3151 -> 2806 bytes .../mekanism/animate/ElementizerFront.png | Bin 3437 -> 0 bytes .../mekanism/animate/ElementizerSide.png | Bin 3264 -> 0 bytes .../{ElementizerBack.png => InfuserBack.png} | Bin .../mekanism/animate/InfuserFront.png | Bin 6078 -> 3437 bytes .../mekanism/animate/InfuserSide.png | Bin 6308 -> 3264 bytes .../animate/PurificationChamberFront.png | Bin 5375 -> 6529 bytes .../resources/mekanism/gui/GuiChamber.png | Bin 4940 -> 5145 bytes .../resources/mekanism/gui/GuiCombiner.png | Bin 5620 -> 5834 bytes .../resources/mekanism/gui/GuiCompressor.png | Bin 5378 -> 5594 bytes .../resources/mekanism/gui/GuiCrusher.png | Bin 5125 -> 5341 bytes .../resources/mekanism/gui/GuiElementizer.png | Bin 5635 -> 5893 bytes .../mekanism/gui/GuiMetallurgicInfuser.png | Bin 4777 -> 5000 bytes .../mekanism/gui/GuiPurificationChamber.png | Bin 5367 -> 5583 bytes .../smelting/GuiAdvancedSmeltingFactory.png | Bin 4592 -> 4826 bytes .../gui/smelting/GuiBasicSmeltingFactory.png | Bin 4554 -> 4744 bytes .../gui/smelting/GuiEliteSmeltingFactory.png | Bin 4593 -> 4806 bytes .../resources/mekanism/render/Knife.png | Bin 264 -> 0 bytes .../resources/mekanism/textures/terrain.png | Bin 35694 -> 58703 bytes .../mekanism/api/IMachineUpgrade.java | 25 -- .../mekanism/api/IUpgradeManagement.java | 12 + src/minecraft/mekanism/api/InfuseObject.java | 13 + src/minecraft/mekanism/api/Tier.java | 10 +- .../mekanism/client/ClientProxy.java | 46 ++- .../mekanism/client/ClientTickHandler.java | 16 +- .../client/GuiAdvancedElectricMachine.java | 10 +- .../mekanism/client/GuiElectricMachine.java | 8 +- .../client/GuiMetallurgicInfuser.java | 12 +- .../mekanism/client/GuiSmeltingFactory.java | 12 +- .../client/GuiTheoreticalElementizer.java | 3 +- src/minecraft/mekanism/client/Sound.java | 12 +- .../mekanism/client/SoundHandler.java | 2 +- .../mekanism/common/BlockEnergyCube.java | 87 ++--- .../mekanism/common/BlockMachine.java | 120 +++++-- .../mekanism/common/CommandMekanism.java | 8 +- .../mekanism/common/CommonProxy.java | 1 + .../ContainerAdvancedElectricMachine.java | 2 +- .../common/ContainerElectricMachine.java | 2 +- .../common/ContainerMetallurgicInfuser.java | 38 ++- .../common/ContainerSmeltingFactory.java | 2 +- .../common/ItemAtomicDisassembler.java | 79 ++++- .../mekanism/common/ItemBlockEnergyCube.java | 5 +- .../mekanism/common/ItemBlockMachine.java | 297 +++++++++++++++++- .../mekanism/common/ItemConfigurator.java | 2 +- .../mekanism/common/ItemElectricBow.java | 2 +- .../mekanism/common/ItemEnergized.java | 10 +- .../mekanism/common/ItemMachineUpgrade.java | 37 +-- .../common/ItemPortableTeleporter.java | 4 +- src/minecraft/mekanism/common/Mekanism.java | 61 ++-- .../mekanism/common/MekanismHooks.java | 24 +- .../mekanism/common/MekanismUtils.java | 34 +- .../mekanism/common/RecipeHandler.java | 32 +- .../mekanism/common/ServerCommandHandler.java | 25 -- .../TileEntityAdvancedElectricMachine.java | 107 ++++--- .../common/TileEntityBasicMachine.java | 114 ++++--- .../common/TileEntityElectricBlock.java | 2 +- .../common/TileEntityElectricMachine.java | 93 +++--- .../mekanism/common/TileEntityEnergyCube.java | 41 ++- .../common/TileEntityMetallurgicInfuser.java | 248 +++++++++------ .../common/TileEntityPurificationChamber.java | 6 +- .../common/TileEntitySmeltingFactory.java | 211 ++++++++----- .../mekanism/common/TileEntityTeleporter.java | 16 +- src/minecraft/mekanism/common/Version.java | 72 +++++ .../generators/common/BlockGenerator.java | 68 +++- .../common/ContainerHeatGenerator.java | 3 +- .../generators/common/ItemBlockGenerator.java | 269 +++++++++++++--- .../generators/common/MekanismGenerators.java | 5 +- .../common/TileEntityBioGenerator.java | 83 +++-- .../TileEntityElectrolyticSeparator.java | 39 ++- .../common/TileEntityGenerator.java | 40 ++- .../common/TileEntityHeatGenerator.java | 133 +++++--- .../common/TileEntityHydrogenGenerator.java | 10 +- .../common/TileEntitySolarGenerator.java | 10 +- .../nei/AdvancedMachineRecipeHandler.java | 6 +- .../mekanism/nei/MachineRecipeHandler.java | 4 +- .../nei/MetallurgicInfuserRecipeHandler.java | 8 +- .../mekanism/tools/common/MekanismTools.java | 2 +- 78 files changed, 1854 insertions(+), 789 deletions(-) delete mode 100644 bin/minecraft/resources/mekanism/animate/ElementizerFront.png delete mode 100644 bin/minecraft/resources/mekanism/animate/ElementizerSide.png rename bin/minecraft/resources/mekanism/animate/{ElementizerBack.png => InfuserBack.png} (100%) delete mode 100755 bin/minecraft/resources/mekanism/render/Knife.png delete mode 100644 src/minecraft/mekanism/api/IMachineUpgrade.java create mode 100644 src/minecraft/mekanism/api/IUpgradeManagement.java create mode 100644 src/minecraft/mekanism/api/InfuseObject.java delete mode 100644 src/minecraft/mekanism/common/ServerCommandHandler.java diff --git a/bin/minecraft/resources/mekanism/animate/CombinerFront.png b/bin/minecraft/resources/mekanism/animate/CombinerFront.png index bd0d6e9fb2125103aa55b7a1d2252a7c4aea64a3..d13e9bcc2596b89b0dd0b87e4e25771547d4ca36 100644 GIT binary patch literal 6149 zcmZu#2{@E(+a3lp5@QQV23eCW*)=nkV#vsnm@HEgBD)GR!=Ob%wiKfwq~6HB@0C4U zY9!lON7=@{^FO`s_x{I!{Kt39HOKQD_uTU=*L_~+d0uzaWsDK$5#b{s5Qr0PY-kA_ z#Xult5R?r#n?!rf0SC4lrbdRK!#|&ly4*xygx$y3&L0Hg;QRAs0;Q6LfI&zA+Ux>k zgo&T`EGzRsT000Nn1D9av%ddxVZ`aFNGpN1?7jbMal2$VJ?GLwN0OYJOth9Htje&D zRa5d&$g&nhpQ&4k_hpF6g}E!-W(Hc4j~?Vf#09|M6cEN(xTU$nvWm=uW?A8Hg⁣ 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 diff --git a/bin/minecraft/resources/mekanism/animate/CrusherFront.png b/bin/minecraft/resources/mekanism/animate/CrusherFront.png index b717496407a802061ee5b5b157cf1d32c85aee5e..c00dee83c3d0c0f06e8667321abdba76d878dc2a 100644 GIT binary patch literal 2806 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 W_|o2A)yMy#0w%^5Mx_SMVSfWJ&O+$` literal 3151 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 Hzd!y1HOUcd diff --git a/bin/minecraft/resources/mekanism/animate/ElementizerFront.png b/bin/minecraft/resources/mekanism/animate/ElementizerFront.png deleted file mode 100644 index 6fd64bb9d091acf976a7c9155ae8d7b941c182de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3437 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 H*@pZJ@iK}N diff --git a/bin/minecraft/resources/mekanism/animate/ElementizerSide.png b/bin/minecraft/resources/mekanism/animate/ElementizerSide.png deleted file mode 100644 index cb34e6be0589952eb7b796c9ac780f8d5eb94dbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3264 zcmZve2{hE}8^?d+S0-Ci*Osjr7iqatDO+ZYB}{~fh)_x+5-A45;ASZ`DBOuL+*@6= zA=$SnTMK6FWX%|3AB<(jGXB#!|NH-+bL)K0d!F}w&Uw#!&iDH~&w20JTANFV%8LR3 zAc3(kwG%`H00;p)gatbW#%~$`zKJx4)vXk5{5!_`k`wue{h;mYh$}V+EtwZ70x8=hGP^ zjGV{N;>8nL$%$E{w3Cj?A~YlQC3Mc;Vb&F{hlLI|#+Y~4xhuaP(t&=R-U__qn3n^p zQjC4iBg6MDct@t>oqPjB44Luf4-6X(EEtR`9o`r3bP1Qn_^nP$5f0O}pW1&pE#X;D z@xf8G`c18)JYR8+Vsx>JjmDIGMRVxcpxN|G?M@Xowp+9lH?=P;gf2`jj_*qxtxW84 z3vTM%MR?;=j;YsFsTt?W?ITDpR5!Y+J;Z6E7oVhuJ^R4>q$4wJ&qfU0E4$8($+NA& zwxsMUyKyU|74;&P>{Fq0ANjlN?%@|5#>p%dbgEb2EBE-Y>4$~%+9PusR^t~UWTv00 z&6)cTcQk&958FkU_&T+X=Ir#hmm8BGbBO4^GjLb8M$x%3)IHPc>_+rlPflZ*hTaH6 z`IgJEi&{h}WBwyg;iCBRWR9Q7>$_xy^o%cohGVGWgMZRG-@Hh>TCHS?-$PV8p6yX5 zKBwtNyO=atlEfHF&pll_8ltGkNF)BU%=ke~;pYL{E|dnCP`)F+_N&d`t_RZZ0;;M;9*~dCfh!xhj~2WMXqbX()$Q!tuuPI zA#W{_Q-|qOhypgE_Ahwu`&ErXPN*tpSXg&ScF0-h*S_1}hz~4#z1X5VE_k#k3*xGq ztuqia-)f^80hzzPzPdoTC|8x?cOnBeUo*ws=D}ciak7|Rfeg!~T4DcB8?w$o0Is-b zxl=F#gfCl~n*v+k$*#_MEXauXTQ~;-fSBa>1p(5@djv`7ZOoZd&;hZXQo9u|(@oU? zV8>aEsnI#y*V#-Ptn_)Q##(HVtt#IrVbbS$e95+Z5)*b4e<#%hxg5!uJAEM8uHs;{ zSa3t6MO)fTrMFSVZ3ofG3r78?a-Gf9+S20*GLLEw4))Zm9hN?2i zCszl9X*XMWbM!p>9DUp;$MfeQ0F8nK0YwAck>H5cxxtC6iEu+<;MMEb%vP5$ugaiV zA;7oJr$nc@h{K|RK+xQP2v8QxcANVkscsDbegkF6({h!qC;f^q0Fez14Fl7x)=aT> zFvtdu4BZCkhAv?zV<@ZvtsvjM{Wc{^Cxf<4Le?7$w2Hz?3km>WkDT16Ov2idcOEOK z`k`7SB|nV65mI0iHE6#wV4xQ`Zbggb21YPHrw$Y@7cAfH^I=CRXNbI3@1+=o2m#y$ zT6ufVdAPxTquTn}4uBHO$l-r7KicPNR)xy;@PX-z9$AI4WqdIFIuaW&%I z;P}z*2)3R+LHC96=JY*FR8nAi&eUb2^S|{3D(oSUkR}V>)_$l??)OZe>Hr z!nY}$<0tniZ1Nw+w%pay(kf?%Xt^k#v8K45uUol+WtXNVhxeEC&wBV6yHziqZZvpX ztdhTpQ@TXqTxcgUUW>H&ij%HYiIx;A=W{}4oNVSVw0%vGlna@T*b9#9C0-|r&FH&W zF3Qt~w&uUpA+)~L*PF7K*lx4(C*eMQ11(MX%)x#plR1Db<;WnLoMF9$@s=(HCb+&b zdkA^6MBwHE94~K(muc}!gOON`BJIN>AEBfx zbSLaq_ru);o_}s9C$C)U@|<2;BC%-i4JHv>gv4E$7r#ca9;|r$7sHy3?fd$rx5J6f zj$SD2yL~;43sl!}I=^jWu*1ij@3u9fPryl1@LfMJ5saeJc=o16S9zdJm^>WE>WDRO z+6yn}E!?H#iNg9$m^Bg43{Iic*m%BUDWlzf={K*tl1lc8!ee0Lt^GvJG1#;HxQScU z6TO}`5FT}XIK?e#0WvP+(9{SOoo&@lgY74v@&6{9&5J~`a-96WaG-Wldy@o`eJmt1 z$^#->dnC*E_uXm{o7Gk)L{5wQ7pAdf6s&WIfgI@QV$}T&h>D6C`WWpc7YK~Q;d z-}m|OWRLATHw11vxo2!CpJ~7;-U8*P@V8DTN!*j<#*Yf1Qn34F% zK=ZO1#HnigK+8#1i=E%d_-;B0D|naI>p2OF{|U#lU{zC_V!4CVHE`vXEC>12a~w=v zm!;S2Xz8z|Hg~~4&Y&r<72}86%w|YS@?C@8`KBqGk6;T~*H7-#~MWtaZ%-`AZT^cU_!|&-MzBdKxY#IMH}M z9EeSpEe{<12`xFPt|lmm{bIrNARu+*Nd2nI*ZYCkrXu@;@h9&@>n_fbj2 z#nbL2A^WiG$OdHA{YPoOXXxY&2ywR(X9+s6DMltQ3s1nVEN_<$dzAcnQ%td;Nl=a^ zOdj~;gYja4g&FxE-cRRYq3{$8=b9~WFXv*H?9ZxMJev;`hm8$do_*?RPRPCwJI8jX ze=b&VB1DE=&ZOAT9`gZCRHurdv_~3tN(3c-L2B+<^(~W^tgZ3Tra|}5v5<#^qkcMI z&}*Q=7+9L0))))n0fww$3L&)S5(=HZ>=iXFrk~(qV)hoc=Hv~7!QvD^qMfl())D9D ztfAifX(o0ALS0eMX+6Nl#%dVZebsb0)3?!zwET~)RO({X7KAPiRlzQ9BMSZ-0Opjn K=^JB@=>GuY3O3*X diff --git a/bin/minecraft/resources/mekanism/animate/ElementizerBack.png b/bin/minecraft/resources/mekanism/animate/InfuserBack.png similarity index 100% rename from bin/minecraft/resources/mekanism/animate/ElementizerBack.png rename to bin/minecraft/resources/mekanism/animate/InfuserBack.png diff --git a/bin/minecraft/resources/mekanism/animate/InfuserFront.png b/bin/minecraft/resources/mekanism/animate/InfuserFront.png index 890aa060da1570f2c90f78272938fbfc2b79777c..6fd64bb9d091acf976a7c9155ae8d7b941c182de 100644 GIT binary patch literal 3437 zcmZve2T&7Q7KRf8M2Q#>5Gk5S5g!OhuOXD6!5RgmBZ5*yx=ITnpkRD7X-W?uDjn%n ziXcTwLT^e7MTkHOLZ~ipcHYiDcjucsr_9{>=iGDV-unV`{Sp_a5GMct;4(y`ZXH-S z0B{I!nB%~s7`jmb01(YtUms(ruMfv~xjQ&Nybl1Vbw!$dbDuEgL%wjg%07Y2D2Y18 zA6{%?WLYCDRM^I0825HbPpGD6R4Tjkv73<5h)U&vs|j)Ako!><2ww_5{nA%Y=xFOk z=?bvi&`6hmNIV>z<g3umKe>!OEjeA)-OgNj^g z3|r;I8WvcBXM_0ZAKR=XB7Nm_7)i+i*`KyLRZmcj*5H#bsvodIb1@B0J@IF&UA_Ez zwe!MKU20YTL_8JXnaUf`i&+%YNpSEkxI+k_MwXBpFRaR3U9iBNpuUkeG}nUX}{hicx%e z`?2;MWrUg-rkj4@vsB^alrC@NoOXp&CTXxJ@74W}r%>3FQ4&fSwk=0jHOxK$6>?ra zKiY80jJaarc-O@$h~gFOPvrk#LgTx3P7mwh~#Ia_VV!P5Q+({p8}H_01D5 zJ29!w(nMcyQ_HdPL=b(uSa$D&G^0dMwmzVYx_tbqR&HbNMDEW)&eiG!%g6Hd#1li7G3z$#ChI!Oh9!7!Cf388WmqkW6|;&+8=@@QGk-kww;WQqR%c^$ z;cY~@rN7~q%W~*q^yd!ZpbVFxegEmfACp>DzV*H`9H~tohlVyv)QUqaK-by%eRZG9 zsFk_y>$~({2}9qV7(7;H?k3-wn#ex@4-fdvm2kIXCK@^Y*`tT*G#6|bpd{7SDNmSxGy z@DFS7#w=J)^QKG*(_fr9#i6z?FlnwTI`#-O?E=l%sXz}u_n9pt06v93Gv!0_Ffu--@!Ig9ldthuxJ+ zD8R43$oTj^?jUo-18wdN06=*ET0lT@>dAv7_>ti?1MpYKF+QFnP_B$#0O0VxAxhWS zcYGyH*U8wFFO1|=hC#hiGT63Q60KxA!p3GAVtr1j!tJsEaH;e-sKPe)E!^PGw@Q!{ z(Hw~BW24MRCdnbUl3jIkRz%C67+ua27djqu51u{nxt=+TSW8oPZ;MIaSwNqKQFfuPd&>mlib<6>``m}pj^Wz}(>zK;Q$A&||rsT(Mix3_n*XG4_B<%S!v;w%v& zGGL=1PG~w{n>M2_Dmq^0<31Bw<@QZ#J>DgZ)Ri2o+*WzN>x86oliX;Trq3#y>r8i& zVkoR&gen8EF*iRWnzgjF^hwCV($aevGKWCmcGY-zu3ZnBD#g!(p%&?|Q>P?Ev+_-g zIh30h-V0b&dt?rRZLZkBMYE`llWtU4XXW6?$YO!O?#9mR<`*-jlhi*K&9}-ZOV?nc zqFK!d$q1LUW2CxcBWNstJ>~vX{JU`}^iQkt z##F zul;gTcs%uyF?n<)*jQef)1<6mra{}sRj1Xryz7Xsta)#iWN8?M0)pX8J3!eMZuNWE zoY(R?!#h|0Mbn@(Kh|#zJq)B_BWgWk_>`1w01Pqf! zH9r#B(+y6Ax3h2S8z{+Zax;LsXpuH3VQa5+bKJP|leZh>*cP6=CI}-t^c1pycVm&L z4sdoSE7*n85C{YO4}|B?!+S-ap$`kB-4O3nDWGoHt#C;kehbjI_le$+Y8|bH%)I|4 z)zd~9%GS^mc=!FX~KAM)#k+}HC4NS{IoqJ=0IUmy>y^@crO+{zWeNf9QT^{ zrU(}B8}Jj_7)qK|^;xgHjkMxVeeN1^IS0FnPu{p)6al5Fr7vzB{rsj^05w|%H2 zsJX4W(F}S|esQlbVW4dpS4D+QpbW|0ZY*f7TOa|P%2b`COj9Y|w`qY50Q!0V&I|7e7*t;iVE$xq=f|0YR zW8Tup%no-<@GfY4KWrNGPZB7gB#q&VEp6v&z+3p77l)b9b6ZDDKHGZ)i@?wcebeEW zK051X+FW4(#!qE0b@CBJNY?KcK#qY*HVcEV*Q z@M-+qumGV_j1nvLp+RTxs#_p%7Tok3{^?M3I39YE3eotf)ehTTfMJFOBK8w;?Qb_a zI^Jf6((u#JAe?d5{4jF*U707jnko6sY%IytCi4$e*voBb|{>WvwV8+IRY3OTt^k@ H*@pZJ@iK}N literal 6078 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 L4TYln7SI0&i!Q-Y diff --git a/bin/minecraft/resources/mekanism/animate/InfuserSide.png b/bin/minecraft/resources/mekanism/animate/InfuserSide.png index ea829a4d567c99acbde525942646fcf7ea6f2235..cb34e6be0589952eb7b796c9ac780f8d5eb94dbc 100644 GIT binary patch literal 3264 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 K=^JB@=>GuY3O3*X literal 6308 zcmaJ`cTiLL+CCu=ieNx`??`c_3Q~ij22h%Gr59-{g7hAWAVp9iiip6{rDH<~C3Fl` zK$?Ui(jg#SA>kgxz3bkY@B1s6WKQP1&+lpPNvysul8%Oh1^@s$EzL{U!B;*2AOomi z;JXwms zH>){0O50#s$$6{VEP0C~;zD1Q6k=a;Qhr{1SELsdt^hlLsE<=o6W9NG@G5k$cv1I{N1ffL&Nedd_AF0x$5C~zJ|d8GcLW;(qz~a|pZjdBSVo%dr{`7MzlX<8NbDHZ z$0CN`ZgH(&t*|by*0K$w*h~7+A57-YYq0h5aftWCJkr{_lxYGsK@s%Pqu_+jzN?RP z5EonJ$8F)|)DFS(!#+-@Ugxr+)=c)^jMy(cD(o`*@usx4kfOU^NkKN7W#g);n|s;I3u9$z<_0H-GS8H)k~+k0W6(`0 zyqza&eE(waWYKQ>xF`} zgFNN-a*u`&m1YRTQOE(W-Rl)8PAA6P3Wbs9D^yn-l^Rb{(A>SP#4J7#BD%dT&t>UW0mY`mrwA{^AMm|bLXCH-rwE{Oc#L7t(91OG9 zvs&-w=6&F~`2Zh(yIsD*z3pAo-bi`n9|yOulPTK-#y$B9x9;0S?Jvl!Y5^G#rdz%< zW!^V-eXKGkZ|Qq@pP)!1qC>5#zk0f_h?Grw>0W4E$T~Qw>>9$4LKbm zNxT;4ZC)cl6tYCuKRQdHh*_)46dnmGx3*=($5}dma?3n-+E5o4^p$ls<)HT9l?rDC zQ?)fua>3WS^%d%!ZdxLD9h*1JYge7OL4SNBXOn{q!(PCK+l*SHioIFPKW8TAUzhJ_ z8`%;p@U=*veG=!dlo5AYGj=UruciHqELl}X?Vi=1NJTz$o0QBbrKB`<`^+`r4%sg+ zlsru?Z_#)^@9VYp4BptpKPX#kI3&sS z??2pIZ-(og5DAw(k05Rh;Qb~;{QRT=8{UvDgQj4aF@?!suf|Y&z{EO?xShK`poidg zj*X#3koIQq^O<2ivyRse;uP5cYJ3X^pd0jkL-<|(^5|>7P-Gy7l3jsw39aIs|Qy@MF{|lReMs zB+S27G@p8|Q?fxQfbBca-j{gEvs=t(q)x(64<9GAaj6s!gV&=X4(AB7_%N%?Z{FV$ zt9P5>2#-M5^ivEe8$~HzVLk^$=vSc)HNqw9oT}?IIz|V*D=iq)ax1(JPgd*_b$?Hy z{`b`&XlK|sUiA=qi-=xNVcAsQr9=8i z;68kwz6=%hzZHe#@uK7BJNlF-fdl5>QjeRg@byoI@OV97We6CtI;b?EvFcFbkv?C) z`>mb#@ZjM4=HXSBoz<#IH6ei^*EcJ-A3UWu>h+N!EAP8$wYFS^eTxk?%xJ9kpE9|U z-Z)BxM7!Xir165?NZuPmF1P?);cN!Rb#a;9`$DANO{}DhU-By(w$mt3jn=MLt-L zx4sgF3V|eUMJ1Bvid`==NNjiBOVfZ+KJhsd2)xc3}RxwLvenI zXRg^0xX9|aGGK4q)tJMofi>8b%B0_=C{LE+Grj){PvrD3ruizCc!_V_=ivjjkxX0v9?{tX;X*89;mIOnhgz z=klV0C}8fK-&iPY6MeCH@{SDFzU-So7O#ANNL0y;VlM%1aWSj+Ev91_gP7v^xJ`iP zJ~arW-Ts)dfpTxE13Yf{IIALr%oRlQznt}R>rzCBe>(d8aMSkJvo&9I`LVa2Vk*Oo z9!Da}Pu`KT5%zio73p`#Hgi27bcFXk`t$+U0$qwz)&{w% zNvlPp;#yCm11j@+gvu=o5Cb!xL@m>U?bFmtcwCxc_%NLWr(+t@F z+;eQpeEiY;NYsWvU*pI#%xA5Q%<&79tx zE-py#ZpyI%7o7B^dX6Xt)Md|LKJsF@E0I~!!^)~@ZcPH^AYSwdM&rgGN*Jhv^G$MT z+fwfPl=4Jghk4h(Lubeqyc7R~yFeF|ToFSS!F?c|lc(Q*VC$7U*n z*F>)js$=8syrIo+$qQ?G^Y43#d zF6B7-XwYxl8w&j7MEV~Pa`>q(0vyX&_5N%CUr4pl6b7Lm0NcXzYDx-*l}w9;yeWA4 z$UTA`&@Db$8rF5BwoqojZIy(kxBJlDQ2)I(0$gS9i|t&@uI;?7yeb9!X23hLG-288 z6bJ_K@P(P7Vbg|#k2rZz95|b0>By%TX~v0H0)&+2y%AoUJ5wyt{(2~$X8#f1EPnB= z)PSV~`T`ZGaeQ>;nw_pk;tN(0D39*q_TkA!D2vXscF_FJRD~g?tmT#lk0*-)Xtly) zuE?g7*kAqQ@rC_42(0drq}CUnuWP=<)PS@&k2Nfdq1QJs?M+4^>0;D3%i5q_0H?6JvM4=>48lQcsH@1ZE}_ofojNjj zAD3`48G1g&*rr$`!%`-}@UXaWBhy7+D4;)|-X^CL&!kf0w!uA32P^sNPH}4mJ?C|7 zJygn(P`mEtcVUQ!wa_ulx7`zOmvJ@;u?sAY zifCuY5-&m(5h7zLn=O-XSN<5j53SmWk{IF??*&r(6>U~{IlYV%zaMFd_55qA-|a{1 zcl$|};c`%&lQ4^f(0e#iljA(Nne(Q!ewhz+VYCS&&TMtj1%ixe=`1Eg6? zW)S5`jYfBSnY#1qC18j#V@wr$JgxQscrL{Yd7UYq+AhJ$!onf z64K0I)}FIb3qmKlhYSA1N$vK_dTg%EtMC59vyBSl22MU+2kxXGF2As;Q)I-uf4LQb zHYDDQs^5n$I;QYwfRaTxn4|2N*8T-xeN6qKOq;oY9O48{fqk9n@Gu(Ra6t;Zg=oJp?4&zK@9zqoTMG+POqnlX zP_-|!p@XSo(ZclQ(IKUNX$hg-fS^bjB{KC}hrZ@jhz4-s3-p+g8Z5Z~aM765w^A&(` zF>*d%Fz?=*Xm1Af@ce8Cj46Jh4)@!~dk1U)?2B+3pTXv#Z7P!r5vY+tS~=>MY43;Q z9x$s4pHW3TRHkhVxtEY5Z&kvewd&ehCa-es(y&p-)5H$96BxA%pLwV7s=g~s(AO() zmCN=K6YI}oolx$2b!2Vz@zoNGL&=aCu{y#epMFUZ@(8tA-=C;W{*Ic63Wmv1x z_^f+dP@bgv1b8OujqVOUN{e1IF14^^sif z%D`)w!KkA#ouP3Se!fsZyXUw~`R2?fd9uYbXE9qv6WVZbJ#1Fxm9Hd&QnPI;I{`aS z?e&`p#xF^^#BjmpP7*+V=c8a@AepO~3e={s2|L2u%Eh*{vqXChlqp4@y=3bcF&r0f zNF{!ypSXHOsqMFr6Lma~a_g!*GQgi5bc_=vU>(`^H)JQVRt)=TIK?B#XzCw$QbCw~ zCq2GSk5p%>{N1h8RsY0KN~20<7$RqmS}5po-pPp=MApRm_kXw0)}Jl(9Kz_AM0eiX zhYU(AtY<^CV*4#@O}UFL()9QN!=oZkD^P4;>!1LHlGvDE)wO= z)jg9a{`D2YBYuO+*Y)0tZxu28W>6E_i<`HZz$LXKAzg4P;q*RqnCOm*+g=2hkHFS; ze^|QKFv)kI?l<5%WVyo6&1IGTEl%-4hRfnhml{rG^ygorLJ>H1nbpP0%aDCw(oqG< z`D!OQR3oBLEk`O<;@PHBs{H^YRky`!6Dy2W$$sufgk!$xC@j9;hc3}&u94IO+4I`< zc~`~Y3nCV@K!I`0(5A*?pU9uf&kR9WY0+f`M31_~#p$Z|)A>Leh!x_HV{sWLijOfAN(a@t)tn!sWDN#|K1$9SqH~vd^{9d9S65~iM9t0@&^2m5 z(40krZJzU8?7|b~yTlP2o=6pVTrHKK&~d z461ivn#FCPg7hI`br`o<2`!D0Bde7mL+dxyZ z;=jF1+21Lu8vVmrFF;*k`UY^m8~(=$<8Cq@zX}anjv92)te-I05s$nWZHt_0K6seKJ z!7Ye)n-UvyaeI9is*j_2c269wa%%^j^@Sg^-TgjnY$mTSOfUNPv<-KxC_LJM+89!?%n`jFjga$s(t-z>-M1^Byv~( z&AAi*%ehs-c%uS)JV@$O_XjL&jkz)D8^Ki+ho@8dqlUJ?4jl!bGMY4<3KVeqp zZZMltEDiF$cQm&W%llY~@L08Ev_Ni0^-Ci{U=w%4rfMeX_hNT3nJRxL!P3yNI=P#` ztr4tk*neu9!&?O)2Nb5A$V&Y*u=Hu&AYcNVAj@Gk+fKpx@)H#eDoya4jz~{q&tKtb zQ2npX`v2{1a)>u)^#9qdWhaz)mVB?164lCL z9+4^S$L%emC(9;%AB>&$qa>jGwoOym>Ah?STOl1cxA@uW%uKcjFe)yWFjTAkc>T5L zdSdK?n79MS(##;QezaQJL+DO&}U{c?t%;l-ACqT{kT1 za+*IXvJ&R*yOam3`L{uhj^BG^u;& zpv8Gn-R|cjpRI`g{@PzVcz?+wU*}v!YKJ@6B&Rfih<(s>dq!T4CtH+C=;ZEreZT+T@9}%whoR$R~S5X%)Mx6m^e-j5KT%dFK`j^7;T^hnWR0< zBEZV->@H42bLKQ!Q|*@T*q=%CEBm&mBOAev4TYa->-^p}Vv^FrX?Zv`DLK#o%hRY*xTJJAe)L3|iL{-GRhc1eHBjzzkFauT4qB^F@) zBY`T5+54Tdu?aMq#&q-rL(qIE_!PDx>9T<=ioY$IKGek$MGvAGbq=fGc9jGX#L|MI zN+lRVuyTD2Sy0yu3Ar#6{~+X1DFRK?uZ5F!Tq@g0S2oB)@*NjdHSAx*F=}jHo|~`m zA<$-xwL9Oeu;{2)O=hQq3SUUq6CH5yrb|>hM?*A=mc5x?XsyVE$_NwEWiR+bhi?Dg z$;hh_tf;ArHctw(ea@(%Z+u5RQpfL!gDgdjA_~+hMY6bo&2lf(A?*JYjDK4+Z%KCUrGVGQ_cVF35 zUGsYmxjPovO+C3ZCOs%f+*eWrSg20cKVc;V_gbsrXH*WgUIvoljdLVbfDX7llL( zl@B?W*S_jq(-$v|*ZC%be&OyD`J}F=D*c#a>fqPeFN~DM^nE#<#<9=EMx0vSMd_#f zmm9vMsG&W&P{N=-|O<`k{x#)`Nly-pkpIm_C8e4L8q)vuZw6H%}Tm z3}E$$uFS2xAwn5LE(2>Guk*y8ro<(mQisxJ?ll<(vAyRp zyH9y59T=&|JkW&E4K*6dmkh27dLa8$PFGx1n`bE0;Y02}%xvoY?p4ORA)qse5TVwj zp=PIq7##>W$ux=g^mQT8$y_P5tXC!(cfm{7O{>?+iRWI*4)LHjjPycfS}=&HkVZ^9 zqU(7Uow#VN#Fy5P3TG=herEBm5XG30v5^Y~leeV=k)<;)jC9TAF$dMD5AKtjuvv)b zS#Kz-%BE&MwhRTYoG+pf+Myta6uC}qO=H3$hnSIW=Hyy2+}w4N#gW;>)hDxhOU|DK zAslJRFm^VFjnh1)GGc#Mp<^@T$>$!QhOIoPu-SsdX4A1Bu7t}rv57D%dP}u*COLU1 zMTl7=hfz$LtIl*%Zid@JxY}n|%94+7!p|u!XXsZPN1M+4yzj0w{)N<|EQF?6Beh-$ z!<^i(b#8Zfm|-Y1+3@fRCv6Vn=ix684Rbdv3mRR zpH!*+^ZoL9X7zG;H}{FWAs3D|h7UW+@5W>w$kd|3ZHM5PbQVxp1*e1c1O71R12&Vm zJdIb3AFV6oq7=Oy6WwG)x=e`vDg~?wGvfg}3`(m%qm|fSd)=&qh9Z8yRy`DLlCcj8 zI-N}J63i%X3iVc1#uSvZIX|L|s_*b}O5Qpsa&@!#w1Fb6Dmi26+snpq@8p}(Gbze)H zT&0hmk{`d+*tBiU_sSbxnY_TN-tW>U9ES0CdRE$f_2G_0o8kMEfU5*bUfKn|mm{Mi z825({H>cSvm{?rl6LvEVcJU=;b$Yuaa^@*=RV9Ra<5*Mw7^VBVnCQ&*n>q3ALZ}Yx zOCOK2jnxOy6#>5&``GC~i=H|cqs*>)M+x_vM19Meo|wPz?#~sU`FRA^M0dND{%yj7 zh}x&6dc5y}qC?uHmEAa9)1Tr%e73>_=B{P<91mH(B6Q*dqJ^OC+UEuDSJjZeJDe-L zZ~NKWBme5#+^++RGOX<3qUGz0eagMCXxsB$KwNuHmTz1fiHT*u<%2W%R4X5?mMr=K zvMI7qD#G_tvF>X(?0EZBr%%xq4CgRyh_#_-pZ@koG6-ZwdvtL_za4s4l~ZV8cmFjpS}9@j*t6AJ6I@P=F27Kk1T~|X$8z@<7b$R0^l1p4vLI%J zqg)MmBZlhi{ohdsdI!t>;B-X_marQQ+p7ja8`Rs;vgOwVnk3GDNva(0;zHF)_e`n? zP4;;abZ+6rn46cN2(1a1+pr1*t)=&_zPagI$V0pV6gQBjvtC?J`oxKDS6(w3UDPD-4>9~YB2n5O0u(Yw%P&weFlms(70KwHi ztLNf*y&Mxg=C3M*V&f75vJo|c5!<=5HfCKNrL(%c>ON^Zzt1%XrB@H7T)xL|c&nIN z9aWoP@_O6|+8DXzB-@JVj8`@owYG7(%)7qOhSV+|&MubcUZ}EQerda~^ABWdVOO@b zq~vQi6fs!7U% zadn;0uMah@U&s-HhF}qB#r=_Rn6l!jPmqB>6&G*9AmVeg$rTe<`Hx4(#?+x|yb=7W zL8;}c)4h}4CG%>$)=HmdRJhey>jqD~5@E<5fDY`TX292bA@0Ys7DHkOwKnkTt!`iy z@Jl5CQ@g*?2U#-S#UW+tGNs{fUNY^Fael=kd9d!Cs9j*`JU<9o${Yn==hF1s#^tXc z2*E#A{m6sqhm#-_!Y%vR0m#zz9TfZxW1k8Yb=WSr049(31D~hQ+oz%eHPVqrv9+*m z95n(Nh;eCiK?*s|kf~aV8@O|A3G;yzRNbU--z9hJx~PgLzrkg&tiV7aU+&W2`Ja$d zrw=ckSHNoVBAi-{JH4l!q*B9+FKysBK7USd=m_sS1{XE#`~w8v+BoD!(5Fq@5r#kt z-f^1#w#35MDs1W_D6|v%9ww2F>}j{K(EVbRlsY=)coAJayl4c)afdwedaVzQHiRoq zEw1lys@P}d~R!%#MzFmtVjzKGKeh5o!fcT zK|!rFc`+e;E?;~03;fn(rLz-KOE_Kf$NejNH7wP~bK@rAp;dfNzAD`8=cHEUy_UCS z%6DeBZ=s|_gN>3Vn88%_O+Mlyb=RVB;d{0*F+T8WPaN4gHjc=P8F7g_)7<`N22U6?G@#p!;qyKdt~5r=H1c@!PD2txZJ@!bfKtm)YHPNHD%2=;yv+`+F%Q4 zRF8q2c-%ukw=v$=CVUs=tg;#0xXy@a5B7RBq?hwD;Am+j(t|b`iV{S}SA%wcgFURj zwk)*D2MtjOUh?p2=7T7vyT?rH*FxSWigNd+kx5`sQj0mND}4SuPg37dKnBe+!aeykP=Y}^CMan)qf2}k*nLE@uaiLh>PT`#m1S;A0o4eoo^>`F>|9&Ex3 z$y$&$Lpet(Vw5r2eCB|bhVtq*dRQoa&~v93E>$wj8z--U`RWDV5_yGnUWYYV$nosX z5fZ<^BqZYmKfpNEh4!;sA!p&v0T~@|#nc1bqO5f=a^2|0V$gpK{Y%yfLvO-k0|PUr zOaP0imO=n79@PO1h^G8^QO28v9{?Fa%!92Ywv+;vZQD2sz>EpRJUYTQ(0zHwHa7_Q zkqpP~#vEhs1V{a+h-X|opQrOT4R7>96t!yawuGAv-4k04z$usNK{ zB|(EHZ9=GBFCGK(Gjdh8d`lRiJ?F!j&?WZVY8A!MJ?cUqp$c#JqIHd&6zm%g$S44u zb2d40NphhF@<^ChC(@gRw|11PI>HSsHktpF-|TVbv~!VsIaojPu9WnR-7dZg>XMkKLed;YJ6x0s)b(+%ZJTyqjn!hW)Ty8iY9h%Fb5> z{PY71O$VYf4L%FL85egQKJppbI?xS&BY(~YDdX?IwhUlAkq5KylgV#+lmYwE>;;eq z>w^`j%IJwVEWx^o@`^ISm@Iq2zeZ?<1l@w0DSJh9^RnkUTXuDNwhJ+jqS?zUhBD@f zrd&#U+qlGPC?$rDM43C*i3MFgy*~41~5tZDhl#jNZYK%FV11N;IiCk0FzLAs5 zcPLyuVMn_uuz*h|<5mjl-zIGv>is@iLsW%j}%m1mHf8ELYJXGwoUpI8>*__V3v|b0jV-l|MoeDaPt$EYkCZLz1*@VP zX|&=?KnWEj$^#O(FjsW5c^g-{f&1%+c^>}xgOI;&kWumjaPL+Rkp}R+eD`KB2JnJ_ z($3s}L3J{8PB>URz@0Zv_vB9l?sjx`2TbCjv)M>j1@L}H4KoOAij9GZ5PmziAea}g zv$awP&i?OAT#u3KM7`wumM>cF;jY>lJ9JoZnizRYiLAfvQ~A~-VYe^{Y4F)#w;V3s z)a!*bm~P?lkG7cRvB%6`Pjl*7B?VBikAL}g9V&QIW@k#23v#Itvq$MD5}2&-p9!2iy}`vTAMQz<)=VJwkKU*-a6?AR&2MR0Gxw ziKzVtD?V59FM4~=sRaAfV^*RxFG-Yt0X%5;HE3A+V{DoN8FDi4Jpl2A}*FJoYsIZJeL)QQ8*Mk~{)XlG`Kyo9XM$!(yqoeyuNnVRP|;mjej`aT;XY z>f1}Rt*j6bn@qZcy&3_*EK9r>j;XHDy3ee}N!h~9)m%N=nY;76P^(r9-DMGTzo$ni zgLPnC@gPRH+hd$V1MUFimg6b2~^>Km^+eofd z*XPeiOEAQW$Q@J-KKz}X%udJ#7l)bN>ZM@R{MAlV8@XOK-hFI7g^(lMum$N967r&e zapPMB^Wc0XF4=Xck(tKQrC?0`PcgS|nk1?9Htj*4_@~0YQ)j8_?9j$LxER?L9rR-a z8Pc2XR5onaWz~2kro$@TcBQ`V5J}|y{Y|U0c@tFLs0h#aPo7J#%Vfyu>?6Xnh6dZe zt>@>L?DwjkB1;@M{;B#O36m<XX@fo4dI zH#x#B;4fGyR4{xJIH=SJGD{%PIAR3;)7oF70u8f%o=5*LW`JowAb$-M87c;`Q-KQk z8t4meL~q*w^Du%4%tMd-H8RtOM;&M3dtZ9sIt6NDOBq#GM+7Cf;}Ky5f=oETeW#$d zZRcRo8s7VAv#?pIU`#Xz1xW#mVGm?BAt9#SziXHd471NbJ0|px2p-@+7lQwn(f|>n zLV)v=0W_Vr;~NYAwnH`8TPj6eg(=Ps@VTX8!%DvoL-@B5@xL z6;JB}Rnu+mB$A^Qwoi)33546r951~|24iGP8Rl7hPg_CycgVX{AUVk_u zG$8v6JbY&ZF^k*xO7rR@EiH$rPkob&@_*7fIu+Qi)koQ{E`kSV4uIZwP5KuN{7nd5-!jjS&?x}P0jr;$ zE=e!1!+jCS1sfnZQl?m5%;(7nntiou{I;61Fye|rN6z*dSi!nhf7qGU^4l}X!bQ%j zKMgIS!%#KdR6|t?-JQ<(2R``Y$w180w+hnM_a0|&;<%>YRUF{D+=JA3_5!Et(Se2h-FLY{kM{eOJD1;Ap;O%nfBqCi2_j({vXW-7D?Bi!t@LCr{ z4yf6W9??C)3HZz;5-yZ1-RL1<9kL?>_OWi?J`Q;)+ssbf2AS#}l}Id}0%?fv88Edy z?&uNH6x2P$G4YHnklV|POuXa6CMYzk6E^u2lpilr=x?>&zyY}ext+eQwmX{scibuB zF)ok0Uc**ypDhBU_!w}r#-)F21W@G?$5p6=@&H8`fFtVchG9PjlT=wuQ zU`Ov~z^vi)eOB9({evAl1F{#zmpfAu}Kp#*D8#kW$So@vH zWWiO~(`x3McV3!ut~jHE#z=ya3{^JH5X&70EsqGBavoM+HJ{8}Q(dFa$NzamZ$Yqe zb6YU8GdnjT2j58`nZ)FSO8iM~OEvvUbt>))Yy#4&1m6>%u9iXreyrUBJ)D>5DWZTT)$l!e)4S83Pc`U!)^(80n*(=#u+e()+b3hehR|CWej?OJ`YMmOD)Zusx%cwelP z8PQ8XB22ilcnR4;xOFQ^`H0KHi@f&h9%LtSqfuzVJBO5qR(~QV zx(GJ!x*^gDcN%hk%;I1;RC!Tt9`lcWEe*Agf?LKnJ-v$a^~Q=*ZkfZ6RNraaC$yh> zQ1iO!6{3r)Iv`V|OVFsbZ}9}S$n`(BV`C%CHEBX)iRlylD}F4(k4I3oT1tOd#DCch zS~!2rB3@azcv0F^@Qm}%d?W2_Oq%Me=DN%3Ipr?yu3Wo9pR`TH(^^ zWT~O_tk!#a`q3V4$4@+c(57DM)%vxGGE!1@hW5Y$qV4!!TykdTMnDr=khH`FTkwD^ z=dw5X7HQ04tSl>M=>SiXKGBG3*X{1F`b{dJf28Mo zs9dPhkx882t!k+w8N1i@FBF+IYu4-1Wk-Tb9Gv(j;_TdidZwR~yKdSUJS#N!idIYe zq9azyU*&K-DR;JRV})(+2gi{_ovzt%p{ZcG&$=Nk8nuSf;o>8Wsi&sdoz894#p*ImH&zS*dFG^U4!}A7=%6=T52z zR@OB=&625)kb1tLH%YC(6fnW@VD0wBCyXZTWh?jFd3>R(Ji85|W6>L?A%E09K85X8 z*GaJU!v}tuF|-f1_9KqBcT9lu@i9s_h`f5bV3Vjk*PT7<6Au zo(}}#NjAKwXBh-uwYye$+)yB_q)NlpnS_kgYc}_h)E9I{rk*T*HOi{UBtcTJtMt)S ze2I^A3d41Yun6(`jK>lN;t4#Bz@scIu6#7-6Ele>l?Rm_KdF9G^W(mzH~oM9@~%V7 zriJfY`G>xr*UT-bDeNg)n><`Ib6`w;mRebPzj*J$c88g)=Tt+mTRClZ(d=zNAbq=J zjpA}5kQ4T6aAhl@!Hv8g>d57`KK`|haP&km3su`tliH1~q`v5w5{KW%(#oBz2FC~O zX^uxOI4#*lLL^Kdgp=h>dxfg^-!@aDhlnIxi1q`^XHVO#rc<|C^tL~&^1Xzu9z##} z|GaKD#*^__(Qdi38daG{4p)_Z&o~TpO+ZLovjsgP9jlr&=7%t?6Wsn(7nisy^tRZz z;MOnHrhks3Ul}?4-PN#oA}1kzB!5sRLsX9st;<$R9iCdgN2r@f!&zrAQT9?xM8P=` z@LmV?8@k(3+kYrSQ;czmR046(x({!iA-JAeQg^2y?7y!+B^ZH2N=jk-S#Pc#MARTs zW`YAJ)!I_s@agHnUtNOMa>5RGR?}(S%6p$uw^2Gpd;95rx9Su2kMHKHo!b{B98K&~%Sr>__tz&Eg+eu^4$r+7 zj}J86l|NN7+TqsYw;B>=I`WP%U;T0Sw&QYh*z@d;`O_(M{6LQxnn4_OLwSyEB5Bay z2(tCY=3y^H)usju@(eWXN}faDxFKNQ??T0Ux-o|b#29aozHvQxP>Ww5nI^m)b2IOn%cg}5F?&`F68)Q(20e9`18*5+Yj60=R@<9d z(y_d^Lbp4eJ&jkMNrzxLml9@LG4R;lToPyGB4gum?O8S!t@h#NCvVWh)97Gtu&?Z$ z%z7>~rf5%=0V=-&>gn;HM<9c48XS2nA~4Rf9ty}R7+dHArK0!#+I2c+2e7<_7NPGb z9y&g3_AUIyag#zL?w;@sZqm+gM22jLI32&i-Tt=y^Q#>@%cbKoO{k2b%z;#2rSs}^ zu&K!+LfMX}S+gc>C^Qr&d{m`|Q?=OovHF(pGU|-?93mrxSN}dM>-SuL25#uRhZ@V< z(UvIPD-w!Uo;OY1rL9^U^>`rp^u@w#Mh`S4nKaK1?!EuHPl^l(1QB`JQbL~D=6AaY zLtNs8`cfWcUO1Du!(E!l`6u3(4t8HZgB-@IY}l*XQ zBFgU(Y6qMGd49Hyjvqnc9^x>el1qi(7~1FIO(?YV6D%%y;~@psghIMV(V)(8ExdrT z5mpB1S**uE&P^``*I^S+!j<1X4BR5*f}2?T$E(51St3hROrB7Skb|qSGpZp z6Eg!a<>M$cMj};_#Jv5nGWV1@?*hCvP0s1Vm;m2$u5%gAExF+H_NVaROHrW6 z;g@gO)0&i-%A@oB9-wl^q`1ctY=}bl^q#t3(=1gkGGU;@c)t7;FPqdzv?<8F$cDF+ z+`d;~hF@ZQGB{rJKBOLp)ACwGAS;uV1RbZ4m#w3*XqQMVu%hBIzIJS*d3P1uz){hF zN>K;Nt6`U9=E@MM78S_%Cw z4QW>wD+4yC=h{6^c3WqW`Si~zTFry!(Q?mt(5*NoPuc0mXn)@XC)R~Hm&JTCDQpl@ zPfE(@2n}0RDc=`NBxJDE3g&$}J{+A?jf7#wP`Chl^D?yQ$t_Q6?JR;sjyQs@h&5}K z?{H@;H$ze+SQWmbKvgnjfwE~zG4pU`DQ5UAIj-d9Mw?x>~9J015111)78Tz2} z(akSuP?j0c08gIf*Fvir+X2qle)6BCekNH=()GmOjqsGxdZ3U2x9~{O zxnY$$FYua>A>$a=QD?&0Q<2F7>`|Ji5gpGT%|lwz!T&Q?yKHPDmF*S@Uno~(Lxt5o zas~_HSkub;hy4@tI1gjvf>4=XZ9*DwLow?@lyh^o`;e5fy9!>_lrX)JhK#eN6oQW!&c_BG*)gi}xO7cV^MP**wGYN0$oZo7O)O%y{zJDYq=BThxVHPWA@hN^C zD95X|i?T*S?g58dxO)|2!xY$mBcu0Au{dVrM~BFMAXbcpN+J)(COc7RpOeOj7YZiM z3{V@fz(o^&5AVW2uOMQMpqu~lQb3Jh(I04@ADqbgPij}TrCYJ;nZWNARM^I$zUhas5S{S`js48fjqcZ`e5b)n)m7zX=wgf0*wd9a{dnzDRSbQCLYMCfVAe?KYOd!WgfjaQVF080QZaEfhDJ$|J!g9 zRRA`qv^f7An>d^SN^?RJ%M}hn4SM2|>c)sDkYf*9tmL;Dl?^~t_>wj2g2@N3RYb?U(@|ubuhzKGh)Vc7`43*U(1K-dWiIwPtwiTsG3rh&`Mw#ijvzz<^uhw5 z;7fTX>yvgw4gqM8xsSJp0nQ5Z_N6VqaQNBtN6=_oF|yrPrZNysW%Jv96+Xv>O2ia~ zcAzpkWR9RsK8C$QIGiIT-sI#RA%*1wNc_Xi7D~NS$P|yX{sjE+`%i|1Ex>r9>Hngj z>(J-A6^ni3v0fo}&xP`Ld`sasa_0Uq(X_+rfDSGLH4;AcKKpN|H$E(R-dQrS5Jv+% zc-p2;$NMjIt*m+=?@E^YHT%ykw*qk~Tq;kAB*te{$jg;)0*ePnXP@YXYMn4+E#-}Q z)g(op?2iT&B}$`{<~xlKj*IVd;w_ok?JjzDlGyuEnBm{AFfkPl$O=oda~e#MnKo%z zzz9!aj@H2KQmtevGoWsPlcQ*#o3-@@vS6RPG^6+V5w!ffISr`U$0aPY6?L$qgK_IZ zB=OCoa7q|>$~$QPXusOY$?LNC$--yf0@ugaHm0e}vV^vM_~hb~&KH@g@;T$|r)bbC zp9uN84zPB&RXV<+0dR18YgC2QW$YRUN%d%az@*Fn(g&|O#0Htj19@K}J(QV)MMg=w z>BW6GVPP~}EM^$K#Ui-CUaHz@yEwx0a5c{G+oneu2p%G&Jk@r+u`Y)b?0uZObH<9C z=*Aipz;ws0lAQ zcee=jPmLxbfYMWb&hJ0pHRiTf6!DZux{~lXr$6JZpX(sO)N6+zuF~kA# z&vH6T09?&maFi2(vlf@E0!b(uq5F|ipQ#CVr{8D=DnxkeKIaTIn#N$z=}BHAI+fH+ z5#8W~fSQ>n`|JK?Q!0&nWmt0esPBiUA*{rRR+;yqav%>C2DAyU`wA%ybOKHkFfwj5 zi`?KqG(2@iH3sf^satYa=MjmHl#Y_*vhP-)omhL%(FAQz@+o7r&Z;^+Y z>-E-zpT0?9e)g^056txRadJ797y%uyM&1Cww#dAEd&-pGk~tdJiMVD8?qxg6WWnM8 zeJpI~LCDzO_HIWq@^mJlkP(T@X`4E2=X!-=n2UE_MuFfwRKUscK$Eer{;we77(`)% zeC7yxibIl&-}SG1jYZ$qq(RHDIF}yVn737(K|X@OSW{4Y+$3Jzu%$h28ltxv{z_=S T{4(%i6J&VF^kT8TWBC67h89u1 diff --git a/bin/minecraft/resources/mekanism/gui/GuiChamber.png b/bin/minecraft/resources/mekanism/gui/GuiChamber.png index ef1cdb11d66aa1ac404fc241ff369c9cb1010312..ea9f7aa3558c628d28852b1122952b3a6f66eda0 100755 GIT binary patch literal 5145 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 delta 3871 zcmc&#eK=J49zW-pF^8lXglITkQtGvxoO37-9%}SUyN-x;zMqbYugw5Nu#jp}> zNn0&adDo0BB1&;%r@Ssx6f=zXVRFxXd!D`b?mo}G``o+t_uqM*@9*<`UcR66%QkB< zEpaDdsslTm96io}qusj#HIC>!9xp#g+Pd4xH4Pm9$x!9l(}2XYq@^SH`n8d5w^j*F z%EwE1_D5Qe2ya<0tG@fbN$_oGqt!WByu(5{_6&E(|G4Ps>nV47dvdHeu4EM_`=AR1wY2wX{?vDA;whz3| zI)i)PA7>03R~^|iyME%`5x2H75rE|Z3ZN%HRM-K5? zs+nTR1x)0Tw>n+mH1lNTLbr~cGZMow2dRtV(nJ_}ZeB8~Ca^dzpG(1PqyyIO&puuJ z&gx{Ojv7&Bj}TO1#7Ugc*w7al{`qoINXR1B2d@lH_#NeMJI8frw*me%>hZHbn#Cn3;`xZOA8Q`2DD=Ok$O^G?-kG#)JtAMmV zHM|pqtTYke=>DisItbyNz`uTK&${C}Ia$J~4HFpS!0q0uj?vzWCG<}|QUxLQ%6H`8 ziMI4r$|FIMo}Mu>AIlAM?Lybx%3mr`1H6Q*NeSvnG8GgHeq+FIZH)&YIr&>vpz^{p z>xm)1Gj9wLXg@S&gXT9tBs4X-waAD%WrFVwpYN{NbIhB;V2FRJPu|zv9`clYln!_n z`+nMt_5X0T%OdVrXOSp)gG=1O$7!i;DWAY9Cal-M7=>@vG_iYgU*mZr`k(?uwIWQ? zQz?FYAG>cgGu*zaJWS$S9yud6Z!WlU+t$iTbeV~X_j-DE*Tqq~WwMCFwX1er{)6nT z5~Ks&Ur@=P@0+lrzZk3E=2AlZ%7u`gnjLTFrXMU#hXa-VxDF^)#U_dHlo3gfR25tN5FI9$O-<5$9`M-Q z$MX4^>ds=n!d4Ti@!G*}d}I4ZUzZP8*S1Vth_4?Xc$^#m@Ung6!f`zsOZ`T-3C?^e zvHwxNVAm!Un^V4L&WhNX%|N#Qhi0Bd_uJOIc4WxmKJT=DD)Vz7lzDgdwci!KMqt)v^~?o!gIvg;RJIn{bgDdb#;9C^ajb zmYPWx+T8Ty5xTm%N49S_b9HsS7EM-7eFKk}v8r2vP>rTLKiu*x?n>3QZqt<3gh?l4 z_MwYO#bK3`Mm%*_IB*FSFj8)wvQvjT$VYX7t5NSH$>xO;X?;9?8pIqFN_-s~(oq}$ zskpN{={7Om!DyVN!PF$#23-HcNmKmL-QmlAn`Y9P_hRR-D3ETNQBMQ#tUkY5V=zWu zzHoLBL3KR$;X82`USgd=K7%S>fv@YWh+OOl>M6&%2H5j^$uMv$V`oF{oL1!QReHkC zjnh|hRPllWtiT+X_8xA{WAX#^dJ$Z}2JeCh1(PiD-dYbSYT0y{9BX|QJh0_FyLGV}&0sfhjV}d>mvUT`s6fUV zN}OZ!2QUQ&~fZ|vH`{E#nJm z01vP!nmmUqfsnu{TiY12fk=27qt=kU83)$yHdXuzPXoaG0heMpi;4iQ7r$~e%r`=T zp^7#JWJ*}29`FSh9)hX=0E7LfIF=F$!hdMNPp8|w*j0u&2p!hGR1Y-vDZj9~d$S}} ztHS6x`^=`m%J$ux9BRWzM?c9KPT=u)qIyR0f$KD~Wh-!PSNN4g*RF9>?`3(pSad{h zR;hQ%$LRo(+>0-KNQUYNV8}45jzjf82uas`Z%EB1y5Z$0q?4os`|x|8YjGM0vm2G4 zh!HOFs5D-!uY#RSQNU?0E0n^qBV5-r@7Ri168B4EOKssn8UjcI@2rE)6S19NezDsT zNe4i#bMk2#mgI^9Nw@PyRH1MJ({A7GWYizZo>Ay?vl6~+C|sF0@_ot2PPi?UdgC#j zQ`&!SvOf(Kb{Op3Kqxu5+Q0D;J*0GMOejpWg#vWXt`%*-srIi7+53r5e9?q-lvqyc zx6arg=30(t0+IN<>N;;K2+ zKooa?>^}>~6VeSL?rjxR5X)YJtLSs6ggmG8GFV#+0aCQM{YF$n6o?;sp$QKBML?Rh z@MZnq1t1e?r~$oQ6Ex=>x|QmFYRy z&VT9Icl;{1U_bOX9wdAmvWy~aCanEsSFm5U<-g%dV~su#R{OMQor7rBKjdtI0o1j8 zBVpJ~{S)+G~r%z*7iB;{$Tn1Y@lQaF)0=@E-FE>EN9+`37CKup}jY;Q*GkvMgm-mH0ngi7) zz`5bCeW|G69H0;F`%YuP33bE)7Fw{AbeqU>@0$9JG!_*@01ei#8pt5ZoZ<438%cv` zD%qpTiMR%`3-+X_gJcjw!HjjZ5+dHue+}oi!eIZz=eOegRv7GmBkSL$gZ(Zp|2iG) p{}KAn=wN?d!rwdepJlG)*oSRVo_3G1ca{Uh*|F8lsc17h_D_y=IR*d# diff --git a/bin/minecraft/resources/mekanism/gui/GuiCombiner.png b/bin/minecraft/resources/mekanism/gui/GuiCombiner.png index ea086f8f5acb153c19a4db80b1c53533e304e4cc..40ec7ffbd840f1e3e36e43ec30e44b7fe249f671 100755 GIT binary patch delta 4772 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 F{ueUk2{!-$ delta 4556 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 Q3_vfFqvl4r2CldN3uxB)j{pDw diff --git a/bin/minecraft/resources/mekanism/gui/GuiCrusher.png b/bin/minecraft/resources/mekanism/gui/GuiCrusher.png index 0aae4e9394954782444a0e6caf555a9170865ee0..7a22c549d08b5d3ef18eb9d15462786798fff08c 100755 GIT binary patch delta 3237 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 J<+edd{{S+B@k#&y delta 3038 zcmb7Gdo)!09^bQV+8$**Mv)kzq;?-RG`*?^<`Q`_J8L?SFosy}#ej{(QdQ&)TeGF$ym&Aw)3U z#L(b!2xczB{1$Ei7gtcuZB!z3R-WEDQgti3b!4_x8jR<&gYDcz+PWUft@t{)B|lug zdge;7?<=aiUr%4apXVLnSeI-&1yNe8wF4uqDyz5F8pg(4b55$MEg>#PcN_BaG^@lbp%F1qo zeHAs~)l=QG?Q_~0KO0@I-kM`Ax3s^mp0ONo&ZR4`<)QF8X1#i6Sm~vcU$%Gj?Y6om zb?Rz&=W8zV7H7XmRASe(9M#rqp64u*oSuy<8sN*MH@)>IUmcf2K1RFwTtkFBD?hh9 zwhgSTMRp_Ca`mM<7Pf02J)V~_|QO=Fvjcr6?f*Xunq4asi}wkS!SzQ8EaOx3(FnL4T8MIks=C?79E6#$94iMnnJt}~n4GqYbT#HI!4u3)Wi#9!AI*M?o!x}OQ^%g&k(J(Hda9E{0u z8N6BX+?Ssl-)nHHs0>zEvKrPm_ja&Khz$m;$X_L~dB^BoAa(V7FOKxhrZQUyhouqb z;1pq6w&4ja>l(yj91G#^i5##8h*8p-RQy5+`^V%(XT_}JWz9-#9t_;`nAv#(LwewC zD6>?*^XbW1ZCUb`&^R8#cgm=)h!CcQ9_%*W*`N0AGSShqUJS%88ZgR$jRRs%L;$SE z9th>bCVcaE4&HA2<8)m9#lS%28)wHjgK4I2&SfWh5&saA&4BR_cX8v@zb;=5+TK{g ztzK^Uo6mcGy|?_ZETcPaVnI)8;jazlLVb=^N{Mp>$8^mlTf{xKT^@FL6XI_-^DPNs zmKHt`{265=ihlzM+%9S;4*QW5gEhwAQ>ABd69l5*m2r!JLg%pWcz|AhlzbkT@U1mm zKx``4NcCJWfuasRNL9>yp+hhgh8}@(LdHB8 z`X^Y91O0~uL!bWiUo3W+mi!nY3Li5Np!0|j013(P*nRY;xq$WPTqX5c@9QFm*AFtZ z0zZD#2|8%T_ykhdW(Rb(kD5PLju21R4lW8nGA*=b2TDCsd{^j9G9;k{$gqt}ww~N# zCLYq(x>xDT`dv3{O?hVcUBs3~82g8N#kKAnpZeInEr|tB2Iq%fp9)(XF<9GNo$>MV zQVd(4cg$sFXa{Sp4bW-abmMni(`GwBxwE6DhGzj}{Y$0&i*~-|^P#xw4|}Sk(N#kR zD*c>?Jw8`lA3$rAey;SJlFgbxHdn4W?ca>k^O2z#G5kSt%Cu3_CO0A2k2Q+s+T#p; zM6dSAOzBO7&nj0c+{_>AG_T9U!u)ODOe8gYhYsWq5Sa;t z@f={(qW1IvDMGxfI!x&r>4#DpqP~}G!Fh5v>6J~f()Ez5y_|Lj~7q!PCL)ig4=Z#)7CQOny&PEHiHw@Oyi4 z5JL+F zVcI%8rVq)Y!?0Hb-UaDY6ru+Xx+KOmYbGh3+AX(ZrTV z7T7J9u57J!cXxX)7?O0(A@+c6bJG{A*7%m*4++NzR~FIX;119}uCHM!`B7q94!T4!tP#j?{)iHBOQdU%wa zq5fEmW5 zWEow7<%|K$Ic0{x9?%`_?(X?X47`ncAk42&PbY|@28r93#SmOky&J%fR6H5gfgCG# zUFO~abeT(NCnez&l(5+oXqZv3<s|G~0V!JUl#>JOFyine`$*9RSmN7^@%(40OlfENxdS z9!Z5;Pu1r$8xvd;!IRv{TUc?F%5?;_k!Iz0=LvtN*M?|j%o8=p7N;32714JSC;*cL zwJm8&B@M#R5Gwspj6j@>svZb4H*8&>gW%{=ZIq?@m}v55hvEhI5|*zA^SWWHxE!Pf z9r+Ey@8X3t1E$GSfHpSo6lO=IKP0=)cu}9N#YcMUM5CnhDAh5)IR{LVZ diff --git a/bin/minecraft/resources/mekanism/gui/GuiElementizer.png b/bin/minecraft/resources/mekanism/gui/GuiElementizer.png index ca18da3b46a5ac21b05ad0a500302b90bc853970..fcf94344a3b2439231d1dbf3cd169f5c82d60b8b 100755 GIT binary patch delta 4831 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 Y;Kh1xP8`dM9DqKCx@ISev>ihK0Y0M|Q2+n{ delta 4571 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 delta 3706 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 T>tn)u0KF_sZA^-d+^_x@-oJMt delta 4301 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 Z7G;E6$dIy~_Y5GOoi=;vMcX~j{TIg{$$Nij? zcE~}A`k6rbiPgOSi+{@_yXTe z&Sk}?h{74dj`GMkwnOg*DFoMfbi7R{^2TLs;hs-eq3JGND*vlB7Ac`UsKsgP=)^ob z{M`QKXBjUZsa$6y|YbV#<|B`vQ@kPR#6 zY5HYb@J<7XQxC|f@sg{Um@*dmkRgEq2GManl-6cV(FV~KiJKPpAI`$@@IW4Ba z`m&$RT9Ndlx+o^aHC$LxZE%__0?yi34JUGUdWN(0NIp|;W3lYuFa43ZfQ5_68le=b~}p+01c04@#cI#cQ&a@Kv_F&OaZ&j$AXWl)un{s|0BPTzG=OdHx&qlc z5yF{z6<7f6*>U$f0~=D=6zEGj8(?A~Ruvtn|F(-Qf*`sOV3?Q^0M?ZS@nJ@{GN!b| z*s$1$e&D|5RPD~+)#A~F%ze&%u^G2$G+6)rLTyLD0`VzgtVMER5GNHcR1B#s>R{dqhou7>N_Fi?4A;Xy zY!`o1F5h@jNdZs`Nt15Ep*$6 zM}Ml+S6*Mb5JvG0lnuK#ES*_gdf{K`iJ%Jc%GKc~$(4W+7O@_GVaAV_j;{H#74go5 zs)f(#zSzxCPPFPfmWm?&toqROE}kP6$$pol?uT5qTbn8@*$0g^ZloE78 z#gY1}g~s-r^DejyFHl@TkNg;q-K5?0!-NVaPg$rN>5;a_VK>85 zB}!yVvovNlZ<@a@>|T|&n^bl_Y+uc^C2`fTd!yVU*q(8RX;_*y zFx8^$v79?*1Ws(zMs#&q`{GyT0%9c0SOs&rT9!>=50E+R6YE4Kq4z;024D!#!3E2M z%pJRT;(^3tx-hu`y&(&fWeqMPhy}_yfM?)(NCc+U@}NHB00S~u(6vy{6_d~*aP;|;UCxA5I^f*5 zKS^b`KMbTq1UrFL2!eAwjWc*FC~lm)g^II20eD{H@-@_|jt3@kb8f?$2>QU3oKf0q z-a-d<^ZQev=Qtewz@yVfjCpjlm69NXbf*Go93Ze+7s!Tc)fX1GNv5Tb54jddy%MeU zNtSWem-D7CYvxmWaFbq%*Eq9{CDL7R_CwpBLWteh`zqTgLv0$2wbbCjwf72~dd`AB zDnPJg>;8NgY!3?d37iv1{y=8-@}0~Gg1t+F`q zAPD|~#&46DI3G6HkM&+>b;#6(rPu6n}q58NV?oY}SPSr>oS9 zUC%Tk)|OV@lUeDLxTm_#080fod7*{lOcpD$Ya#aL1Cg3I(H1r!pTy zchFr-zVBhj(8OR!g%nf9B)YbkEqC1toM7M=C6M2u(Jb6@r8QSRBgt+pMN9?=`vFiUfdFLoI?7DAziDUDcTuv^Jim%|1oymP*Q52GPsT~gX- z&P0RU^ZZj)T#ebL;ZXnGq3;(2mKFE?TyNdFrCIOwjgWSSm(6=h1s=|1;OmiVqQRF+ zmbgxDUZsLosSO1~DlySB@2&~b!<&ppgSRF)JAjE#scInf1h;}WKT+C$oB+cBRFHEA zRzuG$c7JPtN4*9~Cyx`7>A(-qjjyTT@OS`IR$`Fu2m=?VGY%_4Xp#XBca(*OVf diff --git a/bin/minecraft/resources/mekanism/gui/smelting/GuiBasicSmeltingFactory.png b/bin/minecraft/resources/mekanism/gui/smelting/GuiBasicSmeltingFactory.png index 2b2c3a84226666bf3d8217f8f9d317e336998359..b705f031d8a28507629d72e73c2d01b35f3c05d5 100755 GIT binary patch delta 3673 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 J?(e02^fwA1#zg=C diff --git a/bin/minecraft/resources/mekanism/render/Knife.png b/bin/minecraft/resources/mekanism/render/Knife.png deleted file mode 100755 index 3d1be0953879e48d674c77b4787a9013b28b631b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ^PVn_ArYL(fByfsXXaV*+pEda z*xWw7rSsyfw4Oqtw%rY#osv28lS|a&s)dDwRy=bMo8bF?-yhcK6DRo=#_z3az0MdL z8=K%hed^S}Hv(c4p32+(XNo>?=15!8$L;y|1AZ9zIXg2S6+3(;$;FSEuj)?1eAyje zre=v9&^hF~*n(lYQdF1mL7w?R8C?E728LA^3fSlDDVZ<#E%63pdBYA3`!*F@7B+vW w1?~A8Z!-2XvgV6Q|K(8@)y85}Sb4q9e0G$$NcK`qY diff --git a/bin/minecraft/resources/mekanism/textures/terrain.png b/bin/minecraft/resources/mekanism/textures/terrain.png index 74240738265ae4feb5345d6b83e361e36d391d39..ba8c0236b76c090b1f340aa769fc5536de186661 100755 GIT binary patch literal 58703 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
G^7nZfNnQ_uNe@ok6^eQ~$ZvT#hjT+Y_FILDo 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 Z)AA_!#N4AlIRcPhCPo&9mHLiR{|gUP6%YUb diff --git a/src/minecraft/mekanism/api/IMachineUpgrade.java b/src/minecraft/mekanism/api/IMachineUpgrade.java deleted file mode 100644 index 6451414ea..000000000 --- a/src/minecraft/mekanism/api/IMachineUpgrade.java +++ /dev/null @@ -1,25 +0,0 @@ -package mekanism.api; - -import net.minecraft.item.ItemStack; - -/** - * Implement this in your Item class if it can be used as a machine upgrade. - * @author AidanBrady - * - */ -public interface IMachineUpgrade -{ - /** - * The energy boost this upgrade contains. - * @param itemstack - stack to check - * @return energy boost - */ - public int getEnergyBoost(ItemStack itemstack); - - /** - * The operating tick reduction this upgrade provides. - * @param itemstack - stack to check - * @return tick reduction - */ - public int getTickReduction(ItemStack itemstack); -} diff --git a/src/minecraft/mekanism/api/IUpgradeManagement.java b/src/minecraft/mekanism/api/IUpgradeManagement.java new file mode 100644 index 000000000..235febb1e --- /dev/null +++ b/src/minecraft/mekanism/api/IUpgradeManagement.java @@ -0,0 +1,12 @@ +package mekanism.api; + +public interface IUpgradeManagement +{ + public int getEnergyMultiplier(Object... data); + + public void setEnergyMultiplier(int multiplier, Object... data); + + public int getSpeedMultiplier(Object... data); + + public void setSpeedMultiplier(int multiplier, Object... data); +} diff --git a/src/minecraft/mekanism/api/InfuseObject.java b/src/minecraft/mekanism/api/InfuseObject.java new file mode 100644 index 000000000..d45545877 --- /dev/null +++ b/src/minecraft/mekanism/api/InfuseObject.java @@ -0,0 +1,13 @@ +package mekanism.api; + +public class InfuseObject +{ + public InfusionType type; + public int stored; + + public InfuseObject(InfusionType infusion, int i) + { + type = infusion; + stored = i; + } +} diff --git a/src/minecraft/mekanism/api/Tier.java b/src/minecraft/mekanism/api/Tier.java index 18501c627..0e8f1f590 100644 --- a/src/minecraft/mekanism/api/Tier.java +++ b/src/minecraft/mekanism/api/Tier.java @@ -14,13 +14,12 @@ public final class Tier */ public static enum EnergyCubeTier { - BASIC("Basic", 1000000, 10000, 128), - ADVANCED("Advanced", 2500000, 25000, 256), - ELITE("Elite", 5000000, 50000, 512); + BASIC("Basic", 1000000, 128), + ADVANCED("Advanced", 2500000, 256), + ELITE("Elite", 5000000, 512); public double MAX_ELECTRICITY; public double VOLTAGE; - public int DIVIDER; public int OUTPUT; public String name; @@ -38,11 +37,10 @@ public final class Tier return BASIC; } - private EnergyCubeTier(String s, double maxEnergy, int divider, int out) + private EnergyCubeTier(String s, double maxEnergy, int out) { name = s; MAX_ELECTRICITY = maxEnergy; - DIVIDER = divider; OUTPUT = out; } } diff --git a/src/minecraft/mekanism/client/ClientProxy.java b/src/minecraft/mekanism/client/ClientProxy.java index 0e217e385..e7086e806 100644 --- a/src/minecraft/mekanism/client/ClientProxy.java +++ b/src/minecraft/mekanism/client/ClientProxy.java @@ -34,6 +34,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.Configuration; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.TextureFXManager; import cpw.mods.fml.client.registry.ClientRegistry; @@ -50,6 +51,15 @@ public class ClientProxy extends CommonProxy { public static int RENDER_ID = RenderingRegistry.getNextAvailableRenderId(); + @Override + public void loadConfiguration() + { + super.loadConfiguration(); + + Mekanism.configuration.load(); + Mekanism.enableSounds = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "EnableSounds", true).getBoolean(true); + } + @Override public int getArmorIndex(String string) { @@ -73,11 +83,9 @@ public class ClientProxy extends CommonProxy MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/CrusherFront.png"); MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/CompressorFront.png"); MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/CombinerFront.png"); - MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/ElementizerFront.png"); - MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/ElementizerBack.png"); - MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/ElementizerSide.png"); - MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/HydrogenFront.png"); - MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/HydrogenSide.png"); + MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/InfuserFront.png"); + MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/InfuserBack.png"); + MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/InfuserSide.png"); MinecraftForgeClient.preloadTexture("/resources/mekanism/animate/PurificationChamberFront.png"); //Register animated TextureFX @@ -85,11 +93,9 @@ public class ClientProxy extends CommonProxy TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/CrusherFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+1)); TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/CompressorFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+2)); TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/CombinerFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+3)); - TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/ElementizerFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+4)); - TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/ElementizerBack.png", Mekanism.ANIMATED_TEXTURE_INDEX+5)); - TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/ElementizerSide.png", Mekanism.ANIMATED_TEXTURE_INDEX+6)); - TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/InfuserFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+7)); - TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/InfuserSide.png", Mekanism.ANIMATED_TEXTURE_INDEX+8)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/InfuserFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+4)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/InfuserBack.png", Mekanism.ANIMATED_TEXTURE_INDEX+5)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/InfuserSide.png", Mekanism.ANIMATED_TEXTURE_INDEX+6)); TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/resources/mekanism/animate/PurificationChamberFront.png", Mekanism.ANIMATED_TEXTURE_INDEX+9)); } catch (IOException e) { System.err.println("[Mekanism] Error registering animation with FML: " + e.getMessage()); @@ -182,21 +188,27 @@ public class ClientProxy extends CommonProxy @Override public void loadSoundHandler() { - Mekanism.audioHandler = new SoundHandler(); + if(Mekanism.enableSounds) + { + Mekanism.audioHandler = new SoundHandler(); + } } @Override public void unloadSoundHandler() { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - for(Sound sound : Mekanism.audioHandler.sounds) + synchronized(Mekanism.audioHandler.sounds) { - sound.stop(); - Mekanism.audioHandler.soundSystem.removeSource(sound.identifier); + for(Sound sound : Mekanism.audioHandler.sounds) + { + sound.stopLoop(); + Mekanism.audioHandler.soundSystem.removeSource(sound.identifier); + } + + Mekanism.audioHandler.sounds.clear(); } - - Mekanism.audioHandler.sounds.clear(); } } } diff --git a/src/minecraft/mekanism/client/ClientTickHandler.java b/src/minecraft/mekanism/client/ClientTickHandler.java index ecdd16da0..86be8481a 100644 --- a/src/minecraft/mekanism/client/ClientTickHandler.java +++ b/src/minecraft/mekanism/client/ClientTickHandler.java @@ -2,11 +2,14 @@ package mekanism.client; import java.util.EnumSet; +import org.lwjgl.input.Keyboard; + import mekanism.common.Mekanism; import mekanism.common.MekanismUtils; import net.minecraft.src.ModLoader; import net.minecraftforge.common.MinecraftForge; +import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; @@ -22,9 +25,9 @@ public class ClientTickHandler implements ITickHandler @Override public void tickStart(EnumSet type, Object... tickData) { - if(!hasNotified && ModLoader.getMinecraftInstance().theWorld != null && ModLoader.getMinecraftInstance().thePlayer != null && Mekanism.latestVersionNumber != null && Mekanism.recentNews != null) + if(!hasNotified && FMLClientHandler.instance().getClient().theWorld != null && FMLClientHandler.instance().getClient().thePlayer != null && Mekanism.latestVersionNumber != null && Mekanism.recentNews != null) { - MekanismUtils.checkForUpdates(ModLoader.getMinecraftInstance().thePlayer); + MekanismUtils.checkForUpdates(FMLClientHandler.instance().getClient().thePlayer); hasNotified = true; } } @@ -32,12 +35,15 @@ public class ClientTickHandler implements ITickHandler @Override public void tickEnd(EnumSet type, Object... tickData) { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - Mekanism.audioHandler.onTick(); + synchronized(Mekanism.audioHandler.sounds) + { + Mekanism.audioHandler.onTick(); + } } } - + @Override public EnumSet ticks() { diff --git a/src/minecraft/mekanism/client/GuiAdvancedElectricMachine.java b/src/minecraft/mekanism/client/GuiAdvancedElectricMachine.java index 74b21b6cf..f0d4f73da 100644 --- a/src/minecraft/mekanism/client/GuiAdvancedElectricMachine.java +++ b/src/minecraft/mekanism/client/GuiAdvancedElectricMachine.java @@ -14,6 +14,7 @@ public class GuiAdvancedElectricMachine extends GuiContainer public GuiAdvancedElectricMachine(InventoryPlayer inventory, TileEntityAdvancedElectricMachine tentity) { super(new ContainerAdvancedElectricMachine(inventory, tentity)); + xSize+=26; tileEntity = tentity; } @@ -36,12 +37,15 @@ public class GuiAdvancedElectricMachine extends GuiContainer int displayInt; displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 19 + 52 - displayInt, 4, displayInt); + drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176 + 26, 19 + 52 - displayInt, 4, displayInt); displayInt = tileEntity.getScaledSecondaryEnergyLevel(12); - drawTexturedModalRect(guiWidth + 61, guiHeight + 37 + 12 - displayInt, 176, 7 + 12 - displayInt, 5, displayInt); + drawTexturedModalRect(guiWidth + 61, guiHeight + 37 + 12 - displayInt, 176 + 26, 7 + 12 - displayInt, 5, displayInt); displayInt = tileEntity.getScaledProgress(24); - drawTexturedModalRect(guiWidth + 79, guiHeight + 39, 176, 0, displayInt + 1, 7); + drawTexturedModalRect(guiWidth + 79, guiHeight + 39, 176 + 26, 0, displayInt + 1, 7); + + displayInt = tileEntity.getScaledUpgradeProgress(14); + drawTexturedModalRect(guiWidth + 180, guiHeight + 30, 176 + 26, 71, 10, displayInt); } } diff --git a/src/minecraft/mekanism/client/GuiElectricMachine.java b/src/minecraft/mekanism/client/GuiElectricMachine.java index 9eb7141cd..44c72fba1 100644 --- a/src/minecraft/mekanism/client/GuiElectricMachine.java +++ b/src/minecraft/mekanism/client/GuiElectricMachine.java @@ -14,6 +14,7 @@ public class GuiElectricMachine extends GuiContainer public GuiElectricMachine(InventoryPlayer inventory, TileEntityElectricMachine tentity) { super(new ContainerElectricMachine(inventory, tentity)); + xSize+=26; tileEntity = tentity; } @@ -36,9 +37,12 @@ public class GuiElectricMachine extends GuiContainer int displayInt; displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 7 + 52 - displayInt, 4, displayInt); + drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176 + 26, 7 + 52 - displayInt, 4, displayInt); displayInt = tileEntity.getScaledProgress(24); - drawTexturedModalRect(guiWidth + 79, guiHeight + 39, 176, 0, displayInt + 1, 7); + drawTexturedModalRect(guiWidth + 79, guiHeight + 39, 176 + 26, 0, displayInt + 1, 7); + + displayInt = tileEntity.getScaledUpgradeProgress(14); + drawTexturedModalRect(guiWidth + 180, guiHeight + 30, 176 + 26, 59, 10, displayInt); } } diff --git a/src/minecraft/mekanism/client/GuiMetallurgicInfuser.java b/src/minecraft/mekanism/client/GuiMetallurgicInfuser.java index 3a643abd3..a090bee2e 100644 --- a/src/minecraft/mekanism/client/GuiMetallurgicInfuser.java +++ b/src/minecraft/mekanism/client/GuiMetallurgicInfuser.java @@ -19,6 +19,7 @@ public class GuiMetallurgicInfuser extends GuiContainer public GuiMetallurgicInfuser(InventoryPlayer inventory, TileEntityMetallurgicInfuser tentity) { super(new ContainerMetallurgicInfuser(inventory, tentity)); + xSize+=26; tileEntity = tentity; } @@ -41,7 +42,7 @@ public class GuiMetallurgicInfuser extends GuiContainer protected void drawGuiContainerForegroundLayer(int par1, int par2) { fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040); - fontRenderer.drawString("Inventory", 15, (ySize - 96) + 2, 0x404040); + fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040); } @Override @@ -57,12 +58,15 @@ public class GuiMetallurgicInfuser extends GuiContainer int displayInt; displayInt = tileEntity.getScaledInfuseLevel(52); - drawTexturedModalRect(guiWidth + 7, guiHeight + 27 + 52 - displayInt, 176 + (tileEntity.type == InfusionType.COAL ? 4 : 0), 52 + (tileEntity.type == InfusionType.TIN ? 52 : 0) - displayInt, 4, displayInt); + drawTexturedModalRect(guiWidth + 7, guiHeight + 17 + 52 - displayInt, 176 + 26 + (tileEntity.type == InfusionType.COAL ? 4 : 0), 52 + (tileEntity.type == InfusionType.TIN ? 52 : 0) - displayInt, 4, displayInt); displayInt = tileEntity.getScaledProgress(32); - drawTexturedModalRect(guiWidth + 72, guiHeight + 47, 176, 52 + 52, displayInt + 1, 8); + drawTexturedModalRect(guiWidth + 72, guiHeight + 47, 176 + 26, 52 + 52, displayInt + 1, 8); displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 52 - displayInt, 4, displayInt); + drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176 + 26, 52 - displayInt, 4, displayInt); + + displayInt = tileEntity.getScaledUpgradeProgress(14); + drawTexturedModalRect(guiWidth + 180, guiHeight + 30, 176 + 26, 112, 10, displayInt); } } diff --git a/src/minecraft/mekanism/client/GuiSmeltingFactory.java b/src/minecraft/mekanism/client/GuiSmeltingFactory.java index ea05ef6e0..f2eebe000 100644 --- a/src/minecraft/mekanism/client/GuiSmeltingFactory.java +++ b/src/minecraft/mekanism/client/GuiSmeltingFactory.java @@ -15,6 +15,7 @@ public class GuiSmeltingFactory extends GuiContainer public GuiSmeltingFactory(InventoryPlayer inventory, TileEntitySmeltingFactory tentity) { super(new ContainerSmeltingFactory(inventory, tentity)); + xSize+=26; tileEntity = tentity; } @@ -38,7 +39,10 @@ public class GuiSmeltingFactory extends GuiContainer int displayInt; displayInt = tileEntity.getScaledEnergyLevel(52); - drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 52 - displayInt, 4, displayInt); + drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176 + 26, 52 - displayInt, 4, displayInt); + + displayInt = tileEntity.getScaledUpgradeProgress(14); + drawTexturedModalRect(guiWidth + 180, guiHeight + 30, 176 + 26, 72, 10, displayInt); if(tileEntity.tier == SmeltingFactoryTier.BASIC) { @@ -47,7 +51,7 @@ public class GuiSmeltingFactory extends GuiContainer int xAxis = 59 + (i*38); displayInt = tileEntity.getScaledProgress(20, i); - drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176, 52, 8, displayInt); + drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176 + 26, 52, 8, displayInt); } } else if(tileEntity.tier == SmeltingFactoryTier.ADVANCED) @@ -57,7 +61,7 @@ public class GuiSmeltingFactory extends GuiContainer int xAxis = 39 + (i*26); displayInt = tileEntity.getScaledProgress(20, i); - drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176, 52, 8, displayInt); + drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176 + 26, 52, 8, displayInt); } } else if(tileEntity.tier == SmeltingFactoryTier.ELITE) @@ -67,7 +71,7 @@ public class GuiSmeltingFactory extends GuiContainer int xAxis = 33 + (i*19); displayInt = tileEntity.getScaledProgress(20, i); - drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176, 52, 8, displayInt); + drawTexturedModalRect(guiWidth + xAxis, guiHeight + 33, 176 + 26, 52, 8, displayInt); } } } diff --git a/src/minecraft/mekanism/client/GuiTheoreticalElementizer.java b/src/minecraft/mekanism/client/GuiTheoreticalElementizer.java index 79295dfbf..8bbf5c6ab 100644 --- a/src/minecraft/mekanism/client/GuiTheoreticalElementizer.java +++ b/src/minecraft/mekanism/client/GuiTheoreticalElementizer.java @@ -1,6 +1,7 @@ package mekanism.client; import mekanism.common.EnumColor; +import mekanism.common.MekanismUtils; import mekanism.common.TileEntityTheoreticalElementizer; import net.minecraft.entity.player.InventoryPlayer; @@ -18,7 +19,7 @@ public class GuiTheoreticalElementizer extends GuiAdvancedElectricMachine String displayText = ""; if(tileEntity.isActive) { - if(tileEntity.currentTicksRequired == 1000) + if(MekanismUtils.getTicks(tileEntity.speedMultiplier) == 1000) { displayText = "Status: " + Double.toString(Math.round(tileEntity.operatingTicks/10)).replace(".0", "") + "%"; } diff --git a/src/minecraft/mekanism/client/Sound.java b/src/minecraft/mekanism/client/Sound.java index a46201cee..ae47f20f6 100644 --- a/src/minecraft/mekanism/client/Sound.java +++ b/src/minecraft/mekanism/client/Sound.java @@ -15,7 +15,7 @@ import paulscode.sound.SoundSystem; * @author AidanBrady * */ -public class Sound +public class Sound { /** The bundled path where the sound is */ public String soundPath; @@ -94,7 +94,7 @@ public class Sound /** * Stop looping the sound effect */ - public void stop() + public void stopLoop() { synchronized(Mekanism.audioHandler.sounds) { @@ -120,7 +120,7 @@ public class Sound { if(isPlaying) { - stop(); + stopLoop(); } Mekanism.audioHandler.sounds.remove(this); @@ -132,11 +132,11 @@ public class Sound } } - /** Updates the volume based on how far away the player is from the machine. - * + /** + * Updates the volume based on how far away the player is from the machine. * @param entityplayer - player who is near the machine, always Minecraft.thePlayer */ - public void updateVolume(EntityPlayer entityplayer) + public void distanceUpdate(EntityPlayer entityplayer) { synchronized(Mekanism.audioHandler.sounds) { diff --git a/src/minecraft/mekanism/client/SoundHandler.java b/src/minecraft/mekanism/client/SoundHandler.java index 99d5d6189..f5e53820e 100644 --- a/src/minecraft/mekanism/client/SoundHandler.java +++ b/src/minecraft/mekanism/client/SoundHandler.java @@ -43,7 +43,7 @@ public class SoundHandler { if(FMLClientHandler.instance().getClient().thePlayer != null && FMLClientHandler.instance().getClient().theWorld != null) { - sound.updateVolume(FMLClientHandler.instance().getClient().thePlayer); + sound.distanceUpdate(FMLClientHandler.instance().getClient().thePlayer); } } diff --git a/src/minecraft/mekanism/common/BlockEnergyCube.java b/src/minecraft/mekanism/common/BlockEnergyCube.java index fe65fa200..4dcb98404 100644 --- a/src/minecraft/mekanism/common/BlockEnergyCube.java +++ b/src/minecraft/mekanism/common/BlockEnergyCube.java @@ -17,14 +17,17 @@ import mekanism.generators.common.BlockGenerator.GeneratorType; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.src.*; +import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; @@ -203,21 +206,6 @@ public class BlockEnergyCube extends BlockContainer } } } - - EntityItem entityItem = new EntityItem(world, x, y, z, new ItemStack(Mekanism.EnergyCube)); - - float motion = 0.05F; - entityItem.motionX = powerRand.nextGaussian() * motion; - entityItem.motionY = powerRand.nextGaussian() * motion + 0.2F; - entityItem.motionZ = powerRand.nextGaussian() * motion; - - IEnergyCube energyCube = (IEnergyCube)entityItem.getEntityItem().getItem(); - energyCube.setTier(entityItem.getEntityItem(), tileEntity.tier); - - IItemElectric electricItem = (IItemElectric)entityItem.getEntityItem().getItem(); - electricItem.setJoules(tileEntity.electricityStored, entityItem.getEntityItem()); - - world.spawnEntityInWorld(entityItem); } super.breakBlock(world, x, y, z, i1, i2); @@ -225,6 +213,12 @@ public class BlockEnergyCube extends BlockContainer @Override public int quantityDropped(Random random) + { + return 0; + } + + @Override + public int idDropped(int i, Random random, int j) { return 0; } @@ -245,28 +239,6 @@ public class BlockEnergyCube extends BlockContainer list.add(charged); }; } - - /*@Override - public ArrayList getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) - { - ArrayList ret = new ArrayList(); - - if(world.getBlockTileEntity(x, y, z) != null) - { - ItemStack itemstack = new ItemStack(Mekanism.EnergyCube); - TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z); - - IEnergyCube energyCube = (IEnergyCube)itemstack.getItem(); - energyCube.setTier(itemstack, tileEntity.tier); - - IItemElectric electricItem = (IItemElectric)itemstack.getItem(); - electricItem.setJoules(tileEntity.electricityStored, itemstack); - - ret.add(itemstack); - } - - return ret; - }*/ @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int i1, float f1, float f2, float f3) @@ -324,6 +296,32 @@ public class BlockEnergyCube extends BlockContainer return false; } + @Override + public boolean removeBlockByPlayer(World world, EntityPlayer player, int x, int y, int z) + { + if(!player.capabilities.isCreativeMode && !world.isRemote && canHarvestBlock(player, world.getBlockMetadata(x, y, z))) + { + TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z); + + float motion = 0.7F; + double motionX = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, new ItemStack(Mekanism.EnergyCube)); + + IEnergyCube energyCube = (IEnergyCube)entityItem.getEntityItem().getItem(); + energyCube.setTier(entityItem.getEntityItem(), tileEntity.tier); + + IItemElectric electricItem = (IItemElectric)entityItem.getEntityItem().getItem(); + electricItem.setJoules(tileEntity.electricityStored, entityItem.getEntityItem()); + + world.spawnEntityInWorld(entityItem); + } + + return world.setBlockWithNotify(x, y, z, 0); + } + @Override public String getTextureFile() { @@ -335,4 +333,19 @@ public class BlockEnergyCube extends BlockContainer { return new TileEntityEnergyCube(); } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) + { + TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z); + ItemStack itemStack = new ItemStack(Mekanism.EnergyCube); + + IEnergyCube energyCube = (IEnergyCube)itemStack.getItem(); + energyCube.setTier(itemStack, tileEntity.tier); + + IItemElectric electricItem = (IItemElectric)itemStack.getItem(); + electricItem.setJoules(tileEntity.electricityStored, itemStack); + + return itemStack; + } } diff --git a/src/minecraft/mekanism/common/BlockMachine.java b/src/minecraft/mekanism/common/BlockMachine.java index f70e7141d..654a97cb0 100644 --- a/src/minecraft/mekanism/common/BlockMachine.java +++ b/src/minecraft/mekanism/common/BlockMachine.java @@ -7,6 +7,8 @@ import universalelectricity.core.implement.IItemElectric; import universalelectricity.prefab.implement.IToolConfigurator; import mekanism.api.IActiveState; +import mekanism.api.IEnergyCube; +import mekanism.api.IUpgradeManagement; import mekanism.client.ClientProxy; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -19,6 +21,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; @@ -133,7 +136,7 @@ public class BlockMachine extends BlockContainer return 9; } else { - return 26; + return 2; } } else if(meta == 1) @@ -143,7 +146,7 @@ public class BlockMachine extends BlockContainer return 14; } else { - return 26; + return 2; } } else if(meta == 2) @@ -224,13 +227,17 @@ public class BlockMachine extends BlockContainer } else if(meta == 8) { - if(side == 3) - { - return 33; - } - else { - return 32; - } + if(side == 0 || side == 1) + { + return 18; + } + else if(side == 3) + { + return 16; + } + else { + return 19; + } } else if(meta == 9) { @@ -261,7 +268,7 @@ public class BlockMachine extends BlockContainer return MekanismUtils.isActive(world, x, y, z) ? 8 : 9; } else { - return 26; + return 2; } } else if(metadata == 1) @@ -271,7 +278,7 @@ public class BlockMachine extends BlockContainer return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+2 : 14; } else { - return 26; + return 2; } } else if(metadata == 2) @@ -358,13 +365,23 @@ public class BlockMachine extends BlockContainer } else if(metadata == 8) { - if(side == tileEntity.facing) - { - return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+7 : 33; - } - else { - return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+8 : 32; - } + if(side == 0 || side == 1) + { + return MekanismUtils.isActive(world, x, y, z) ? 20 : 18; + } + else { + if(side == tileEntity.facing) + { + return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+4 : 16; + } + else if(side == ForgeDirection.getOrientation(tileEntity.facing).getOpposite().ordinal()) + { + return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+5 : 17; + } + else { + return MekanismUtils.isActive(world, x, y, z) ? Mekanism.ANIMATED_TEXTURE_INDEX+6 : 19; + } + } } else if(metadata == 9) { @@ -541,28 +558,73 @@ public class BlockMachine extends BlockContainer return ClientProxy.RENDER_ID; } + @Override + public boolean removeBlockByPlayer(World world, EntityPlayer player, int x, int y, int z) + { + if(!player.capabilities.isCreativeMode && !world.isRemote && canHarvestBlock(player, world.getBlockMetadata(x, y, z))) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + + float motion = 0.7F; + double motionX = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, new ItemStack(Mekanism.MachineBlock, 1, world.getBlockMetadata(x, y, z))); + + IItemElectric electricItem = (IItemElectric)entityItem.getEntityItem().getItem(); + electricItem.setJoules(tileEntity.electricityStored, entityItem.getEntityItem()); + + IUpgradeManagement upgrade = (IUpgradeManagement)entityItem.getEntityItem().getItem(); + upgrade.setEnergyMultiplier(((IUpgradeManagement)tileEntity).getEnergyMultiplier(), entityItem.getEntityItem()); + upgrade.setSpeedMultiplier(((IUpgradeManagement)tileEntity).getSpeedMultiplier(), entityItem.getEntityItem()); + + world.spawnEntityInWorld(entityItem); + } + + return world.setBlockWithNotify(x, y, z, 0); + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + ItemStack itemStack = new ItemStack(Mekanism.MachineBlock, 1, world.getBlockMetadata(x, y, z)); + + IItemElectric electricItem = (IItemElectric)itemStack.getItem(); + electricItem.setJoules(tileEntity.electricityStored, itemStack); + + IUpgradeManagement upgrade = (IUpgradeManagement)itemStack.getItem(); + upgrade.setEnergyMultiplier(((IUpgradeManagement)tileEntity).getEnergyMultiplier(), itemStack); + upgrade.setSpeedMultiplier(((IUpgradeManagement)tileEntity).getSpeedMultiplier(), itemStack); + + return itemStack; + } + public static enum MachineType { - ENRICHMENT_CHAMBER(0, 3, TileEntityEnrichmentChamber.class, false), - PLATINUM_COMPRESSOR(1, 4, TileEntityPlatinumCompressor.class, false), - COMBINER(2, 5, TileEntityCombiner.class, false), - CRUSHER(3, 6, TileEntityCrusher.class, false), - THEORETICAL_ELEMENTIZER(4, 7, TileEntityTheoreticalElementizer.class, true), - BASIC_SMELTING_FACTORY(5, 11, TileEntitySmeltingFactory.class, false), - ADVANCED_SMELTING_FACTORY(6, 11, TileEntityAdvancedSmeltingFactory.class, false), - ELITE_SMELTING_FACTORY(7, 11, TileEntityEliteSmeltingFactory.class, false), - METALLURGIC_INFUSER(8, 12, TileEntityMetallurgicInfuser.class, false), - PURIFICATION_CHAMBER(9, 15, TileEntityPurificationChamber.class, false); + ENRICHMENT_CHAMBER(0, 3, 3200, TileEntityEnrichmentChamber.class, false), + PLATINUM_COMPRESSOR(1, 4, 3200, TileEntityPlatinumCompressor.class, false), + COMBINER(2, 5, 3200, TileEntityCombiner.class, false), + CRUSHER(3, 6, 3200, TileEntityCrusher.class, false), + THEORETICAL_ELEMENTIZER(4, 7, 4800, TileEntityTheoreticalElementizer.class, true), + BASIC_SMELTING_FACTORY(5, 11, 9600, TileEntitySmeltingFactory.class, false), + ADVANCED_SMELTING_FACTORY(6, 11, 16000, TileEntityAdvancedSmeltingFactory.class, false), + ELITE_SMELTING_FACTORY(7, 11, 22400, TileEntityEliteSmeltingFactory.class, false), + METALLURGIC_INFUSER(8, 12, 3200, TileEntityMetallurgicInfuser.class, false), + PURIFICATION_CHAMBER(9, 15, 12000, TileEntityPurificationChamber.class, false); public int meta; public int guiId; + public double baseEnergy; public Class tileEntityClass; public boolean hasModel; - private MachineType(int i, int j, Class tileClass, boolean model) + private MachineType(int i, int j, double k, Class tileClass, boolean model) { meta = i; guiId = j; + baseEnergy = k; tileEntityClass = tileClass; hasModel = model; } diff --git a/src/minecraft/mekanism/common/CommandMekanism.java b/src/minecraft/mekanism/common/CommandMekanism.java index 43b4dfe53..9553720b2 100644 --- a/src/minecraft/mekanism/common/CommandMekanism.java +++ b/src/minecraft/mekanism/common/CommandMekanism.java @@ -24,15 +24,9 @@ public class CommandMekanism extends CommandBase @Override public List getCommandAliases() { - return Arrays.asList(new String[] {"mekanism"}); + return Arrays.asList(new String[] {"mekanism", "mek"}); } - @Override - public boolean canCommandSenderUseCommand(ICommandSender sender) - { - return !MinecraftServer.getServer().isSinglePlayer() && super.canCommandSenderUseCommand(sender); - } - @Override public void processCommand(ICommandSender sender, String[] params) { diff --git a/src/minecraft/mekanism/common/CommonProxy.java b/src/minecraft/mekanism/common/CommonProxy.java index 666b7cd4d..8439d27fe 100644 --- a/src/minecraft/mekanism/common/CommonProxy.java +++ b/src/minecraft/mekanism/common/CommonProxy.java @@ -69,6 +69,7 @@ public class CommonProxy Mekanism.disableBCSteelCrafting = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "DisableBCSteelCrafting", false).getBoolean(true); Mekanism.disableBCBronzeCrafting = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "DisableBCBronzeCrafting", false).getBoolean(true); Mekanism.updateNotifications = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "UpdateNotifications", true).getBoolean(true); + Mekanism.controlCircuitOreDict = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "ControlCircuitOreDict", true).getBoolean(true); Mekanism.configuration.save(); } diff --git a/src/minecraft/mekanism/common/ContainerAdvancedElectricMachine.java b/src/minecraft/mekanism/common/ContainerAdvancedElectricMachine.java index 86f34c119..aac4fcd11 100644 --- a/src/minecraft/mekanism/common/ContainerAdvancedElectricMachine.java +++ b/src/minecraft/mekanism/common/ContainerAdvancedElectricMachine.java @@ -22,7 +22,7 @@ public class ContainerAdvancedElectricMachine extends Container addSlotToContainer(new Slot(tentity, 1, 56, 53)); addSlotToContainer(new SlotFurnace(inventory.player, tentity, 2, 116, 35)); addSlotToContainer(new SlotEnergy(tentity, 3, 31, 35)); - addSlotToContainer(new SlotMachineUpgrade(tentity, 4, 7, 7)); + addSlotToContainer(new SlotMachineUpgrade(tentity, 4, 180, 11)); int slotX; for (slotX = 0; slotX < 3; ++slotX) diff --git a/src/minecraft/mekanism/common/ContainerElectricMachine.java b/src/minecraft/mekanism/common/ContainerElectricMachine.java index a5b7cd95e..7927e19ca 100644 --- a/src/minecraft/mekanism/common/ContainerElectricMachine.java +++ b/src/minecraft/mekanism/common/ContainerElectricMachine.java @@ -20,7 +20,7 @@ public class ContainerElectricMachine extends Container addSlotToContainer(new Slot(tentity, 0, 56, 17)); addSlotToContainer(new SlotEnergy(tentity, 1, 56, 53)); addSlotToContainer(new SlotFurnace(inventory.player, tentity, 2, 116, 35)); - addSlotToContainer(new SlotMachineUpgrade(tentity, 3, 7, 7)); + addSlotToContainer(new SlotMachineUpgrade(tentity, 3, 180, 11)); int slotX; for (slotX = 0; slotX < 3; ++slotX) diff --git a/src/minecraft/mekanism/common/ContainerMetallurgicInfuser.java b/src/minecraft/mekanism/common/ContainerMetallurgicInfuser.java index ab8ac00a8..f3ccaba29 100644 --- a/src/minecraft/mekanism/common/ContainerMetallurgicInfuser.java +++ b/src/minecraft/mekanism/common/ContainerMetallurgicInfuser.java @@ -1,5 +1,7 @@ package mekanism.common; +import java.util.Map; + import ic2.api.IElectricItem; import mekanism.api.InfusionInput; import mekanism.api.InfusionOutput; @@ -21,7 +23,7 @@ public class ContainerMetallurgicInfuser extends Container public ContainerMetallurgicInfuser(InventoryPlayer inventory, TileEntityMetallurgicInfuser tentity) { tileEntity = tentity; - addSlotToContainer(new SlotMachineUpgrade(tentity, 0, 7, 7)); + addSlotToContainer(new SlotMachineUpgrade(tentity, 0, 180, 11)); addSlotToContainer(new Slot(tentity, 1, 17, 35)); addSlotToContainer(new Slot(tentity, 2, 51, 43)); addSlotToContainer(new SlotFurnace(inventory.player, tentity, 3, 109, 43)); @@ -70,7 +72,7 @@ public class ContainerMetallurgicInfuser extends Container if(slotID != 0 && slotID != 1 && slotID != 2 && slotID != 3 && slotID != 4) { - if(MekanismUtils.oreDictCheck(slotStack, "dustTin") && (tileEntity.type == InfusionType.TIN || tileEntity.type == InfusionType.NONE)) + if(MekanismUtils.getInfuseObject(slotStack) != null && (tileEntity.type == InfusionType.NONE || tileEntity.type == MekanismUtils.getInfuseObject(slotStack).type)) { if(!mergeItemStack(slotStack, 1, 2, false)) { @@ -84,13 +86,6 @@ public class ContainerMetallurgicInfuser extends Container return null; } } - else if(slotStack.isItemEqual(new ItemStack(Mekanism.CompressedCarbon)) && (tileEntity.type == InfusionType.COAL || tileEntity.type == InfusionType.NONE)) - { - if(!mergeItemStack(slotStack, 1, 2, false)) - { - return null; - } - } else if(slotStack.getItem() instanceof IItemElectric || slotStack.getItem() instanceof IElectricItem) { if(!mergeItemStack(slotStack, 4, 5, false)) @@ -98,7 +93,7 @@ public class ContainerMetallurgicInfuser extends Container return null; } } - else if(RecipeHandler.getOutput(InfusionInput.getInfusion(tileEntity.type, tileEntity.infuseStored, slotStack), false, Recipe.METALLURGIC_INFUSER.get()) != null) + else if(isInputItem(slotStack)) { if(!mergeItemStack(slotStack, 2, 3, false)) { @@ -154,4 +149,27 @@ public class ContainerMetallurgicInfuser extends Container return stack; } + + public boolean isInputItem(ItemStack itemStack) + { + if(tileEntity.type != InfusionType.NONE) + { + if(RecipeHandler.getOutput(InfusionInput.getInfusion(tileEntity.type, tileEntity.infuseStored, itemStack), false, Recipe.METALLURGIC_INFUSER.get()) != null) + { + return true; + } + } + else { + for(Object obj : Recipe.METALLURGIC_INFUSER.get().keySet()) + { + InfusionInput input = (InfusionInput)obj; + if(input.inputSlot.isItemEqual(itemStack)) + { + return true; + } + } + } + + return false; + } } diff --git a/src/minecraft/mekanism/common/ContainerSmeltingFactory.java b/src/minecraft/mekanism/common/ContainerSmeltingFactory.java index 8abf979f3..3d6347147 100644 --- a/src/minecraft/mekanism/common/ContainerSmeltingFactory.java +++ b/src/minecraft/mekanism/common/ContainerSmeltingFactory.java @@ -21,7 +21,7 @@ public class ContainerSmeltingFactory extends Container { tileEntity = tentity; - addSlotToContainer(new SlotMachineUpgrade(tentity, 0, 7, 7)); + addSlotToContainer(new SlotMachineUpgrade(tentity, 0, 180, 11)); addSlotToContainer(new SlotEnergy(tentity, 1, 7, 35)); if(tileEntity.tier == SmeltingFactoryTier.BASIC) diff --git a/src/minecraft/mekanism/common/ItemAtomicDisassembler.java b/src/minecraft/mekanism/common/ItemAtomicDisassembler.java index d818be406..40f4fbd10 100644 --- a/src/minecraft/mekanism/common/ItemAtomicDisassembler.java +++ b/src/minecraft/mekanism/common/ItemAtomicDisassembler.java @@ -5,7 +5,9 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -13,7 +15,7 @@ public class ItemAtomicDisassembler extends ItemEnergized { public ItemAtomicDisassembler(int id) { - super(id, 120000, 512, 1200); + super(id, 1000000, 120); } @Override @@ -27,7 +29,7 @@ public class ItemAtomicDisassembler extends ItemEnergized { super.addInformation(itemstack, entityplayer, list, flag); - list.add("Block efficiency: 40"); + list.add("Block efficiency: " + getEfficiency(itemstack)); } @Override @@ -35,7 +37,7 @@ public class ItemAtomicDisassembler extends ItemEnergized { if(getJoules(itemstack) > 0) { - hitEntity.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)player), 18); + hitEntity.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)player), 20); onUse(2000, itemstack); } else { @@ -46,7 +48,7 @@ public class ItemAtomicDisassembler extends ItemEnergized public float getStrVsBlock(ItemStack itemstack, Block block) { - return getJoules(itemstack) != 0 ? 40F : 1F; + return getJoules(itemstack) != 0 ? getEfficiency(itemstack) : 1F; } @Override @@ -54,10 +56,10 @@ public class ItemAtomicDisassembler extends ItemEnergized { if ((double)Block.blocksList[id].getBlockHardness(world, x, y, z) != 0.0D) { - onUse(120, itemstack); + onUse(getEfficiency(itemstack), itemstack); } else { - onUse(60, itemstack); + onUse(getEfficiency(itemstack)/2, itemstack); } return true; @@ -74,4 +76,69 @@ public class ItemAtomicDisassembler extends ItemEnergized { return false; } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) + { + if(!world.isRemote) + { + incrementEfficiency(itemstack); + entityplayer.addChatMessage(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Efficiency bumped to " + getEfficiency(itemstack)); + } + + return itemstack; + } + + public int getEfficiency(ItemStack itemStack) + { + if(itemStack.stackTagCompound == null) + { + return 5; + } + + int efficiency = 5; + + if(itemStack.stackTagCompound.getTag("efficiency") != null) + { + efficiency = itemStack.stackTagCompound.getInteger("efficiency"); + } + + return efficiency; + } + + public void incrementEfficiency(ItemStack itemStack) + { + if(itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + itemStack.stackTagCompound.setInteger("efficiency", 20); + } + + itemStack.stackTagCompound.setInteger("efficiency", getIncremented(getEfficiency(itemStack))); + } + + public int getIncremented(int previous) + { + if(previous == 5) + { + return 10; + } + else if(previous == 10) + { + return 25; + } + else if(previous == 25) + { + return 50; + } + else if(previous == 50) + { + return 100; + } + else if(previous == 100) + { + return 5; + } + return 0; + } } diff --git a/src/minecraft/mekanism/common/ItemBlockEnergyCube.java b/src/minecraft/mekanism/common/ItemBlockEnergyCube.java index cca192ff6..a7ffe2d80 100644 --- a/src/minecraft/mekanism/common/ItemBlockEnergyCube.java +++ b/src/minecraft/mekanism/common/ItemBlockEnergyCube.java @@ -79,7 +79,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IItemElectric, IEn electricityStored = itemStack.stackTagCompound.getDouble("electricity"); } - itemStack.setItemDamage((int)(getTier(itemStack).MAX_ELECTRICITY - electricityStored)/getTier(itemStack).DIVIDER); + itemStack.setItemDamage((int)(Math.abs(((electricityStored/getTier(itemStack).MAX_ELECTRICITY)*100)-100))); return electricityStored; } @@ -100,7 +100,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IItemElectric, IEn double electricityStored = Math.max(Math.min(wattHours, getMaxJoules(itemStack)), 0); itemStack.stackTagCompound.setDouble("electricity", electricityStored); - itemStack.setItemDamage((int)(getTier(itemStack).MAX_ELECTRICITY - electricityStored)/getTier(itemStack).DIVIDER); + itemStack.setItemDamage((int)(Math.abs(((electricityStored/getTier(itemStack).MAX_ELECTRICITY)*100)-100))); } } @@ -113,6 +113,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IItemElectric, IEn return getTier(itemstack).MAX_ELECTRICITY; } + return EnergyCubeTier.BASIC.MAX_ELECTRICITY; } diff --git a/src/minecraft/mekanism/common/ItemBlockMachine.java b/src/minecraft/mekanism/common/ItemBlockMachine.java index 52c7391f6..42faa1778 100644 --- a/src/minecraft/mekanism/common/ItemBlockMachine.java +++ b/src/minecraft/mekanism/common/ItemBlockMachine.java @@ -1,8 +1,21 @@ package mekanism.common; +import java.util.List; + +import ic2.api.ICustomElectricItem; +import universalelectricity.core.electricity.ElectricInfo; +import universalelectricity.core.electricity.ElectricInfo.ElectricUnit; +import universalelectricity.core.implement.IItemElectric; +import mekanism.api.IUpgradeManagement; +import mekanism.common.BlockMachine.MachineType; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.world.World; /** * Item class for handling multiple machine block IDs. @@ -19,7 +32,7 @@ import net.minecraft.item.ItemStack; * @author AidanBrady * */ -public class ItemBlockMachine extends ItemBlock +public class ItemBlockMachine extends ItemBlock implements IItemElectric, ICustomElectricItem, IUpgradeManagement { public Block metaBlock; @@ -28,6 +41,8 @@ public class ItemBlockMachine extends ItemBlock super(id); metaBlock = block; setHasSubtypes(true); + setNoRepair(); + setMaxStackSize(1); } @Override @@ -36,12 +51,6 @@ public class ItemBlockMachine extends ItemBlock return i; } - @Override - public int getIconFromDamage(int i) - { - return metaBlock.getBlockTextureFromSideAndMetadata(2, i); - } - @Override public String getItemNameIS(ItemStack itemstack) { @@ -84,4 +93,278 @@ public class ItemBlockMachine extends ItemBlock } return getItemName() + "." + name; } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) + { + double energy = getJoules(itemstack); + + list.add("Stored Energy: " + ElectricInfo.getDisplayShort(energy, ElectricUnit.JOULES)); + list.add("Energy: x" + (getEnergyMultiplier(itemstack)+1)); + list.add("Speed: x" + (getSpeedMultiplier(itemstack)+1)); + } + + @Override + public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag) + { + ItemBlockMachine item = ((ItemBlockMachine)itemstack.getItem()); + item.setJoules(item.getJoules(itemstack), itemstack); + } + + @Override + public double getJoules(Object... data) + { + if (data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack) data[0]; + + if (itemStack.stackTagCompound == null) + { + return 0; + } + + double electricityStored = 0; + + if (itemStack.stackTagCompound.getTag("electricity") instanceof NBTTagFloat) + { + electricityStored = itemStack.stackTagCompound.getFloat("electricity"); + } + else + { + electricityStored = itemStack.stackTagCompound.getDouble("electricity"); + } + + return electricityStored; + } + + return -1; + } + + @Override + public void setJoules(double wattHours, Object... data) + { + if (data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack)data[0]; + + if (itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + double electricityStored = Math.max(Math.min(wattHours, getMaxJoules(itemStack)), 0); + itemStack.stackTagCompound.setDouble("electricity", electricityStored); + } + } + + @Override + public double getMaxJoules(Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemstack = (ItemStack)data[0]; + + return MekanismUtils.getEnergy(getEnergyMultiplier(itemstack), MachineType.getFromMetadata(itemstack.getItemDamage()).baseEnergy); + } + + return 3200; + } + + @Override + public double getVoltage(Object... data) + { + return 120; + } + + @Override + public double onReceive(double amps, double voltage, ItemStack itemStack) + { + double rejectedElectricity = Math.max((getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1)) - getMaxJoules(itemStack), 0); + setJoules(getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1) - rejectedElectricity, itemStack); + return rejectedElectricity; + } + + @Override + public double onUse(double joulesNeeded, ItemStack itemStack) + { + double electricityToUse = Math.min(getJoules(itemStack), joulesNeeded); + setJoules(getJoules(itemStack) - electricityToUse, itemStack); + return electricityToUse; + } + + @Override + public boolean canReceiveElectricity() + { + return true; + } + + @Override + public boolean canProduceElectricity() + { + return false; + } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) + { + boolean place = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); + + if (place) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof IUpgradeManagement) + { + ((IUpgradeManagement)tileEntity).setEnergyMultiplier(getEnergyMultiplier(stack)); + ((IUpgradeManagement)tileEntity).setSpeedMultiplier(getSpeedMultiplier(stack)); + } + + tileEntity.electricityStored = getJoules(stack); + } + + return place; + } + + @Override + public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + double givenEnergy = amount*Mekanism.FROM_IC2; + double energyNeeded = getMaxJoules(itemStack)-getJoules(itemStack); + double energyToStore = Math.min(Math.min(amount, getMaxJoules(itemStack)*0.01), energyNeeded); + + if(!simulate) + { + setJoules(getJoules(itemStack) + energyToStore, itemStack); + } + return (int)(energyToStore*Mekanism.TO_IC2); + } + + @Override + public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + double energyWanted = amount*Mekanism.FROM_IC2; + double energyToGive = Math.min(Math.min(energyWanted, getMaxJoules(itemStack)*0.01), getJoules(itemStack)); + + if(!simulate) + { + setJoules(getJoules(itemStack) - energyToGive, itemStack); + } + return (int)(energyToGive*Mekanism.TO_IC2); + } + + @Override + public boolean canUse(ItemStack itemStack, int amount) + { + return getJoules(itemStack) >= amount*Mekanism.FROM_IC2; + } + + @Override + public boolean canShowChargeToolTip(ItemStack itemStack) + { + return false; + } + + @Override + public boolean canProvideEnergy() + { + return canProduceElectricity(); + } + + @Override + public int getChargedItemId() + { + return itemID; + } + + @Override + public int getEmptyItemId() + { + return itemID; + } + + @Override + public int getMaxCharge() + { + return 0; + } + + @Override + public int getTier() + { + return 3; + } + + @Override + public int getTransferLimit() + { + return (int)(getVoltage()*Mekanism.TO_IC2); + } + + @Override + public int getEnergyMultiplier(Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack) data[0]; + + if (itemStack.stackTagCompound == null) + { + return 0; + } + + return itemStack.stackTagCompound.getInteger("energyMultiplier"); + } + + return 0; + } + + @Override + public void setEnergyMultiplier(int multiplier, Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack)data[0]; + + if (itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.stackTagCompound.setInteger("energyMultiplier", multiplier); + } + } + + @Override + public int getSpeedMultiplier(Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack) data[0]; + + if (itemStack.stackTagCompound == null) + { + return 0; + } + + return itemStack.stackTagCompound.getInteger("speedMultiplier"); + } + + return 0; + } + + @Override + public void setSpeedMultiplier(int multiplier, Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack)data[0]; + + if (itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.stackTagCompound.setInteger("speedMultiplier", multiplier); + } + } } diff --git a/src/minecraft/mekanism/common/ItemConfigurator.java b/src/minecraft/mekanism/common/ItemConfigurator.java index f01273f86..47252a70f 100644 --- a/src/minecraft/mekanism/common/ItemConfigurator.java +++ b/src/minecraft/mekanism/common/ItemConfigurator.java @@ -13,7 +13,7 @@ public class ItemConfigurator extends ItemEnergized public ItemConfigurator(int id) { - super(id, 60000, 120, 600); + super(id, 60000, 120); } @Override diff --git a/src/minecraft/mekanism/common/ItemElectricBow.java b/src/minecraft/mekanism/common/ItemElectricBow.java index c47acec1d..8de5e27d9 100644 --- a/src/minecraft/mekanism/common/ItemElectricBow.java +++ b/src/minecraft/mekanism/common/ItemElectricBow.java @@ -16,7 +16,7 @@ public class ItemElectricBow extends ItemEnergized { public ItemElectricBow(int id) { - super(id, 120000, 120, 1200); + super(id, 120000, 120); } @Override diff --git a/src/minecraft/mekanism/common/ItemEnergized.java b/src/minecraft/mekanism/common/ItemEnergized.java index 40571d544..2d8aa7042 100644 --- a/src/minecraft/mekanism/common/ItemEnergized.java +++ b/src/minecraft/mekanism/common/ItemEnergized.java @@ -23,13 +23,9 @@ public class ItemEnergized extends ItemMekanism implements IItemElectric, ICusto /** How fast this item can transfer energy. */ public double VOLTAGE; - /** The number that, when the max amount of energy is divided by, will make it equal 100. */ - public int DIVIDER; - - public ItemEnergized(int id, double maxElectricity, double voltage, int divider) + public ItemEnergized(int id, double maxElectricity, double voltage) { super(id); - DIVIDER = divider; MAX_ELECTRICITY = maxElectricity; VOLTAGE = voltage; setMaxStackSize(1); @@ -100,7 +96,7 @@ public class ItemEnergized extends ItemMekanism implements IItemElectric, ICusto electricityStored = itemStack.stackTagCompound.getDouble("electricity"); } - itemStack.setItemDamage((int)(MAX_ELECTRICITY - electricityStored)/DIVIDER); + itemStack.setItemDamage((int)(Math.abs(((electricityStored/MAX_ELECTRICITY)*100)-100))); return electricityStored; } @@ -121,7 +117,7 @@ public class ItemEnergized extends ItemMekanism implements IItemElectric, ICusto double electricityStored = Math.max(Math.min(wattHours, getMaxJoules()), 0); itemStack.stackTagCompound.setDouble("electricity", electricityStored); - itemStack.setItemDamage((int)(MAX_ELECTRICITY - electricityStored)/DIVIDER); + itemStack.setItemDamage((int)(Math.abs(((electricityStored/MAX_ELECTRICITY)*100)-100))); } } diff --git a/src/minecraft/mekanism/common/ItemMachineUpgrade.java b/src/minecraft/mekanism/common/ItemMachineUpgrade.java index 456b09141..6d505141c 100644 --- a/src/minecraft/mekanism/common/ItemMachineUpgrade.java +++ b/src/minecraft/mekanism/common/ItemMachineUpgrade.java @@ -4,32 +4,19 @@ import java.util.List; import universalelectricity.prefab.modifier.IModifier; -import mekanism.api.IMachineUpgrade; import mekanism.api.TabProxy; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class ItemMachineUpgrade extends Item implements IMachineUpgrade, IModifier +public class ItemMachineUpgrade extends Item implements IModifier { - public int ENERGY_BOOST; - public int TICK_REDUCTION; - public ItemMachineUpgrade(int id, int energyBoost, int tickReduction) { super(id); - setMaxStackSize(1); - setCreativeTab(TabProxy.tabMekanism(CreativeTabs.tabMisc)); - ENERGY_BOOST = energyBoost; - TICK_REDUCTION = tickReduction; - } - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) - { - list.add("Energy Boost: " + ENERGY_BOOST); - list.add("Tick Reduction: " + TICK_REDUCTION); + setMaxStackSize(8); + setCreativeTab(Mekanism.tabMekanism); } @Override @@ -38,29 +25,15 @@ public class ItemMachineUpgrade extends Item implements IMachineUpgrade, IModifi return "/resources/mekanism/textures/items.png"; } - @Override - public int getEnergyBoost(ItemStack itemstack) - { - return ENERGY_BOOST; - } - - @Override - public int getTickReduction(ItemStack itemstack) - { - return TICK_REDUCTION; - } - @Override public String getName(ItemStack itemstack) { - return itemID == Mekanism.SpeedUpgrade.itemID ? "Speed" : - (itemID == Mekanism.EnergyUpgrade.itemID ? "Capacity" : "All"); + return itemID == Mekanism.SpeedUpgrade.itemID ? "Speed" : "Capacity"; } @Override public int getEffectiveness(ItemStack itemstack) { - return itemID == Mekanism.SpeedUpgrade.itemID ? 150 : - (itemID == Mekanism.EnergyUpgrade.itemID ? 1000 : 2500); + return itemID == Mekanism.SpeedUpgrade.itemID ? 150 : 1000; } } diff --git a/src/minecraft/mekanism/common/ItemPortableTeleporter.java b/src/minecraft/mekanism/common/ItemPortableTeleporter.java index 91c0b8203..8e06fa898 100644 --- a/src/minecraft/mekanism/common/ItemPortableTeleporter.java +++ b/src/minecraft/mekanism/common/ItemPortableTeleporter.java @@ -11,7 +11,7 @@ public class ItemPortableTeleporter extends ItemEnergized { public ItemPortableTeleporter(int id) { - super(id, 500000, 120, 5000); + super(id, 2000000, 120); } @Override @@ -40,7 +40,7 @@ public class ItemPortableTeleporter extends ItemEnergized int distance = (int)entity.getDistanceSq(coords.xCoord, coords.yCoord, coords.zCoord); - neededEnergy+=(distance*10); + neededEnergy+=(distance); return neededEnergy; } diff --git a/src/minecraft/mekanism/common/Mekanism.java b/src/minecraft/mekanism/common/Mekanism.java index ed7f0f593..7a5110205 100644 --- a/src/minecraft/mekanism/common/Mekanism.java +++ b/src/minecraft/mekanism/common/Mekanism.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; +import mekanism.api.InfuseObject; import mekanism.api.InfusionInput; import mekanism.api.InfusionOutput; import mekanism.api.InfusionType; @@ -29,11 +30,13 @@ import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.Mod.ServerStarting; import cpw.mods.fml.common.Mod.ServerStopping; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; @@ -49,7 +52,7 @@ import cpw.mods.fml.server.FMLServerHandler; * @author AidanBrady * */ -@Mod(modid = "Mekanism", name = "Mekanism", version = "5.2.3") +@Mod(modid = "Mekanism", name = "Mekanism", version = "5.3.0") @NetworkMod(channels = {"Mekanism"}, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class Mekanism { @@ -71,11 +74,14 @@ public class Mekanism public static Configuration configuration; /** Mekanism version number */ - public static Version versionNumber = new Version(5, 2, 3); + public static Version versionNumber = new Version(5, 3, 0); /** Map of Teleporter info. */ public static Map> teleporters = new HashMap>(); + /** Map of infuse objects */ + public static Map infusions = new HashMap(); + /** Mekanism creative tab */ public static CreativeTabMekanism tabMekanism = new CreativeTabMekanism(); @@ -147,6 +153,8 @@ public class Mekanism public static boolean disableBCBronzeCrafting = true; public static boolean disableBCSteelCrafting = true; public static boolean updateNotifications = true; + public static boolean enableSounds = true; + public static boolean controlCircuitOreDict = true; //Extra data public static float ObsidianTNTBlastRadius = 12.0F; @@ -201,6 +209,9 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(BasicBlock, 1, 5), new Object[] { "***", "***", "***", Character.valueOf('*'), "ingotSteel" })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(Ingot, 9, 4), new Object[] { + "*", Character.valueOf('*'), new ItemStack(BasicBlock, 1, 5) + })); //Extra CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(ObsidianTNT, 1), new Object[] { @@ -316,7 +327,6 @@ public class Mekanism FurnaceRecipes.smelting().addSmelting(Dust.itemID, 0, new ItemStack(Item.ingotIron), 1.0F); FurnaceRecipes.smelting().addSmelting(Dust.itemID, 1, new ItemStack(Item.ingotGold), 1.0F); FurnaceRecipes.smelting().addSmelting(Dust.itemID, 5, new ItemStack(Ingot, 1, 4), 1.0F); - GameRegistry.addSmelting(Item.coal.itemID, new ItemStack(CompressedCarbon), 1.0F); //Enrichment Chamber Recipes RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Dust, 1, 4), new ItemStack(Item.diamond)); @@ -324,7 +334,7 @@ public class Mekanism RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.obsidian), new ItemStack(Dust, 1, 3)); RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.oreIron), new ItemStack(Dust, 2, 0)); RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.oreGold), new ItemStack(Dust, 2, 1)); - RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Item.coal, 4), new ItemStack(CompressedCarbon, 8)); + RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Item.coal, 2), new ItemStack(CompressedCarbon)); RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.oreLapis), new ItemStack(Item.dyePowder, 12, 4)); RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.oreRedstone), new ItemStack(Item.redstone, 12)); RecipeHandler.addEnrichmentChamberRecipe(new ItemStack(Block.oreCoal), new ItemStack(Block.oreCoal)); @@ -347,6 +357,10 @@ public class Mekanism //Metallurgic Infuser Recipes RecipeHandler.addMetallurgicInfuserRecipe(InfusionInput.getInfusion(InfusionType.COAL, 10, new ItemStack(EnrichedIron)), new ItemStack(Dust, 1, 5)); + + infusions.put(new ItemStack(Item.coal, 1, 0), new InfuseObject(InfusionType.COAL, 10)); + infusions.put(new ItemStack(Item.coal, 1, 1), new InfuseObject(InfusionType.COAL, 20)); + infusions.put(new ItemStack(CompressedCarbon), new InfuseObject(InfusionType.COAL, 100)); } /** @@ -362,9 +376,9 @@ public class Mekanism { LanguageRegistry.addName(Stopwatch, "Steve's Stopwatch"); LanguageRegistry.addName(WeatherOrb, "Weather Orb"); - LanguageRegistry.addName(EnrichedAlloy, "Enriched Alloy"); } + LanguageRegistry.addName(EnrichedAlloy, "Enriched Alloy"); LanguageRegistry.addName(EnergyTablet, "Energy Tablet"); LanguageRegistry.addName(SpeedUpgrade, "Speed Upgrade"); LanguageRegistry.addName(EnergyUpgrade, "Energy Upgrade"); @@ -461,9 +475,9 @@ public class Mekanism { Stopwatch.setIconIndex(224); WeatherOrb.setIconIndex(226); - EnrichedAlloy.setIconIndex(227); } + EnrichedAlloy.setIconIndex(227); EnergyTablet.setIconIndex(228); SpeedUpgrade.setIconIndex(232); EnergyUpgrade.setIconIndex(231); @@ -494,7 +508,7 @@ public class Mekanism } Dust = new ItemDust(configuration.getItem("Dust", 11204).getInt()-256); Ingot = new ItemIngot(configuration.getItem("Ingot", 11205).getInt()-256); - EnergyTablet = (ItemEnergized) new ItemEnergized(configuration.getItem("EnergyTablet", 11206).getInt(), 250000, 800, 2500).setItemName("EnergyTablet"); + EnergyTablet = (ItemEnergized) new ItemEnergized(configuration.getItem("EnergyTablet", 11206).getInt(), 600000, 800).setItemName("EnergyTablet"); SpeedUpgrade = new ItemMachineUpgrade(configuration.getItem("SpeedUpgrade", 11207).getInt(), 0, 150).setItemName("SpeedUpgrade"); EnergyUpgrade = new ItemMachineUpgrade(configuration.getItem("EnergyUpgrade", 11208).getInt(), 1000, 0).setItemName("EnergyUpgrade"); UltimateUpgrade = new ItemMachineUpgrade(configuration.getItem("UltimateUpgrade", 11209).getInt(), 2500, 180).setItemName("UltimateUpgrade"); @@ -584,8 +598,13 @@ public class Mekanism OreDictionary.registerOre("orePlatinum", new ItemStack(OreBlock, 1, 0)); - OreDictionary.registerOre("basicCircuit", new ItemStack(ControlCircuit)); + if(controlCircuitOreDict) + { + OreDictionary.registerOre("basicCircuit", new ItemStack(ControlCircuit)); + } + OreDictionary.registerOre("compressedCarbon", new ItemStack(CompressedCarbon)); + OreDictionary.registerOre("enrichedAlloy", new ItemStack(EnrichedAlloy)); if(hooks.IC2Loaded) { @@ -728,6 +747,10 @@ public class Mekanism FurnaceRecipes.smelting().addSmelting(Dust.itemID, 7, OreDictionary.getOres("ingotTin").get(0), 1.0F); } catch(Exception e) {} + try { + FurnaceRecipes.smelting().addSmelting(Dust.itemID, 8, OreDictionary.getOres("ingotSilver").get(0), 1.0F); + } catch(Exception e) {} + try { for(ItemStack ore : OreDictionary.getOres("ingotCopper")) { @@ -742,6 +765,13 @@ public class Mekanism } } catch(Exception e) {} + try { + for(ItemStack ore : OreDictionary.getOres("ingotSilver")) + { + RecipeHandler.addCrusherRecipe(MekanismUtils.getStackWithSize(ore, 1), new ItemStack(Dust, 1, 8)); + } + } catch(Exception e) {} + for(ItemStack ore : OreDictionary.getOres("dustIron")) { RecipeHandler.addCombinerRecipe(MekanismUtils.getStackWithSize(ore, 8), new ItemStack(Block.oreIron)); @@ -781,6 +811,7 @@ public class Mekanism for(ItemStack ore : OreDictionary.getOres("dustTin")) { RecipeHandler.addCombinerRecipe(MekanismUtils.getStackWithSize(ore, 8), OreDictionary.getOres("oreTin").get(0)); + infusions.put(ore, new InfuseObject(InfusionType.TIN, 100)); } } catch(Exception e) {} @@ -830,13 +861,10 @@ public class Mekanism proxy.registerSpecialTileEntities(); } - /** - * Registers the server command handler. - */ - @SideOnly(Side.SERVER) - public void registerServerCommands() + @ServerStarting + public void serverStarting(FMLServerStartingEvent event) { - ServerCommandHandler.initialize(); + event.registerServerCommand(new CommandMekanism()); } @ServerStopping @@ -891,11 +919,6 @@ public class Mekanism //Register to recieve subscribed events MinecraftForge.EVENT_BUS.register(this); - - //Attempt to load server commands - try { - registerServerCommands(); - } catch(NoSuchMethodError e) {} //Load this module addItems(); diff --git a/src/minecraft/mekanism/common/MekanismHooks.java b/src/minecraft/mekanism/common/MekanismHooks.java index a65e05849..739038689 100644 --- a/src/minecraft/mekanism/common/MekanismHooks.java +++ b/src/minecraft/mekanism/common/MekanismHooks.java @@ -4,6 +4,7 @@ import universalelectricity.prefab.RecipeHelper; import cpw.mods.fml.common.Loader; import ic2.api.Ic2Recipes; import ic2.api.Items; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.src.*; @@ -36,9 +37,12 @@ public final class MekanismHooks public ItemStack IC2TinDust; public ItemStack IC2CoalDust; - public int BuildCraftFuelID = 3808; + public int BuildCraftFuelID = 19108; public ItemStack BuildCraftFuelBucket; + public int BuildCraftOilID = 1521; + public ItemStack BuildCraftOilBucket; + public int ForestryBiofuelID = 5013; public ItemStack ForestryBiofuelBucket; @@ -98,6 +102,8 @@ public final class MekanismHooks { BuildCraftFuelID = getBuildCraftItem("fuel").itemID; BuildCraftFuelBucket = getBuildCraftItem("bucketFuel"); + BuildCraftOilID = getBuildCraftItem("oilStill").itemID; + BuildCraftOilBucket = getBuildCraftItem("bucketOil"); System.out.println("[Mekanism] Hooked into BuildCraft successfully."); } if(ForestryLoaded) @@ -124,6 +130,10 @@ public final class MekanismHooks { return (ItemStack)ret; } + else if(ret instanceof Block) + { + return new ItemStack((Block)ret); + } else { throw new Exception("not instanceof ItemStack"); } @@ -144,6 +154,10 @@ public final class MekanismHooks { return new ItemStack((Item)ret); } + else if(ret instanceof Block) + { + return new ItemStack((Block)ret); + } else { throw new Exception("not instanceof ItemStack"); } @@ -164,6 +178,10 @@ public final class MekanismHooks { return new ItemStack((Item)ret); } + else if(ret instanceof Block) + { + return new ItemStack((Block)ret); + } else { throw new Exception("not instanceof ItemStack"); } @@ -184,6 +202,10 @@ public final class MekanismHooks { return new ItemStack((Item)ret); } + else if(ret instanceof Block) + { + return new ItemStack((Block)ret); + } else { throw new Exception("not instanceof ItemStack"); } diff --git a/src/minecraft/mekanism/common/MekanismUtils.java b/src/minecraft/mekanism/common/MekanismUtils.java index b2829162a..5332baae1 100644 --- a/src/minecraft/mekanism/common/MekanismUtils.java +++ b/src/minecraft/mekanism/common/MekanismUtils.java @@ -5,9 +5,11 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Map; import mekanism.api.IActiveState; import mekanism.api.IConfigurable; +import mekanism.api.InfuseObject; import mekanism.api.Tier.EnergyCubeTier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -41,7 +43,7 @@ public final class MekanismUtils { if(!Mekanism.latestVersionNumber.equals("Error retrieving data.")) { - if(!Mekanism.latestVersionNumber.contains(Mekanism.versionNumber.toString())) + if(Version.get(Mekanism.latestVersionNumber).comparedState(Mekanism.versionNumber) == 1) { entityplayer.addChatMessage(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " -------------"); entityplayer.addChatMessage(EnumColor.GREY + " Using outdated version " + EnumColor.DARK_GREY + Mekanism.versionNumber + EnumColor.GREY + " for Minecraft 1.4.6/7."); @@ -50,6 +52,10 @@ public final class MekanismUtils entityplayer.addChatMessage(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------"); return; } + else if(Version.get(Mekanism.latestVersionNumber).comparedState(Mekanism.versionNumber) == -1) + { + entityplayer.addChatMessage(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Using developer build " + EnumColor.DARK_GREY + Mekanism.versionNumber); + } } else { System.out.println("[Mekanism] Minecraft is in offline mode, could not check for updates."); @@ -343,4 +349,30 @@ public final class MekanismUtils config.getConfiguration()[side] = 0; } } + + public static InfuseObject getInfuseObject(ItemStack itemStack) + { + if(itemStack != null) + { + for(Map.Entry entry : Mekanism.infusions.entrySet()) + { + if(itemStack.isItemEqual(entry.getKey())) + { + return entry.getValue(); + } + } + } + + return null; + } + + public static int getTicks(int multiplier) + { + return 200/(multiplier+1); + } + + public static double getEnergy(int multiplier, double def) + { + return def*(multiplier+1); + } } diff --git a/src/minecraft/mekanism/common/RecipeHandler.java b/src/minecraft/mekanism/common/RecipeHandler.java index 114de5957..ccad53848 100644 --- a/src/minecraft/mekanism/common/RecipeHandler.java +++ b/src/minecraft/mekanism/common/RecipeHandler.java @@ -88,18 +88,21 @@ public final class RecipeHandler */ public static InfusionOutput getOutput(InfusionInput infusion, boolean stackDecrease, Map recipes) { - for(Map.Entry entry : recipes.entrySet()) + if(infusion != null && infusion.inputSlot != null) { - if(((InfusionInput)entry.getKey()).inputSlot.isItemEqual(infusion.inputSlot) && infusion.inputSlot.stackSize >= ((InfusionInput)entry.getKey()).inputSlot.stackSize) + for(Map.Entry entry : recipes.entrySet()) { - if(infusion.infusionType == ((InfusionInput)entry.getKey()).infusionType) + if(((InfusionInput)entry.getKey()).inputSlot.isItemEqual(infusion.inputSlot) && infusion.inputSlot.stackSize >= ((InfusionInput)entry.getKey()).inputSlot.stackSize) { - if(stackDecrease) + if(infusion.infusionType == ((InfusionInput)entry.getKey()).infusionType) { - infusion.inputSlot.stackSize -= ((InfusionInput)entry.getKey()).inputSlot.stackSize; + if(stackDecrease) + { + infusion.inputSlot.stackSize -= ((InfusionInput)entry.getKey()).inputSlot.stackSize; + } + + return ((InfusionOutput)entry.getValue()).copy(); } - - return ((InfusionOutput)entry.getValue()).copy(); } } } @@ -116,16 +119,19 @@ public final class RecipeHandler */ public static ItemStack getOutput(ItemStack itemstack, boolean stackDecrease, Map recipes) { - for(Map.Entry entry : recipes.entrySet()) + if(itemstack != null) { - if(((ItemStack)entry.getKey()).isItemEqual(itemstack) && itemstack.stackSize >= ((ItemStack)entry.getKey()).stackSize) + for(Map.Entry entry : recipes.entrySet()) { - if(stackDecrease) + if(((ItemStack)entry.getKey()).isItemEqual(itemstack) && itemstack.stackSize >= ((ItemStack)entry.getKey()).stackSize) { - itemstack.stackSize -= ((ItemStack)entry.getKey()).stackSize; + if(stackDecrease) + { + itemstack.stackSize -= ((ItemStack)entry.getKey()).stackSize; + } + + return ((ItemStack)entry.getValue()).copy(); } - - return ((ItemStack)entry.getValue()).copy(); } } diff --git a/src/minecraft/mekanism/common/ServerCommandHandler.java b/src/minecraft/mekanism/common/ServerCommandHandler.java deleted file mode 100644 index 262465e9e..000000000 --- a/src/minecraft/mekanism/common/ServerCommandHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package mekanism.common; - -import net.minecraft.command.ServerCommandManager; -import cpw.mods.fml.common.FMLCommonHandler; - -/** - * Handler to handle all incoming Mekanism commands. - * @author AidanBrady - * - */ -public class ServerCommandHandler -{ - public static boolean initialized = false; - - public static void initialize() - { - if(!initialized) - { - initialized = true; - - ServerCommandManager manager = (ServerCommandManager)FMLCommonHandler.instance().getMinecraftServerInstance().getCommandManager(); - manager.registerCommand(new CommandMekanism()); - } - } -} diff --git a/src/minecraft/mekanism/common/TileEntityAdvancedElectricMachine.java b/src/minecraft/mekanism/common/TileEntityAdvancedElectricMachine.java index a4a627e51..a99926ea1 100644 --- a/src/minecraft/mekanism/common/TileEntityAdvancedElectricMachine.java +++ b/src/minecraft/mekanism/common/TileEntityAdvancedElectricMachine.java @@ -2,7 +2,6 @@ package mekanism.common; import ic2.api.ElectricItem; import ic2.api.IElectricItem; -import mekanism.api.IMachineUpgrade; import mekanism.api.SideData; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -76,7 +75,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM if(inventory[3] != null) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { if(inventory[3].getItem() instanceof IItemElectric) { @@ -84,18 +83,8 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM if (electricItem.canProduceElectricity()) { - double joulesNeeded = currentMaxElectricity-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[3]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[3]), inventory[3]); - } - else if(electricItem.getVoltage(inventory[3]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[3]); - } - + double joulesNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[3])*0.005, joulesNeeded), inventory[3]); setJoules(electricityStored + joulesReceived); } } @@ -109,7 +98,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM } } } - if(inventory[3].itemID == Item.redstone.itemID && electricityStored+1000 <= currentMaxElectricity) + if(inventory[3].itemID == Item.redstone.itemID && electricityStored+1000 <= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { setJoules(electricityStored + 1000); --inventory[3].stackSize; @@ -121,41 +110,65 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM } } - handleSecondaryFuel(); + if(inventory[4] != null) + { + if(inventory[4].isItemEqual(new ItemStack(Mekanism.EnergyUpgrade)) && speedMultiplier < 8) + { + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + energyMultiplier+=1; + + inventory[4].stackSize--; + + if(inventory[4].stackSize == 0) + { + inventory[4] = null; + } + } + } + else if(inventory[4].isItemEqual(new ItemStack(Mekanism.SpeedUpgrade)) && speedMultiplier < 8) + { + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + speedMultiplier+=1; + + inventory[4].stackSize--; + + if(inventory[4].stackSize == 0) + { + inventory[4] = null; + } + } + } + else { + upgradeTicks = 0; + } + } + else { + upgradeTicks = 0; + } - if(inventory[4] != null && inventory[4].getItem() instanceof IMachineUpgrade) - { - int energyToAdd = 0; - int ticksToRemove = 0; - - if(currentMaxElectricity == MAX_ELECTRICITY) - { - energyToAdd = ((IMachineUpgrade)inventory[4].getItem()).getEnergyBoost(inventory[4]); - } - - if(currentTicksRequired == TICKS_REQUIRED) - { - ticksToRemove = ((IMachineUpgrade)inventory[4].getItem()).getTickReduction(inventory[4]); - } - - currentMaxElectricity += energyToAdd; - currentTicksRequired -= ticksToRemove; - } - else if(inventory[4] == null) - { - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; - } + handleSecondaryFuel(); if(electricityStored >= ENERGY_PER_TICK && secondaryEnergyStored >= SECONDARY_ENERGY_PER_TICK) { - if(canOperate() && (operatingTicks+1) < currentTicksRequired && secondaryEnergyStored >= SECONDARY_ENERGY_PER_TICK) + if(canOperate() && (operatingTicks+1) < MekanismUtils.getTicks(speedMultiplier) && secondaryEnergyStored >= SECONDARY_ENERGY_PER_TICK) { ++operatingTicks; secondaryEnergyStored -= SECONDARY_ENERGY_PER_TICK; electricityStored -= ENERGY_PER_TICK; } - else if((operatingTicks+1) >= currentTicksRequired) + else if((operatingTicks+1) >= MekanismUtils.getTicks(speedMultiplier)) { if(!worldObj.isRemote) { @@ -269,8 +282,8 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM operatingTicks = dataStream.readInt(); electricityStored = dataStream.readDouble(); secondaryEnergyStored = dataStream.readInt(); - currentMaxElectricity = dataStream.readDouble(); - currentTicksRequired = dataStream.readInt(); + energyMultiplier = dataStream.readInt(); + speedMultiplier = dataStream.readInt(); worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord); worldObj.updateAllLightTypes(xCoord, yCoord, zCoord); } catch (Exception e) @@ -283,13 +296,13 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM @Override public void sendPacket() { - PacketHandler.sendTileEntityPacketToClients(this, 0, facing, isActive, operatingTicks, electricityStored, secondaryEnergyStored, currentMaxElectricity, currentTicksRequired); + PacketHandler.sendTileEntityPacketToClients(this, 0, facing, isActive, operatingTicks, electricityStored, secondaryEnergyStored, energyMultiplier, speedMultiplier); } @Override public void sendPacketWithRange() { - PacketHandler.sendTileEntityPacketToClients(this, 50, facing, isActive, operatingTicks, electricityStored, secondaryEnergyStored, currentMaxElectricity, currentTicksRequired); + PacketHandler.sendTileEntityPacketToClients(this, 50, facing, isActive, operatingTicks, electricityStored, secondaryEnergyStored, energyMultiplier, speedMultiplier); } @Override @@ -351,9 +364,9 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM case 5: return new Object[] {canOperate()}; case 6: - return new Object[] {currentMaxElectricity}; + return new Object[] {MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)}; case 7: - return new Object[] {(currentMaxElectricity-electricityStored)}; + return new Object[] {(MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)}; default: System.err.println("[Mekanism] Attempted to call unknown method with computer ID " + computer.getID()); return new Object[] {"Unknown command."}; diff --git a/src/minecraft/mekanism/common/TileEntityBasicMachine.java b/src/minecraft/mekanism/common/TileEntityBasicMachine.java index 8280f6108..208090404 100644 --- a/src/minecraft/mekanism/common/TileEntityBasicMachine.java +++ b/src/minecraft/mekanism/common/TileEntityBasicMachine.java @@ -9,8 +9,10 @@ import java.util.EnumSet; import mekanism.api.IActiveState; import mekanism.api.IConfigurable; import mekanism.api.IElectricMachine; +import mekanism.api.IUpgradeManagement; import mekanism.api.SideData; import mekanism.client.Sound; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -27,7 +29,7 @@ import cpw.mods.fml.relauncher.SideOnly; import dan200.computer.api.IComputerAccess; import dan200.computer.api.IPeripheral; -public abstract class TileEntityBasicMachine extends TileEntityElectricBlock implements IElectricMachine, IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable +public abstract class TileEntityBasicMachine extends TileEntityElectricBlock implements IElectricMachine, IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable, IUpgradeManagement { /** The Sound instance for this machine. */ @SideOnly(Side.CLIENT) @@ -49,11 +51,13 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp /** Ticks required to operate -- or smelt an item. */ public int TICKS_REQUIRED; - /** The current tick requirement for this machine. */ - public int currentTicksRequired; + public int energyMultiplier = 0; - /** The current energy capacity for this machine. */ - public double currentMaxElectricity; + public int speedMultiplier = 0; + + public int UPGRADE_TICKS_REQUIRED = 40; + + public int upgradeTicks; /** Whether or not this block is in it's active state. */ public boolean isActive; @@ -80,9 +84,8 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp { super(name, maxEnergy); ElectricityConnections.registerConnector(this, EnumSet.allOf(ForgeDirection.class)); - currentMaxElectricity = MAX_ELECTRICITY; ENERGY_PER_TICK = perTick; - TICKS_REQUIRED = currentTicksRequired = ticksRequired; + TICKS_REQUIRED = ticksRequired; soundURL = soundPath; guiTexturePath = path; isActive = false; @@ -95,7 +98,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp if(powerProvider != null) { - int received = (int)(powerProvider.useEnergy(0, (float)((currentMaxElectricity-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); + int received = (int)(powerProvider.useEnergy(0, (float)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); setJoules(electricityStored + received); } @@ -114,13 +117,13 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp { if(tileEntity instanceof IConductor) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { - double electricityNeeded = currentMaxElectricity - electricityStored; + double electricityNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored; ((IConductor)tileEntity).getNetwork().startRequesting(this, electricityNeeded, electricityNeeded >= getVoltage() ? getVoltage() : electricityNeeded); setJoules(electricityStored + ((IConductor)tileEntity).getNetwork().consumeElectricity(this).getWatts()); } - else if(electricityStored >= currentMaxElectricity) + else if(electricityStored >= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { ((IConductor)tileEntity).getNetwork().stopRequesting(this); } @@ -132,9 +135,12 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp if(worldObj.isRemote) { try { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - handleSound(); + synchronized(Mekanism.audioHandler.sounds) + { + handleSound(); + } } } catch(NoSuchMethodError e) {} } @@ -143,25 +149,28 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp @SideOnly(Side.CLIENT) public void handleSound() { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - if(audio == null && worldObj != null && worldObj.isRemote) + synchronized(Mekanism.audioHandler.sounds) { - if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + if(audio == null && worldObj != null && worldObj.isRemote) { - audio = Mekanism.audioHandler.getSound(soundURL, worldObj, xCoord, yCoord, zCoord); + if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + { + audio = Mekanism.audioHandler.getSound(soundURL, worldObj, xCoord, yCoord, zCoord); + } } - } - - if(worldObj != null && worldObj.isRemote && audio != null) - { - if(!audio.isPlaying && isActive == true) + + if(worldObj != null && worldObj.isRemote && audio != null) { - audio.play(); - } - else if(audio.isPlaying && isActive == false) - { - audio.stop(); + if(!audio.isPlaying && isActive == true) + { + audio.play(); + } + else if(audio.isPlaying && isActive == false) + { + audio.stopLoop(); + } } } } @@ -174,8 +183,9 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp operatingTicks = nbtTags.getInteger("operatingTicks"); isActive = nbtTags.getBoolean("isActive"); - currentTicksRequired = nbtTags.getInteger("currentTicksRequired"); - currentMaxElectricity = nbtTags.getDouble("currentMaxElectricity"); + speedMultiplier = nbtTags.getInteger("speedMultiplier"); + energyMultiplier = nbtTags.getInteger("energyMultiplier"); + upgradeTicks = nbtTags.getInteger("upgradeTicks"); if(nbtTags.hasKey("sideDataStored")) { @@ -193,8 +203,9 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp nbtTags.setInteger("operatingTicks", operatingTicks); nbtTags.setBoolean("isActive", isActive); - nbtTags.setInteger("currentTicksRequired", currentTicksRequired); - nbtTags.setDouble("currentMaxElectricity", currentMaxElectricity); + nbtTags.setInteger("speedMultiplier", speedMultiplier); + nbtTags.setInteger("energyMultiplier", energyMultiplier); + nbtTags.setInteger("upgradeTicks", upgradeTicks); nbtTags.setBoolean("sideDataStored", true); @@ -229,7 +240,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp @Override public int demandsEnergy() { - return (int)((currentMaxElectricity - electricityStored)*Mekanism.TO_IC2); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored)*Mekanism.TO_IC2); } @Override @@ -237,7 +248,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp { double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; - double neededEnergy = currentMaxElectricity-electricityStored; + double neededEnergy = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; if(givenEnergy <= neededEnergy) { @@ -277,7 +288,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp */ public int getScaledEnergyLevel(int i) { - return (int)(electricityStored*i / currentMaxElectricity); + return (int)(electricityStored*i / MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)); } /** @@ -287,13 +298,18 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp */ public int getScaledProgress(int i) { - return operatingTicks*i / currentTicksRequired; + return operatingTicks*i / MekanismUtils.getTicks(speedMultiplier); + } + + public int getScaledUpgradeProgress(int i) + { + return upgradeTicks*i / UPGRADE_TICKS_REQUIRED; } @Override public double getMaxJoules(Object... data) { - return currentMaxElectricity; + return MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY); } @Override @@ -360,7 +376,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp @Override public int powerRequest() { - return (int)(currentMaxElectricity-electricityStored); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC); } @Override @@ -380,4 +396,28 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp { return facing; } + + @Override + public int getEnergyMultiplier(Object... data) + { + return energyMultiplier; + } + + @Override + public void setEnergyMultiplier(int multiplier, Object... data) + { + energyMultiplier = multiplier; + } + + @Override + public int getSpeedMultiplier(Object... data) + { + return speedMultiplier; + } + + @Override + public void setSpeedMultiplier(int multiplier, Object... data) + { + speedMultiplier = multiplier; + } } diff --git a/src/minecraft/mekanism/common/TileEntityElectricBlock.java b/src/minecraft/mekanism/common/TileEntityElectricBlock.java index eafcba0b3..865a90766 100644 --- a/src/minecraft/mekanism/common/TileEntityElectricBlock.java +++ b/src/minecraft/mekanism/common/TileEntityElectricBlock.java @@ -117,7 +117,7 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i @Override public int powerRequest() { - return (int)(MAX_ELECTRICITY-electricityStored); + return (int)((MAX_ELECTRICITY-electricityStored)*Mekanism.TO_BC); } @Override diff --git a/src/minecraft/mekanism/common/TileEntityElectricMachine.java b/src/minecraft/mekanism/common/TileEntityElectricMachine.java index a62f9df17..638b4d5c1 100644 --- a/src/minecraft/mekanism/common/TileEntityElectricMachine.java +++ b/src/minecraft/mekanism/common/TileEntityElectricMachine.java @@ -1,9 +1,7 @@ - package mekanism.common; import ic2.api.ElectricItem; import ic2.api.IElectricItem; -import mekanism.api.IMachineUpgrade; import mekanism.api.SideData; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -52,7 +50,7 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine if(inventory[1] != null) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { if(inventory[1].getItem() instanceof IItemElectric) { @@ -60,18 +58,8 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine if (electricItem.canProduceElectricity()) { - double joulesNeeded = currentMaxElectricity-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[1]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[1]), inventory[1]); - } - else if(electricItem.getVoltage(inventory[1]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[1]); - } - + double joulesNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, joulesNeeded), inventory[1]); setJoules(electricityStored + joulesReceived); } } @@ -85,7 +73,7 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine } } } - if(inventory[1].itemID == Item.redstone.itemID && electricityStored+1000 <= currentMaxElectricity) + if(inventory[1].itemID == Item.redstone.itemID && electricityStored+1000 <= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { setJoules(electricityStored + 1000); --inventory[1].stackSize; @@ -97,38 +85,62 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine } } - if(inventory[3] != null && inventory[3].getItem() instanceof IMachineUpgrade) + if(inventory[3] != null) { - int energyToAdd = 0; - int ticksToRemove = 0; - - if(currentMaxElectricity == MAX_ELECTRICITY) + if(inventory[3].isItemEqual(new ItemStack(Mekanism.EnergyUpgrade)) && speedMultiplier < 8) { - energyToAdd = ((IMachineUpgrade)inventory[3].getItem()).getEnergyBoost(inventory[3]); + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + energyMultiplier+=1; + + inventory[3].stackSize--; + + if(inventory[3].stackSize == 0) + { + inventory[3] = null; + } + } } - - if(currentTicksRequired == TICKS_REQUIRED) + else if(inventory[3].isItemEqual(new ItemStack(Mekanism.SpeedUpgrade)) && speedMultiplier < 8) { - ticksToRemove = ((IMachineUpgrade)inventory[3].getItem()).getTickReduction(inventory[3]); + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + speedMultiplier+=1; + + inventory[3].stackSize--; + + if(inventory[3].stackSize == 0) + { + inventory[3] = null; + } + } + } + else { + upgradeTicks = 0; } - - currentMaxElectricity += energyToAdd; - currentTicksRequired -= ticksToRemove; } - else if(inventory[3] == null) - { - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; + else { + upgradeTicks = 0; } if(electricityStored >= ENERGY_PER_TICK) { - if(canOperate() && (operatingTicks+1) < currentTicksRequired) + if(canOperate() && (operatingTicks+1) < MekanismUtils.getTicks(speedMultiplier)) { operatingTicks++; electricityStored -= ENERGY_PER_TICK; } - else if(canOperate() && (operatingTicks+1) >= currentTicksRequired) + else if(canOperate() && (operatingTicks+1) >= MekanismUtils.getTicks(speedMultiplier)) { if(!worldObj.isRemote) { @@ -214,8 +226,9 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine isActive = dataStream.readBoolean(); operatingTicks = dataStream.readInt(); electricityStored = dataStream.readDouble(); - currentMaxElectricity = dataStream.readDouble(); - currentTicksRequired = dataStream.readInt(); + energyMultiplier = dataStream.readInt(); + speedMultiplier = dataStream.readInt(); + upgradeTicks = dataStream.readInt(); worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord); worldObj.updateAllLightTypes(xCoord, yCoord, zCoord); } catch (Exception e) @@ -228,13 +241,13 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine @Override public void sendPacket() { - PacketHandler.sendTileEntityPacketToClients(this, 0, facing, isActive, operatingTicks, electricityStored, currentMaxElectricity, currentTicksRequired); + PacketHandler.sendTileEntityPacketToClients(this, 0, facing, isActive, operatingTicks, electricityStored, energyMultiplier, speedMultiplier, upgradeTicks); } @Override public void sendPacketWithRange() { - PacketHandler.sendTileEntityPacketToClients(this, 50, facing, isActive, operatingTicks, electricityStored, currentMaxElectricity, currentTicksRequired); + PacketHandler.sendTileEntityPacketToClients(this, 50, facing, isActive, operatingTicks, electricityStored, energyMultiplier, speedMultiplier, upgradeTicks); } @Override @@ -259,9 +272,9 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine case 4: return new Object[] {canOperate()}; case 5: - return new Object[] {currentMaxElectricity}; + return new Object[] {MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)}; case 6: - return new Object[] {(currentMaxElectricity-electricityStored)}; + return new Object[] {(MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)}; default: System.err.println("[Mekanism] Attempted to call unknown method with computer ID " + computer.getID()); return new Object[] {"Unknown command."}; diff --git a/src/minecraft/mekanism/common/TileEntityEnergyCube.java b/src/minecraft/mekanism/common/TileEntityEnergyCube.java index 2e43cf3ff..0ac8f0213 100644 --- a/src/minecraft/mekanism/common/TileEntityEnergyCube.java +++ b/src/minecraft/mekanism/common/TileEntityEnergyCube.java @@ -9,6 +9,7 @@ import ic2.api.energy.event.EnergyTileSourceEvent; import ic2.api.energy.tile.IEnergySink; import ic2.api.energy.tile.IEnergySource; +import java.util.ArrayList; import java.util.EnumSet; import mekanism.api.IEnergyCube; @@ -103,9 +104,13 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn if(inventory[0].getItem() instanceof IItemElectric) { IItemElectric electricItem = (IItemElectric)inventory[0].getItem(); - double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[0])*0.005, electricityStored), getVoltage()), electricityStored); - double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[0]); - setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + + if(electricItem.canReceiveElectricity()) + { + double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[0])*0.005, electricityStored), getVoltage()), electricityStored); + double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[0]); + setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + } } else if(inventory[0].getItem() instanceof IElectricItem) { @@ -123,17 +128,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn if (electricItem.canProduceElectricity()) { double joulesNeeded = tier.MAX_ELECTRICITY-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[1]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[1]), inventory[1]); - } - else if(electricItem.getVoltage(inventory[1]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[1]); - } - + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, joulesNeeded), inventory[1]); setJoules(electricityStored + joulesReceived); } } @@ -188,13 +183,27 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn if(!worldObj.isRemote) { ForgeDirection outputDirection = ForgeDirection.getOrientation(facing); + ArrayList inputNetworks = new ArrayList(); + + for(ForgeDirection direction : ForgeDirection.values()) + { + if(direction != outputDirection && direction != ForgeDirection.UNKNOWN) + { + ElectricityNetwork network = ElectricityNetwork.getNetworkFromTileEntity(Vector3.getTileEntityFromSide(worldObj, new Vector3(this), direction), direction); + if(network != null) + { + inputNetworks.add(network); + } + } + } + TileEntity outputTile = Vector3.getTileEntityFromSide(worldObj, new Vector3(this), outputDirection); ElectricityNetwork outputNetwork = ElectricityNetwork.getNetworkFromTileEntity(outputTile, outputDirection); - if(outputNetwork != null) + if(outputNetwork != null && !inputNetworks.contains(outputNetwork)) { - double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), getJoules()); + double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), Math.min(getJoules(), 10000)); if(getJoules() > 0 && outputWatts > 0 && getJoules()-outputWatts >= 0) { diff --git a/src/minecraft/mekanism/common/TileEntityMetallurgicInfuser.java b/src/minecraft/mekanism/common/TileEntityMetallurgicInfuser.java index 302ccf702..2c87918bc 100644 --- a/src/minecraft/mekanism/common/TileEntityMetallurgicInfuser.java +++ b/src/minecraft/mekanism/common/TileEntityMetallurgicInfuser.java @@ -12,7 +12,8 @@ import java.util.Map; import mekanism.api.IActiveState; import mekanism.api.IConfigurable; -import mekanism.api.IMachineUpgrade; +import mekanism.api.IUpgradeManagement; +import mekanism.api.InfuseObject; import mekanism.api.InfusionInput; import mekanism.api.InfusionOutput; import mekanism.api.InfusionType; @@ -44,7 +45,7 @@ import cpw.mods.fml.relauncher.SideOnly; import dan200.computer.api.IComputerAccess; import dan200.computer.api.IPeripheral; -public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implements IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable +public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implements IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable, IUpgradeManagement { /** The Sound instance for this machine. */ @SideOnly(Side.CLIENT) @@ -66,11 +67,13 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem /** How many ticks it takes to run an operation. */ public int TICKS_REQUIRED = 200; - /** The current cap of electricity this machine can hold. */ - public double currentMaxElectricity; + public int energyMultiplier; - /** The current amount of ticks it takes this machine to run an operation. */ - public int currentTicksRequired; + public int speedMultiplier; + + public int UPGRADE_TICKS_REQUIRED = 40; + + public int upgradeTicks; /** The amount of infuse this machine has stored. */ public int infuseStored; @@ -99,9 +102,6 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem inventory = new ItemStack[5]; - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; - ElectricityConnections.registerConnector(this, EnumSet.allOf(ForgeDirection.class)); } @@ -113,16 +113,19 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem if(worldObj.isRemote) { try { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - handleSound(); + synchronized(Mekanism.audioHandler.sounds) + { + handleSound(); + } } } catch(NoSuchMethodError e) {} } if(powerProvider != null) { - int received = (int)(powerProvider.useEnergy(0, (float)((currentMaxElectricity-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); + int received = (int)(powerProvider.useEnergy(0, (float)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); setJoules(electricityStored + received); } @@ -137,13 +140,13 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem { if(tileEntity instanceof IConductor) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { - double electricityNeeded = currentMaxElectricity - electricityStored; + double electricityNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored; ((IConductor)tileEntity).getNetwork().startRequesting(this, electricityNeeded, electricityNeeded >= getVoltage() ? getVoltage() : electricityNeeded); setJoules(electricityStored + ((IConductor)tileEntity).getNetwork().consumeElectricity(this).getWatts()); } - else if(electricityStored >= currentMaxElectricity) + else if(electricityStored >= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { ((IConductor)tileEntity).getNetwork().stopRequesting(this); } @@ -154,7 +157,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem if(inventory[4] != null) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { if(inventory[4].getItem() instanceof IItemElectric) { @@ -162,18 +165,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem if (electricItem.canProduceElectricity()) { - double joulesNeeded = currentMaxElectricity-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[4]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[4]), inventory[4]); - } - else if(electricItem.getVoltage(inventory[4]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[4]); - } - + double joulesNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[4])*0.005, joulesNeeded), inventory[4]); setJoules(electricityStored + joulesReceived); } } @@ -187,7 +180,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem } } } - if(inventory[4].itemID == Item.redstone.itemID && electricityStored+1000 <= currentMaxElectricity) + if(inventory[4].itemID == Item.redstone.itemID && electricityStored+1000 <= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { setJoules(electricityStored + 1000); --inventory[4].stackSize; @@ -199,68 +192,83 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem } } - if(inventory[0] != null && inventory[0].getItem() instanceof IMachineUpgrade) + if(inventory[0] != null) { - int energyToAdd = 0; - int ticksToRemove = 0; - - if(currentMaxElectricity == MAX_ELECTRICITY) + if(inventory[0].isItemEqual(new ItemStack(Mekanism.EnergyUpgrade)) && speedMultiplier < 8) { - energyToAdd = ((IMachineUpgrade)inventory[0].getItem()).getEnergyBoost(inventory[0]); - } - - if(currentTicksRequired == TICKS_REQUIRED) - { - ticksToRemove = ((IMachineUpgrade)inventory[0].getItem()).getTickReduction(inventory[0]); - } - - currentMaxElectricity += energyToAdd; - currentTicksRequired -= ticksToRemove; - } - else if(inventory[0] == null) - { - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; - } - - if(inventory[1] != null && infuseStored+100 <= MAX_INFUSE) - { - if(inventory[1].isItemEqual(new ItemStack(Mekanism.CompressedCarbon))) - { - if(type == InfusionType.NONE || type == InfusionType.COAL) + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) { - infuseStored += 100; - inventory[1].stackSize--; - type = InfusionType.COAL; + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + energyMultiplier+=1; - if (inventory[1].stackSize <= 0) - { - inventory[1] = null; - } + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } } } - else if(MekanismUtils.oreDictCheck(inventory[1], "dustTin")) + else if(inventory[0].isItemEqual(new ItemStack(Mekanism.SpeedUpgrade)) && speedMultiplier < 8) { - if(type == InfusionType.NONE || type == InfusionType.TIN) + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) { - infuseStored += 100; - inventory[1].stackSize--; - type = InfusionType.TIN; + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + speedMultiplier+=1; - if (inventory[1].stackSize <= 0) - { - inventory[1] = null; - } + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } + } + else { + upgradeTicks = 0; + } + } + else { + upgradeTicks = 0; + } + + if(inventory[1] != null) + { + if(MekanismUtils.getInfuseObject(inventory[1]) != null) + { + InfuseObject infuse = MekanismUtils.getInfuseObject(inventory[1]); + + if(type == InfusionType.NONE || type == infuse.type) + { + if(infuseStored+infuse.stored <= MAX_INFUSE) + { + infuseStored+=infuse.stored; + type = infuse.type; + inventory[1].stackSize--; + + if (inventory[1].stackSize <= 0) + { + inventory[1] = null; + } + } } } } - if(canOperate() && (operatingTicks+1) < currentTicksRequired) + if(canOperate() && (operatingTicks+1) < MekanismUtils.getTicks(speedMultiplier)) { ++operatingTicks; electricityStored -= ENERGY_PER_TICK; } - else if(canOperate() && (operatingTicks+1) >= currentTicksRequired) + else if(canOperate() && (operatingTicks+1) >= MekanismUtils.getTicks(speedMultiplier)) { if(!worldObj.isRemote) { @@ -300,25 +308,28 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem @SideOnly(Side.CLIENT) public void handleSound() { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - if(audio == null && worldObj != null && worldObj.isRemote) + synchronized(Mekanism.audioHandler.sounds) { - if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + if(audio == null && worldObj != null && worldObj.isRemote) { - audio = Mekanism.audioHandler.getSound("MetallurgicInfuser.ogg", worldObj, xCoord, yCoord, zCoord); + if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + { + audio = Mekanism.audioHandler.getSound("MetallurgicInfuser.ogg", worldObj, xCoord, yCoord, zCoord); + } } - } - - if(worldObj != null && worldObj.isRemote && audio != null) - { - if(!audio.isPlaying && isActive == true) + + if(worldObj != null && worldObj.isRemote && audio != null) { - audio.play(); - } - else if(audio.isPlaying && isActive == false) - { - audio.stop(); + if(!audio.isPlaying && isActive == true) + { + audio.play(); + } + else if(audio.isPlaying && isActive == false) + { + audio.stopLoop(); + } } } } @@ -395,12 +406,17 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem public int getScaledEnergyLevel(int i) { - return (int)(electricityStored*i / currentMaxElectricity); + return (int)(electricityStored*i / MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)); } public int getScaledProgress(int i) { - return operatingTicks*i / currentTicksRequired; + return operatingTicks*i / MekanismUtils.getTicks(speedMultiplier); + } + + public int getScaledUpgradeProgress(int i) + { + return upgradeTicks*i / UPGRADE_TICKS_REQUIRED; } @Override @@ -419,8 +435,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem { super.readFromNBT(nbtTags); - currentTicksRequired = nbtTags.getInteger("currentTicksRequired"); - currentMaxElectricity = nbtTags.getDouble("currentMaxElectricity"); + speedMultiplier = nbtTags.getInteger("speedMultiplier"); + energyMultiplier = nbtTags.getInteger("energyMultiplier"); isActive = nbtTags.getBoolean("isActive"); operatingTicks = nbtTags.getInteger("operatingTicks"); infuseStored = nbtTags.getInteger("infuseStored"); @@ -452,8 +468,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem { super.writeToNBT(nbtTags); - nbtTags.setInteger("currentTicksRequired", currentTicksRequired); - nbtTags.setDouble("currentMaxElectricity", currentMaxElectricity); + nbtTags.setInteger("speedMultiplier", speedMultiplier); + nbtTags.setInteger("energyMultiplier", energyMultiplier); nbtTags.setBoolean("isActive", isActive); nbtTags.setInteger("operatingTicks", operatingTicks); nbtTags.setInteger("infuseStored", infuseStored); @@ -485,8 +501,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem try { facing = dataStream.readInt(); electricityStored = dataStream.readDouble(); - currentTicksRequired = dataStream.readInt(); - currentMaxElectricity = dataStream.readDouble(); + speedMultiplier = dataStream.readInt(); + energyMultiplier = dataStream.readInt(); isActive = dataStream.readBoolean(); operatingTicks = dataStream.readInt(); infuseStored = dataStream.readInt(); @@ -503,13 +519,13 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem @Override public void sendPacket() { - PacketHandler.sendTileEntityPacketToClients(this, 0, facing, electricityStored, currentTicksRequired, currentMaxElectricity, isActive, operatingTicks, infuseStored, type.name); + PacketHandler.sendTileEntityPacketToClients(this, 0, facing, electricityStored, speedMultiplier, energyMultiplier, isActive, operatingTicks, infuseStored, type.name); } @Override public void sendPacketWithRange() { - PacketHandler.sendTileEntityPacketToClients(this, 50, facing, electricityStored, currentTicksRequired, currentMaxElectricity, isActive, operatingTicks, infuseStored, type.name); + PacketHandler.sendTileEntityPacketToClients(this, 50, facing, electricityStored, speedMultiplier, energyMultiplier, isActive, operatingTicks, infuseStored, type.name); } @Override @@ -538,9 +554,9 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem case 3: return new Object[] {canOperate()}; case 4: - return new Object[] {currentMaxElectricity}; + return new Object[] {MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)}; case 5: - return new Object[] {(currentMaxElectricity-electricityStored)}; + return new Object[] {(MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)}; case 6: return new Object[] {infuseStored}; case 7: @@ -584,13 +600,13 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem @Override public double getMaxJoules(Object... data) { - return currentMaxElectricity; + return MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY); } @Override public int demandsEnergy() { - return (int)((currentMaxElectricity - electricityStored)*Mekanism.TO_IC2); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored)*Mekanism.TO_IC2); } @Override @@ -629,7 +645,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem { double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; - double neededEnergy = currentMaxElectricity-electricityStored; + double neededEnergy = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; if(givenEnergy < neededEnergy) { @@ -647,7 +663,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem @Override public int powerRequest() { - return (int)(currentMaxElectricity-electricityStored); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC); } @Override @@ -667,4 +683,28 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem { return facing; } + + @Override + public int getEnergyMultiplier(Object... data) + { + return energyMultiplier; + } + + @Override + public void setEnergyMultiplier(int multiplier, Object... data) + { + energyMultiplier = multiplier; + } + + @Override + public int getSpeedMultiplier(Object... data) + { + return speedMultiplier; + } + + @Override + public void setSpeedMultiplier(int multiplier, Object... data) + { + speedMultiplier = multiplier; + } } diff --git a/src/minecraft/mekanism/common/TileEntityPurificationChamber.java b/src/minecraft/mekanism/common/TileEntityPurificationChamber.java index 300291f69..e2d2dd5de 100644 --- a/src/minecraft/mekanism/common/TileEntityPurificationChamber.java +++ b/src/minecraft/mekanism/common/TileEntityPurificationChamber.java @@ -20,7 +20,7 @@ public class TileEntityPurificationChamber extends TileEntityAdvancedElectricMac public TileEntityPurificationChamber() { - super("PurificationChamber.ogg", "Purification Chamber", "/resources/mekanism/gui/GuiPurificationChamber.png", 16, 1, 200, 12000, 1200); + super("PurificationChamber.ogg", "Purification Chamber", "/resources/mekanism/gui/GuiPurificationChamber.png", 30, 1, 200, 12000, 1200); } @Override @@ -99,7 +99,7 @@ public class TileEntityPurificationChamber extends TileEntityAdvancedElectricMac if(item.canProvideGas(inventory[1], EnumGas.OXYGEN)) { int received = 0; - int gasNeeded = (MAX_SECONDARY_ENERGY - secondaryEnergyStored)/2; + int gasNeeded = MAX_SECONDARY_ENERGY - secondaryEnergyStored; if(item.getRate() <= gasNeeded) { received = item.removeGas(inventory[1], EnumGas.OXYGEN, item.getRate()); @@ -109,7 +109,7 @@ public class TileEntityPurificationChamber extends TileEntityAdvancedElectricMac received = item.removeGas(inventory[1], EnumGas.OXYGEN, gasNeeded); } - setGas(EnumGas.OXYGEN, secondaryEnergyStored + received*2); + setGas(EnumGas.OXYGEN, secondaryEnergyStored + received); } } } diff --git a/src/minecraft/mekanism/common/TileEntitySmeltingFactory.java b/src/minecraft/mekanism/common/TileEntitySmeltingFactory.java index f91803f70..37600936d 100644 --- a/src/minecraft/mekanism/common/TileEntitySmeltingFactory.java +++ b/src/minecraft/mekanism/common/TileEntitySmeltingFactory.java @@ -9,7 +9,7 @@ import ic2.api.IElectricItem; import ic2.api.energy.tile.IEnergySink; import mekanism.api.IActiveState; import mekanism.api.IConfigurable; -import mekanism.api.IMachineUpgrade; +import mekanism.api.IUpgradeManagement; import mekanism.api.SideData; import mekanism.api.Tier.SmeltingFactoryTier; import mekanism.client.Sound; @@ -39,7 +39,7 @@ import cpw.mods.fml.relauncher.SideOnly; import dan200.computer.api.IComputerAccess; import dan200.computer.api.IPeripheral; -public class TileEntitySmeltingFactory extends TileEntityElectricBlock implements IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable +public class TileEntitySmeltingFactory extends TileEntityElectricBlock implements IEnergySink, IJouleStorage, IVoltage, IPeripheral, IActiveState, IConfigurable, IUpgradeManagement { /** This Smelting Factory's tier. */ public SmeltingFactoryTier tier; @@ -61,11 +61,13 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement /** How much energy each operation consumes per tick. */ public int ENERGY_PER_TICK = 16; - /** How many ticks it takes, currently, to run an operation. */ - public int currentTicksRequired; + public int speedMultiplier; - /** The current electricity cap this machine can handle. */ - public double currentMaxElectricity; + public int energyMultiplier; + + public int UPGRADE_TICKS_REQUIRED = 40; + + public int upgradeTicks; /** This machine's previous active state, used for calculating packets. */ public boolean prevActive; @@ -91,8 +93,6 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement super(type.name + " Smelting Factory", type.processes*3200); ElectricityConnections.registerConnector(this, EnumSet.allOf(ForgeDirection.class)); tier = type; - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; inventory = new ItemStack[2+type.processes*2]; progress = new int[type.processes]; isActive = false; @@ -106,16 +106,19 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement if(worldObj.isRemote) { try { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - handleSound(); + synchronized(Mekanism.audioHandler.sounds) + { + handleSound(); + } } } catch(NoSuchMethodError e) {} } if(powerProvider != null) { - int received = (int)(powerProvider.useEnergy(0, (float)((currentMaxElectricity-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); + int received = (int)(powerProvider.useEnergy(0, (float)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC), true)*Mekanism.FROM_BC); setJoules(electricityStored + received); } @@ -130,13 +133,13 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement { if(tileEntity instanceof IConductor) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { - double electricityNeeded = currentMaxElectricity - electricityStored; + double electricityNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored; ((IConductor)tileEntity).getNetwork().startRequesting(this, electricityNeeded, electricityNeeded >= getVoltage() ? getVoltage() : electricityNeeded); setJoules(electricityStored + ((IConductor)tileEntity).getNetwork().consumeElectricity(this).getWatts()); } - else if(electricityStored >= currentMaxElectricity) + else if(electricityStored >= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { ((IConductor)tileEntity).getNetwork().stopRequesting(this); } @@ -155,7 +158,7 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement if(inventory[1] != null) { - if(electricityStored < currentMaxElectricity) + if(electricityStored < MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { if(inventory[1].getItem() instanceof IItemElectric) { @@ -163,18 +166,8 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement if (electricItem.canProduceElectricity()) { - double joulesNeeded = currentMaxElectricity-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[1]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[1]), inventory[1]); - } - else if(electricItem.getVoltage(inventory[1]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[1]); - } - + double joulesNeeded = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, joulesNeeded), inventory[1]); setJoules(electricityStored + joulesReceived); } } @@ -188,7 +181,7 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement } } } - if(inventory[1].itemID == Item.redstone.itemID && electricityStored+1000 <= currentMaxElectricity) + if(inventory[1].itemID == Item.redstone.itemID && electricityStored+1000 <= MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)) { setJoules(electricityStored + 1000); --inventory[1].stackSize; @@ -200,38 +193,62 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement } } - if(inventory[0] != null && inventory[0].getItem() instanceof IMachineUpgrade) + if(inventory[0] != null) { - int energyToAdd = 0; - int ticksToRemove = 0; - - if(currentMaxElectricity == MAX_ELECTRICITY) + if(inventory[0].isItemEqual(new ItemStack(Mekanism.EnergyUpgrade)) && speedMultiplier < 8) { - energyToAdd = ((IMachineUpgrade)inventory[0].getItem()).getEnergyBoost(inventory[0]); + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + energyMultiplier+=1; + + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } } - - if(currentTicksRequired == TICKS_REQUIRED) + else if(inventory[0].isItemEqual(new ItemStack(Mekanism.SpeedUpgrade)) && speedMultiplier < 8) { - ticksToRemove = ((IMachineUpgrade)inventory[0].getItem()).getTickReduction(inventory[0]); + if(upgradeTicks < UPGRADE_TICKS_REQUIRED) + { + upgradeTicks++; + } + else if(upgradeTicks == UPGRADE_TICKS_REQUIRED) + { + upgradeTicks = 0; + speedMultiplier+=1; + + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } + } + else { + upgradeTicks = 0; } - - currentMaxElectricity += energyToAdd; - currentTicksRequired -= ticksToRemove; } - else if(inventory[0] == null) - { - currentTicksRequired = TICKS_REQUIRED; - currentMaxElectricity = MAX_ELECTRICITY; + else { + upgradeTicks = 0; } for(int mainSlot = 0; mainSlot < tier.processes; mainSlot++) { - if(canOperate(getInputSlot(mainSlot), getOutputSlot(mainSlot)) && (progress[mainSlot]+1) < currentTicksRequired) + if(canOperate(getInputSlot(mainSlot), getOutputSlot(mainSlot)) && (progress[mainSlot]+1) < MekanismUtils.getTicks(speedMultiplier)) { ++progress[mainSlot]; electricityStored -= ENERGY_PER_TICK; } - else if(canOperate(getInputSlot(mainSlot), getOutputSlot(mainSlot)) && (progress[mainSlot]+1) >= currentTicksRequired) + else if(canOperate(getInputSlot(mainSlot), getOutputSlot(mainSlot)) && (progress[mainSlot]+1) >= MekanismUtils.getTicks(speedMultiplier)) { if(!worldObj.isRemote) { @@ -241,16 +258,6 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement electricityStored -= ENERGY_PER_TICK; } - if(electricityStored < 0) - { - electricityStored = 0; - } - - if(electricityStored > currentMaxElectricity) - { - electricityStored = currentMaxElectricity; - } - if(!canOperate(getInputSlot(mainSlot), getOutputSlot(mainSlot))) { progress[mainSlot] = 0; @@ -296,25 +303,28 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement @SideOnly(Side.CLIENT) public void handleSound() { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - if(audio == null && worldObj != null && worldObj.isRemote) + synchronized(Mekanism.audioHandler.sounds) { - if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + if(audio == null && worldObj != null && worldObj.isRemote) { - audio = Mekanism.audioHandler.getSound("SmeltingFactory.ogg", worldObj, xCoord, yCoord, zCoord); + if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + { + audio = Mekanism.audioHandler.getSound("SmeltingFactory.ogg", worldObj, xCoord, yCoord, zCoord); + } } - } - - if(worldObj != null && worldObj.isRemote && audio != null) - { - if(!audio.isPlaying && isActive == true) + + if(worldObj != null && worldObj.isRemote && audio != null) { - audio.play(); - } - else if(audio.isPlaying && isActive == false) - { - audio.stop(); + if(!audio.isPlaying && isActive == true) + { + audio.play(); + } + else if(audio.isPlaying && isActive == false) + { + audio.stopLoop(); + } } } } @@ -333,7 +343,7 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement public int getScaledProgress(int i, int process) { - return progress[process]*i / currentTicksRequired; + return progress[process]*i / MekanismUtils.getTicks(speedMultiplier); } /** @@ -343,7 +353,12 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement */ public int getScaledEnergyLevel(int i) { - return (int)(electricityStored*i / currentMaxElectricity); + return (int)(electricityStored*i / MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)); + } + + public int getScaledUpgradeProgress(int i) + { + return upgradeTicks*i / UPGRADE_TICKS_REQUIRED; } public boolean canOperate(int inputSlot, int outputSlot) @@ -424,8 +439,8 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement try { facing = dataStream.readInt(); electricityStored = dataStream.readDouble(); - currentTicksRequired = dataStream.readInt(); - currentMaxElectricity = dataStream.readDouble(); + speedMultiplier = dataStream.readInt(); + energyMultiplier = dataStream.readInt(); isActive = dataStream.readBoolean(); for(int i = 0; i < tier.processes; i++) @@ -447,8 +462,8 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement { super.readFromNBT(nbtTags); - currentTicksRequired = nbtTags.getInteger("currentTicksRequired"); - currentMaxElectricity = nbtTags.getDouble("currentMaxElectricity"); + speedMultiplier = nbtTags.getInteger("speedMultiplier"); + energyMultiplier = nbtTags.getInteger("energyMultiplier"); isActive = nbtTags.getBoolean("isActive"); for(int i = 0; i < tier.processes; i++) @@ -470,8 +485,8 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement { super.writeToNBT(nbtTags); - nbtTags.setInteger("currentTicksRequired", currentTicksRequired); - nbtTags.setDouble("currentMaxElectricity", currentMaxElectricity); + nbtTags.setInteger("speedMultiplier", speedMultiplier); + nbtTags.setInteger("energyMultiplier", energyMultiplier); nbtTags.setBoolean("isActive", isActive); for(int i = 0; i < tier.processes; i++) @@ -490,13 +505,13 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement @Override public void sendPacket() { - PacketHandler.sendTileEntityPacketToClients(this, 0, facing, electricityStored, currentTicksRequired, currentMaxElectricity, isActive, progress); + PacketHandler.sendTileEntityPacketToClients(this, 0, facing, electricityStored, speedMultiplier, energyMultiplier, isActive, progress); } @Override public void sendPacketWithRange() { - PacketHandler.sendTileEntityPacketToClients(this, 50, facing, electricityStored, currentTicksRequired, currentMaxElectricity, isActive, progress); + PacketHandler.sendTileEntityPacketToClients(this, 50, facing, electricityStored, speedMultiplier, energyMultiplier, isActive, progress); } @Override @@ -571,9 +586,9 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement return new Object[] {canOperate(getInputSlot((Integer)arguments[0]), getOutputSlot((Integer)arguments[0]))}; case 4: - return new Object[] {currentMaxElectricity}; + return new Object[] {MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)}; case 5: - return new Object[] {(currentMaxElectricity-electricityStored)}; + return new Object[] {(MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)}; default: System.err.println("[Mekanism] Attempted to call unknown method with computer ID " + computer.getID()); return new Object[] {"Unknown command."}; @@ -613,13 +628,13 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement @Override public double getMaxJoules(Object... data) { - return currentMaxElectricity; + return MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY); } @Override public int demandsEnergy() { - return (int)((currentMaxElectricity - electricityStored)*Mekanism.TO_IC2); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY) - electricityStored)*Mekanism.TO_IC2); } @Override @@ -652,7 +667,7 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement { double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; - double neededEnergy = currentMaxElectricity-electricityStored; + double neededEnergy = MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored; if(givenEnergy < neededEnergy) { @@ -670,7 +685,7 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement @Override public int powerRequest() { - return (int)(currentMaxElectricity-electricityStored); + return (int)((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC); } @Override @@ -690,4 +705,28 @@ public class TileEntitySmeltingFactory extends TileEntityElectricBlock implement { return facing; } + + @Override + public int getEnergyMultiplier(Object... data) + { + return energyMultiplier; + } + + @Override + public void setEnergyMultiplier(int multiplier, Object... data) + { + energyMultiplier = multiplier; + } + + @Override + public int getSpeedMultiplier(Object... data) + { + return speedMultiplier; + } + + @Override + public void setSpeedMultiplier(int multiplier, Object... data) + { + speedMultiplier = multiplier; + } } diff --git a/src/minecraft/mekanism/common/TileEntityTeleporter.java b/src/minecraft/mekanism/common/TileEntityTeleporter.java index 791b87bae..cc9aa2b35 100644 --- a/src/minecraft/mekanism/common/TileEntityTeleporter.java +++ b/src/minecraft/mekanism/common/TileEntityTeleporter.java @@ -46,7 +46,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn public TileEntityTeleporter() { - super("Teleporter", 3000000); + super("Teleporter", 4000000); inventory = new ItemStack[1]; code = new Teleporter.Code(0, 0, 0, 0); @@ -142,17 +142,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn if (electricItem.canProduceElectricity()) { double joulesNeeded = MAX_ELECTRICITY-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[0]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[0]), inventory[0]); - } - else if(electricItem.getVoltage(inventory[0]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[0]); - } - + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[0])*0.005, joulesNeeded), inventory[0]); setJoules(electricityStored + joulesReceived); } } @@ -310,7 +300,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn int distance = (int)entity.getDistanceSq(coords.xCoord, coords.yCoord, coords.zCoord); - energyCost+=(distance*10); + energyCost+=(distance); return energyCost; } diff --git a/src/minecraft/mekanism/common/Version.java b/src/minecraft/mekanism/common/Version.java index b7061606e..4e3529d08 100644 --- a/src/minecraft/mekanism/common/Version.java +++ b/src/minecraft/mekanism/common/Version.java @@ -39,6 +39,78 @@ public class Version build = 0; } + /** + * 1: greater than + * 0: equal to + * -1: less than + * @param version + * @return + */ + public byte comparedState(Version version) + { + if(version.major > major) + { + return -1; + } + else if(version.major == major) + { + if(version.minor > minor) + { + return -1; + } + else if(version.minor == minor) + { + if(version.build > build) + { + return -1; + } + else if(version.build == build) + { + return 0; + } + else { + return 1; + } + } + else { + return 1; + } + } + else { + return 1; + } + } + + public static Version get(String s) + { + String[] split = s.replace('.', ':').split(":"); + if(split.length != 3) + { + System.out.println(split.length); + return null; + } + + for(String i : split) + { + for(Character c : i.toCharArray()) + { + if(!Character.isDigit(c)) + { + return null; + } + } + } + + int[] digits = new int[3]; + + for(int i = 0; i < 3; i++) + { + digits[i] = Integer.parseInt(split[i]); + } + + return new Version(digits[0], digits[1], digits[2]); + } + @Override public String toString() { diff --git a/src/minecraft/mekanism/generators/common/BlockGenerator.java b/src/minecraft/mekanism/generators/common/BlockGenerator.java index fce6e354e..572249dd7 100644 --- a/src/minecraft/mekanism/generators/common/BlockGenerator.java +++ b/src/minecraft/mekanism/generators/common/BlockGenerator.java @@ -5,10 +5,12 @@ import java.util.List; import java.util.Random; import mekanism.api.IActiveState; +import mekanism.api.IEnergyCube; import mekanism.common.Mekanism; import mekanism.common.MekanismUtils; import mekanism.common.TileEntityBasicBlock; import mekanism.common.TileEntityElectricBlock; +import mekanism.common.TileEntityEnergyCube; import mekanism.generators.client.GeneratorsClientProxy; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -20,9 +22,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; +import universalelectricity.core.implement.IItemElectric; import universalelectricity.core.vector.Vector3; import universalelectricity.prefab.implement.IToolConfigurator; import universalelectricity.prefab.multiblock.IMultiBlock; @@ -424,12 +428,13 @@ public class BlockGenerator extends BlockContainer if(world.getBlockMetadata(x, y, z) == GeneratorType.ADVANCED_SOLAR_GENERATOR.meta) { - EntityItem entityItem = new EntityItem(world, x, y, z, new ItemStack(MekanismGenerators.Generator, 1, world.getBlockMetadata(x, y, z))); - - float motion = 0.05F; - entityItem.motionX = machineRand.nextGaussian() * motion; - entityItem.motionY = machineRand.nextGaussian() * motion + 0.2F; - entityItem.motionZ = machineRand.nextGaussian() * motion; + float motion = 0.7F; + double motionX = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, new ItemStack(MekanismGenerators.Generator, 1, 5)); + world.spawnEntityInWorld(entityItem); } @@ -569,25 +574,62 @@ public class BlockGenerator extends BlockContainer setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } } + + @Override + public boolean removeBlockByPlayer(World world, EntityPlayer player, int x, int y, int z) + { + if(!player.capabilities.isCreativeMode && !world.isRemote && canHarvestBlock(player, world.getBlockMetadata(x, y, z))) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + + float motion = 0.7F; + double motionX = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; + + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, new ItemStack(MekanismGenerators.Generator, 1, world.getBlockMetadata(x, y, z))); + + IItemElectric electricItem = (IItemElectric)entityItem.getEntityItem().getItem(); + electricItem.setJoules(tileEntity.electricityStored, entityItem.getEntityItem()); + + world.spawnEntityInWorld(entityItem); + } + + return world.setBlockWithNotify(x, y, z, 0); + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + ItemStack itemStack = new ItemStack(MekanismGenerators.Generator, 1, world.getBlockMetadata(x, y, z)); + + IItemElectric electricItem = (IItemElectric)itemStack.getItem(); + electricItem.setJoules(tileEntity.electricityStored, itemStack); + + return itemStack; + } public static enum GeneratorType { - HEAT_GENERATOR(0, 0, TileEntityHeatGenerator.class, true), - SOLAR_GENERATOR(1, 1, TileEntitySolarGenerator.class, false), - ELECTROLYTIC_SEPARATOR(2, 2, TileEntityElectrolyticSeparator.class, true), - HYDROGEN_GENERATOR(3, 3, TileEntityHydrogenGenerator.class, true), - BIO_GENERATOR(4, 4, TileEntityBioGenerator.class, true), - ADVANCED_SOLAR_GENERATOR(5, 1, TileEntityAdvancedSolarGenerator.class, true); + HEAT_GENERATOR(0, 0, 160000, TileEntityHeatGenerator.class, true), + SOLAR_GENERATOR(1, 1, 96000, TileEntitySolarGenerator.class, false), + ELECTROLYTIC_SEPARATOR(2, 2, 9600, TileEntityElectrolyticSeparator.class, true), + HYDROGEN_GENERATOR(3, 3, 400000, TileEntityHydrogenGenerator.class, true), + BIO_GENERATOR(4, 4, 160000, TileEntityBioGenerator.class, true), + ADVANCED_SOLAR_GENERATOR(5, 1, 200000, TileEntityAdvancedSolarGenerator.class, true); public int meta; public int guiId; + public double maxEnergy; public Class tileEntityClass; public boolean hasModel; - private GeneratorType(int i, int j, Class tileClass, boolean model) + private GeneratorType(int i, int j, double k, Class tileClass, boolean model) { meta = i; guiId = j; + maxEnergy = k; tileEntityClass = tileClass; hasModel = model; } diff --git a/src/minecraft/mekanism/generators/common/ContainerHeatGenerator.java b/src/minecraft/mekanism/generators/common/ContainerHeatGenerator.java index 7547c96fd..8ccfaa020 100644 --- a/src/minecraft/mekanism/generators/common/ContainerHeatGenerator.java +++ b/src/minecraft/mekanism/generators/common/ContainerHeatGenerator.java @@ -79,7 +79,8 @@ public class ContainerHeatGenerator extends Container } } } - else if(tileEntity.getFuel(slotStack) > 0 || (Mekanism.hooks.BuildCraftLoaded && slotStack.itemID == Mekanism.hooks.BuildCraftFuelBucket.itemID)) + else if(tileEntity.getFuel(slotStack) > 0 || (Mekanism.hooks.ForestryLoaded && slotStack.itemID == Mekanism.hooks.ForestryBiofuelBucket.itemID) || + (Mekanism.hooks.BuildCraftLoaded && (slotStack.itemID == Mekanism.hooks.BuildCraftFuelBucket.itemID || slotStack.itemID == Mekanism.hooks.BuildCraftOilBucket.itemID))) { if(slotID != 0 && slotID != 1) { diff --git a/src/minecraft/mekanism/generators/common/ItemBlockGenerator.java b/src/minecraft/mekanism/generators/common/ItemBlockGenerator.java index 3124081a1..70d45258b 100644 --- a/src/minecraft/mekanism/generators/common/ItemBlockGenerator.java +++ b/src/minecraft/mekanism/generators/common/ItemBlockGenerator.java @@ -1,10 +1,21 @@ package mekanism.generators.common; +import java.util.List; + +import ic2.api.ICustomElectricItem; +import universalelectricity.core.electricity.ElectricInfo; +import universalelectricity.core.electricity.ElectricInfo.ElectricUnit; +import universalelectricity.core.implement.IItemElectric; +import mekanism.common.Mekanism; +import mekanism.common.TileEntityElectricBlock; import mekanism.generators.common.BlockGenerator.GeneratorType; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagFloat; import net.minecraft.world.World; /** @@ -19,7 +30,7 @@ import net.minecraft.world.World; * @author AidanBrady * */ -public class ItemBlockGenerator extends ItemBlock +public class ItemBlockGenerator extends ItemBlock implements IItemElectric, ICustomElectricItem { public Block metaBlock; @@ -28,6 +39,7 @@ public class ItemBlockGenerator extends ItemBlock super(id); metaBlock = block; setHasSubtypes(true); + setMaxStackSize(1); } @Override @@ -42,41 +54,6 @@ public class ItemBlockGenerator extends ItemBlock return metaBlock.getBlockTextureFromSideAndMetadata(2, i); } - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) - { - if(stack.getItemDamage() == GeneratorType.ADVANCED_SOLAR_GENERATOR.meta) - { - boolean canPlace = true; - - if(world.getBlockId(x, y, z) != Block.tallGrass.blockID && world.getBlockId(x, y, z) != 0) - canPlace = false; - - if(world.getBlockId(x, y, z) != 0) - { - if(Block.blocksList[world.getBlockId(x, y, z)].isBlockReplaceable(world, x, y, z)) - canPlace = true; - } - - for(int xPos=-1;xPos<=1;xPos++) - { - for(int zPos=-1;zPos<=1;zPos++) - { - if(world.getBlockId(x+xPos, y+2, z+zPos) != 0) - canPlace = false; - } - } - - if(canPlace) - { - return super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); - } - return false; - } - - return super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); - } - @Override public String getItemNameIS(ItemStack itemstack) { @@ -110,4 +87,224 @@ public class ItemBlockGenerator extends ItemBlock } return getItemName() + "." + name; } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) + { + double energy = getJoules(itemstack); + + list.add("Stored Energy: " + ElectricInfo.getDisplayShort(energy, ElectricUnit.JOULES)); + } + + @Override + public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag) + { + ItemBlockGenerator item = ((ItemBlockGenerator)itemstack.getItem()); + item.setJoules(item.getJoules(itemstack), itemstack); + } + + @Override + public double getJoules(Object... data) + { + if (data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack) data[0]; + + if (itemStack.stackTagCompound == null) + { + return 0; + } + + double electricityStored = 0; + + if (itemStack.stackTagCompound.getTag("electricity") instanceof NBTTagFloat) + { + electricityStored = itemStack.stackTagCompound.getFloat("electricity"); + } + else + { + electricityStored = itemStack.stackTagCompound.getDouble("electricity"); + } + + return electricityStored; + } + + return -1; + } + + @Override + public void setJoules(double wattHours, Object... data) + { + if (data[0] instanceof ItemStack) + { + ItemStack itemStack = (ItemStack)data[0]; + + if (itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + double electricityStored = Math.max(Math.min(wattHours, getMaxJoules(itemStack)), 0); + itemStack.stackTagCompound.setDouble("electricity", electricityStored); + } + } + + @Override + public double getMaxJoules(Object... data) + { + if(data[0] instanceof ItemStack) + { + ItemStack itemstack = (ItemStack)data[0]; + + return GeneratorType.getFromMetadata(itemstack.getItemDamage()).maxEnergy; + } + + return 3200; + } + + @Override + public double getVoltage(Object... data) + { + return 120; + } + + @Override + public double onReceive(double amps, double voltage, ItemStack itemStack) + { + double rejectedElectricity = Math.max((getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1)) - getMaxJoules(itemStack), 0); + setJoules(getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1) - rejectedElectricity, itemStack); + return rejectedElectricity; + } + + @Override + public double onUse(double joulesNeeded, ItemStack itemStack) + { + double electricityToUse = Math.min(getJoules(itemStack), joulesNeeded); + setJoules(getJoules(itemStack) - electricityToUse, itemStack); + return electricityToUse; + } + + @Override + public boolean canReceiveElectricity() + { + //TODO + return false; + } + + @Override + public boolean canProduceElectricity() + { + return true; + } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) + { + boolean place = true; + + if(stack.getItemDamage() == GeneratorType.ADVANCED_SOLAR_GENERATOR.meta) + { + if(world.getBlockId(x, y, z) != Block.tallGrass.blockID && world.getBlockId(x, y, z) != 0) + place = false; + + if(world.getBlockId(x, y, z) != 0) + { + if(Block.blocksList[world.getBlockId(x, y, z)].isBlockReplaceable(world, x, y, z)) + place = true; + } + + for(int xPos=-1;xPos<=1;xPos++) + { + for(int zPos=-1;zPos<=1;zPos++) + { + if(world.getBlockId(x+xPos, y+2, z+zPos) != 0) + place = false; + } + } + } + + if(place && super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata)) + { + TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z); + tileEntity.electricityStored = getJoules(stack); + return true; + } + + return false; + } + + @Override + public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + double givenEnergy = amount*Mekanism.FROM_IC2; + double energyNeeded = getMaxJoules(itemStack)-getJoules(itemStack); + double energyToStore = Math.min(Math.min(amount, getMaxJoules(itemStack)*0.01), energyNeeded); + + if(!simulate) + { + setJoules(getJoules(itemStack) + energyToStore, itemStack); + } + return (int)(energyToStore*Mekanism.TO_IC2); + } + + @Override + public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + double energyWanted = amount*Mekanism.FROM_IC2; + double energyToGive = Math.min(Math.min(energyWanted, getMaxJoules(itemStack)*0.01), getJoules(itemStack)); + + if(!simulate) + { + setJoules(getJoules(itemStack) - energyToGive, itemStack); + } + return (int)(energyToGive*Mekanism.TO_IC2); + } + + @Override + public boolean canUse(ItemStack itemStack, int amount) + { + return getJoules(itemStack) >= amount*Mekanism.FROM_IC2; + } + + @Override + public boolean canShowChargeToolTip(ItemStack itemStack) + { + return false; + } + + @Override + public boolean canProvideEnergy() + { + return canProduceElectricity(); + } + + @Override + public int getChargedItemId() + { + return itemID; + } + + @Override + public int getEmptyItemId() + { + return itemID; + } + + @Override + public int getMaxCharge() + { + return 0; + } + + @Override + public int getTier() + { + return 3; + } + + @Override + public int getTransferLimit() + { + return (int)(getVoltage()*Mekanism.TO_IC2); + } } diff --git a/src/minecraft/mekanism/generators/common/MekanismGenerators.java b/src/minecraft/mekanism/generators/common/MekanismGenerators.java index 3d234c307..7940cbcec 100644 --- a/src/minecraft/mekanism/generators/common/MekanismGenerators.java +++ b/src/minecraft/mekanism/generators/common/MekanismGenerators.java @@ -8,6 +8,7 @@ import net.minecraft.block.BlockLeaves; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; +import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -19,7 +20,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "5.2.3", dependencies = "required-after:Mekanism") +@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "5.3.0", dependencies = "required-after:Mekanism") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class MekanismGenerators { @@ -150,5 +151,7 @@ public class MekanismGenerators BioFuel = new ItemMekanism(Mekanism.configuration.getItem("BioFuel", 11301).getInt()).setItemName("BioFuel"); ElectrolyticCore = new ItemMekanism(Mekanism.configuration.getItem("ElectrolyticCore", 11302).getInt()).setItemName("ElectrolyticCore"); Mekanism.configuration.save(); + + OreDictionary.registerOre("bioFuel", new ItemStack(BioFuel)); } } diff --git a/src/minecraft/mekanism/generators/common/TileEntityBioGenerator.java b/src/minecraft/mekanism/generators/common/TileEntityBioGenerator.java index a11899757..92b24741f 100644 --- a/src/minecraft/mekanism/generators/common/TileEntityBioGenerator.java +++ b/src/minecraft/mekanism/generators/common/TileEntityBioGenerator.java @@ -1,5 +1,8 @@ package mekanism.generators.common; +import java.util.HashMap; +import java.util.Map; + import ic2.api.ElectricItem; import ic2.api.IElectricItem; import mekanism.client.Sound; @@ -16,6 +19,7 @@ import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.liquids.ILiquidTank; import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerRegistry; import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.liquids.LiquidTank; import universalelectricity.core.electricity.ElectricInfo; @@ -41,11 +45,18 @@ public class TileEntityBioGenerator extends TileEntityGenerator implements ITank /** The LiquidSlot biofuel instance for this generator. */ public LiquidSlot bioFuelSlot = new LiquidSlot(24000, Mekanism.hooks.ForestryBiofuelID); + + public static Map fuels = new HashMap(); public TileEntityBioGenerator() { super("Bio-Generator", 160000, 128); inventory = new ItemStack[2]; + + if(Mekanism.hooks.ForestryLoaded) + { + fuels.put(Mekanism.hooks.ForestryBiofuelID, 16); + } } public float getMatrix() @@ -82,9 +93,13 @@ public class TileEntityBioGenerator extends TileEntityGenerator implements ITank if(inventory[1].getItem() instanceof IItemElectric) { IItemElectric electricItem = (IItemElectric)inventory[1].getItem(); - double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); - double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); - setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + + if(electricItem.canReceiveElectricity()) + { + double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); + double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); + setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + } } else if(inventory[1].getItem() instanceof IElectricItem) { @@ -93,31 +108,55 @@ public class TileEntityBioGenerator extends TileEntityGenerator implements ITank } } - if(inventory[0] != null && bioFuelSlot.liquidStored < bioFuelSlot.MAX_LIQUID) + if(inventory[0] != null) { - if(Mekanism.hooks.ForestryLoaded) + LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(inventory[0]); + + if(liquid != null) { - if(inventory[0].itemID == Mekanism.hooks.ForestryBiofuelBucket.itemID) + if(fuels.containsKey(liquid.itemID)) { - bioFuelSlot.setLiquid(bioFuelSlot.liquidStored + 1000); - inventory[0] = new ItemStack(Item.bucketEmpty); + int liquidToAdd = liquid.amount*fuels.get(liquid.itemID); + + if(bioFuelSlot.liquidStored+liquidToAdd <= bioFuelSlot.MAX_LIQUID) + { + bioFuelSlot.setLiquid(bioFuelSlot.liquidStored+liquidToAdd); + if(LiquidContainerRegistry.isBucket(inventory[0])) + { + inventory[0] = new ItemStack(Item.bucketEmpty); + } + else { + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } + } } } - - int fuel = getFuel(inventory[0]); - ItemStack prevStack = inventory[0].copy(); - if(fuel > 0) - { - int fuelNeeded = bioFuelSlot.MAX_LIQUID - bioFuelSlot.liquidStored; - if(fuel <= fuelNeeded) + else { + int fuel = getFuel(inventory[0]); + ItemStack prevStack = inventory[0].copy(); + if(fuel > 0) { - bioFuelSlot.liquidStored += fuel; - --inventory[0].stackSize; - } - - if(inventory[0].stackSize == 0) - { - inventory[0] = null; + int fuelNeeded = bioFuelSlot.MAX_LIQUID - bioFuelSlot.liquidStored; + if(fuel <= fuelNeeded) + { + bioFuelSlot.liquidStored += fuel; + --inventory[0].stackSize; + + if(prevStack.isItemEqual(new ItemStack(Item.bucketLava))) + { + inventory[0] = new ItemStack(Item.bucketEmpty); + } + } + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } } } } diff --git a/src/minecraft/mekanism/generators/common/TileEntityElectrolyticSeparator.java b/src/minecraft/mekanism/generators/common/TileEntityElectrolyticSeparator.java index 2a2f22bbe..c0391bc1d 100644 --- a/src/minecraft/mekanism/generators/common/TileEntityElectrolyticSeparator.java +++ b/src/minecraft/mekanism/generators/common/TileEntityElectrolyticSeparator.java @@ -28,6 +28,8 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.liquids.ILiquidTank; import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerData; +import net.minecraftforge.liquids.LiquidContainerRegistry; import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.liquids.LiquidTank; import universalelectricity.core.electricity.ElectricityConnections; @@ -130,17 +132,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp if (electricItem.canProduceElectricity()) { double joulesNeeded = MAX_ELECTRICITY-electricityStored; - double joulesReceived = 0; - - if(electricItem.getVoltage(inventory[3]) <= joulesNeeded) - { - joulesReceived = electricItem.onUse(electricItem.getVoltage(inventory[3]), inventory[3]); - } - else if(electricItem.getVoltage(inventory[3]) > joulesNeeded) - { - joulesReceived = electricItem.onUse(joulesNeeded, inventory[3]); - } - + double joulesReceived = electricItem.onUse(Math.min(electricItem.getMaxJoules(inventory[3])*0.005, joulesNeeded), inventory[3]); setJoules(electricityStored + joulesReceived); } } @@ -155,12 +147,29 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp } } - if(inventory[0] != null && waterSlot.liquidStored < waterSlot.MAX_LIQUID) + if(inventory[0] != null) { - if(inventory[0].itemID == Item.bucketWater.itemID) + LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(inventory[0]); + + if(liquid != null) { - inventory[0] = new ItemStack(Item.bucketEmpty, 1); - waterSlot.setLiquid(waterSlot.liquidStored + 1000); + if(waterSlot.liquidStored+liquid.amount <= waterSlot.MAX_LIQUID) + { + waterSlot.setLiquid(waterSlot.liquidStored + liquid.amount); + + if(inventory[0].isItemEqual(new ItemStack(Item.bucketWater))) + { + inventory[0] = new ItemStack(Item.bucketEmpty); + } + else { + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } + } } } diff --git a/src/minecraft/mekanism/generators/common/TileEntityGenerator.java b/src/minecraft/mekanism/generators/common/TileEntityGenerator.java index a0793cde7..c1e8f81c6 100644 --- a/src/minecraft/mekanism/generators/common/TileEntityGenerator.java +++ b/src/minecraft/mekanism/generators/common/TileEntityGenerator.java @@ -76,9 +76,12 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem if(worldObj.isRemote) { try { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - handleSound(); + synchronized(Mekanism.audioHandler.sounds) + { + handleSound(); + } } } catch(NoSuchMethodError e) {} } @@ -130,7 +133,7 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem if(outputNetwork != null) { - double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), getJoules()); + double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), Math.min(getJoules(), 10000)); if(getJoules() > 0 && outputWatts > 0 && getJoules()-outputWatts >= 0) { @@ -147,25 +150,28 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem @SideOnly(Side.CLIENT) public void handleSound() { - synchronized(Mekanism.audioHandler.sounds) + if(Mekanism.audioHandler != null) { - if(audio == null && worldObj != null && worldObj.isRemote) + synchronized(Mekanism.audioHandler.sounds) { - if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + if(audio == null && worldObj != null && worldObj.isRemote) { - audio = Mekanism.audioHandler.getSound(fullName.replace(" ", "").replace("-","") + ".ogg", worldObj, xCoord, yCoord, zCoord); + if(FMLClientHandler.instance().getClient().sndManager.sndSystem != null) + { + audio = Mekanism.audioHandler.getSound(fullName.replace(" ", "").replace("-","") + ".ogg", worldObj, xCoord, yCoord, zCoord); + } } - } - - if(worldObj != null && worldObj.isRemote && audio != null) - { - if(!audio.isPlaying && isActive == true) + + if(worldObj != null && worldObj.isRemote && audio != null) { - audio.play(); - } - else if(audio.isPlaying && isActive == false) - { - audio.stop(); + if(!audio.isPlaying && isActive == true) + { + audio.play(); + } + else if(audio.isPlaying && isActive == false) + { + audio.stopLoop(); + } } } } diff --git a/src/minecraft/mekanism/generators/common/TileEntityHeatGenerator.java b/src/minecraft/mekanism/generators/common/TileEntityHeatGenerator.java index 26ed2a826..810ce087d 100644 --- a/src/minecraft/mekanism/generators/common/TileEntityHeatGenerator.java +++ b/src/minecraft/mekanism/generators/common/TileEntityHeatGenerator.java @@ -1,12 +1,17 @@ package mekanism.generators.common; +import java.util.HashMap; +import java.util.Map; + import ic2.api.ElectricItem; import ic2.api.IElectricItem; import mekanism.client.Sound; import mekanism.common.LiquidSlot; import mekanism.common.Mekanism; +import mekanism.common.MekanismHooks; import mekanism.common.MekanismUtils; import mekanism.common.PacketHandler; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -17,6 +22,7 @@ import net.minecraft.tileentity.TileEntityFurnace; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.liquids.ILiquidTank; import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerRegistry; import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.liquids.LiquidTank; import universalelectricity.core.electricity.ElectricInfo; @@ -38,10 +44,24 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements ITan /** The amount of electricity this machine can produce with a unit of fuel. */ public final int GENERATION = 80; + public static Map fuels = new HashMap(); + public TileEntityHeatGenerator() { super("Heat Generator", 160000, 128); inventory = new ItemStack[2]; + + fuels.put(Block.lavaStill.blockID, 1); + + if(Mekanism.hooks.BuildCraftLoaded) + { + fuels.put(Mekanism.hooks.BuildCraftFuelID, 16); + fuels.put(Mekanism.hooks.BuildCraftOilID, 4); + } + if(Mekanism.hooks.ForestryLoaded) + { + fuels.put(Mekanism.hooks.ForestryBiofuelID, 8); + } } @Override @@ -54,9 +74,13 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements ITan if(inventory[1].getItem() instanceof IItemElectric) { IItemElectric electricItem = (IItemElectric)inventory[1].getItem(); - double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); - double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); - setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + + if(electricItem.canReceiveElectricity()) + { + double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); + double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); + setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + } } else if(inventory[1].getItem() instanceof IElectricItem) { @@ -65,36 +89,55 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements ITan } } - if(inventory[0] != null && fuelSlot.liquidStored < fuelSlot.MAX_LIQUID) + if(inventory[0] != null) { - if(Mekanism.hooks.BuildCraftLoaded) - { - if(inventory[0].itemID == Mekanism.hooks.BuildCraftFuelBucket.itemID) - { - fuelSlot.setLiquid(fuelSlot.liquidStored + 1000); - inventory[0] = new ItemStack(Item.bucketEmpty); - } - } + LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(inventory[0]); - int fuel = getFuel(inventory[0]); - ItemStack prevStack = inventory[0].copy(); - if(fuel > 0) + if(liquid != null) { - int fuelNeeded = fuelSlot.MAX_LIQUID - fuelSlot.liquidStored; - if(fuel <= fuelNeeded) + if(fuels.containsKey(liquid.itemID)) { - fuelSlot.liquidStored += fuel; - --inventory[0].stackSize; + int liquidToAdd = liquid.amount*fuels.get(liquid.itemID); - if(prevStack.isItemEqual(new ItemStack(Item.bucketLava))) + if(fuelSlot.liquidStored+liquidToAdd <= fuelSlot.MAX_LIQUID) { - inventory[0] = new ItemStack(Item.bucketEmpty); + fuelSlot.setLiquid(fuelSlot.liquidStored+liquidToAdd); + if(LiquidContainerRegistry.isBucket(inventory[0])) + { + inventory[0] = new ItemStack(Item.bucketEmpty); + } + else { + inventory[0].stackSize--; + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } + } } } - - if(inventory[0].stackSize == 0) + } + else { + int fuel = getFuel(inventory[0]); + ItemStack prevStack = inventory[0].copy(); + if(fuel > 0) { - inventory[0] = null; + int fuelNeeded = fuelSlot.MAX_LIQUID - fuelSlot.liquidStored; + if(fuel <= fuelNeeded) + { + fuelSlot.liquidStored += fuel; + --inventory[0].stackSize; + + if(prevStack.isItemEqual(new ItemStack(Item.bucketLava))) + { + inventory[0] = new ItemStack(Item.bucketEmpty); + } + } + + if(inventory[0].stackSize == 0) + { + inventory[0] = null; + } } } } @@ -163,6 +206,11 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements ITan public int getFuel(ItemStack itemstack) { + if(itemstack.itemID == Item.bucketLava.itemID) + { + return 1000; + } + return TileEntityFurnace.getItemBurnTime(itemstack); } @@ -254,29 +302,26 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements ITan @Override public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) { - if(from != ForgeDirection.getOrientation(facing)) + if(fuels.containsKey(resource.itemID) && from != ForgeDirection.getOrientation(facing)) { - if(resource.itemID == Mekanism.hooks.BuildCraftFuelID) + int fuelTransfer = 0; + int fuelNeeded = fuelSlot.MAX_LIQUID - fuelSlot.liquidStored; + int attemptTransfer = resource.amount*fuels.get(resource.itemID); + + if(attemptTransfer <= fuelNeeded) { - int fuelTransfer = 0; - int fuelNeeded = fuelSlot.MAX_LIQUID - fuelSlot.liquidStored; - int attemptTransfer = resource.amount; - - if(attemptTransfer <= fuelNeeded) - { - fuelTransfer = attemptTransfer; - } - else { - fuelTransfer = fuelNeeded; - } - - if(doFill) - { - fuelSlot.setLiquid(fuelSlot.liquidStored + fuelTransfer); - } - - return fuelTransfer; + fuelTransfer = attemptTransfer; } + else { + fuelTransfer = fuelNeeded; + } + + if(doFill) + { + fuelSlot.setLiquid(fuelSlot.liquidStored + fuelTransfer); + } + + return fuelTransfer/fuels.get(resource.itemID); } return 0; diff --git a/src/minecraft/mekanism/generators/common/TileEntityHydrogenGenerator.java b/src/minecraft/mekanism/generators/common/TileEntityHydrogenGenerator.java index e61e33ed3..4b6e5e00b 100644 --- a/src/minecraft/mekanism/generators/common/TileEntityHydrogenGenerator.java +++ b/src/minecraft/mekanism/generators/common/TileEntityHydrogenGenerator.java @@ -45,9 +45,13 @@ public class TileEntityHydrogenGenerator extends TileEntityGenerator implements if(inventory[1].getItem() instanceof IItemElectric) { IItemElectric electricItem = (IItemElectric)inventory[1].getItem(); - double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); - double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); - setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + + if(electricItem.canReceiveElectricity()) + { + double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[1])*0.005, electricityStored), getVoltage()), electricityStored); + double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]); + setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + } } else if(inventory[1].getItem() instanceof IElectricItem) { diff --git a/src/minecraft/mekanism/generators/common/TileEntitySolarGenerator.java b/src/minecraft/mekanism/generators/common/TileEntitySolarGenerator.java index ee4be50b0..2357163bd 100644 --- a/src/minecraft/mekanism/generators/common/TileEntitySolarGenerator.java +++ b/src/minecraft/mekanism/generators/common/TileEntitySolarGenerator.java @@ -67,9 +67,13 @@ public class TileEntitySolarGenerator extends TileEntityGenerator if(inventory[0].getItem() instanceof IItemElectric) { IItemElectric electricItem = (IItemElectric)inventory[0].getItem(); - double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[0])*0.005, electricityStored), getVoltage()), electricityStored); - double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[0]); - setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + + if(electricItem.canReceiveElectricity()) + { + double ampsToGive = Math.min(ElectricInfo.getAmps(Math.min(electricItem.getMaxJoules(inventory[0])*0.005, electricityStored), getVoltage()), electricityStored); + double rejects = electricItem.onReceive(ampsToGive, getVoltage(), inventory[0]); + setJoules(electricityStored - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - rejects)); + } } else if(inventory[0].getItem() instanceof IElectricItem) { diff --git a/src/minecraft/mekanism/nei/AdvancedMachineRecipeHandler.java b/src/minecraft/mekanism/nei/AdvancedMachineRecipeHandler.java index aba4076b1..564ef4e86 100644 --- a/src/minecraft/mekanism/nei/AdvancedMachineRecipeHandler.java +++ b/src/minecraft/mekanism/nei/AdvancedMachineRecipeHandler.java @@ -37,14 +37,14 @@ public abstract class AdvancedMachineRecipeHandler extends TemplateRecipeHandler public void drawExtras(GuiContainerManager guimanager, int i) { float f = ticksPassed >= 40 ? (ticksPassed - 40) % 20 / 20.0F : 0.0F; - drawProgressBar(guimanager, 63, 34, 176, 0, 24, 7, f, 0); + drawProgressBar(guimanager, 63, 34, 176 + 26, 0, 24, 7, f, 0); f = ticksPassed >= 20 && ticksPassed < 40 ? (ticksPassed - 20) % 20 / 20.0F : 1.0F; if(ticksPassed < 20) f = 0.0F; - drawProgressBar(guimanager, 45, 32, 176, 7, 5, 12, f, 3); + drawProgressBar(guimanager, 45, 32, 176 + 26, 7, 5, 12, f, 3); f = ticksPassed <= 20 ? ticksPassed / 20.0F : 1.0F; - drawProgressBar(guimanager, 149, 12, 176, 19, 4, 52, f, 3); + drawProgressBar(guimanager, 149, 12, 176 + 26, 19, 4, 52, f, 3); } @Override diff --git a/src/minecraft/mekanism/nei/MachineRecipeHandler.java b/src/minecraft/mekanism/nei/MachineRecipeHandler.java index 3632d39e3..70bcb0c32 100644 --- a/src/minecraft/mekanism/nei/MachineRecipeHandler.java +++ b/src/minecraft/mekanism/nei/MachineRecipeHandler.java @@ -35,9 +35,9 @@ public abstract class MachineRecipeHandler extends TemplateRecipeHandler public void drawExtras(GuiContainerManager guimanager, int i) { float f = ticksPassed >= 20 ? (ticksPassed - 20) % 20 / 20.0F : 0.0F; - drawProgressBar(guimanager, 63, 34, 176, 0, 24, 7, f, 0); + drawProgressBar(guimanager, 63, 34, 176 + 26, 0, 24, 7, f, 0); f = ticksPassed <= 20 ? ticksPassed / 20.0F : 1.0F; - drawProgressBar(guimanager, 149, 12, 176, 7, 4, 52, f, 3); + drawProgressBar(guimanager, 149, 12, 176 + 26, 7, 4, 52, f, 3); } @Override diff --git a/src/minecraft/mekanism/nei/MetallurgicInfuserRecipeHandler.java b/src/minecraft/mekanism/nei/MetallurgicInfuserRecipeHandler.java index 4a1514ac8..ba3a06e9a 100644 --- a/src/minecraft/mekanism/nei/MetallurgicInfuserRecipeHandler.java +++ b/src/minecraft/mekanism/nei/MetallurgicInfuserRecipeHandler.java @@ -77,17 +77,17 @@ public class MetallurgicInfuserRecipeHandler extends TemplateRecipeHandler public void drawExtras(GuiContainerManager guimanager, int i) { float f = ticksPassed >= 40 ? (ticksPassed - 40) % 20 / 20.0F : 0.0F; - drawProgressBar(guimanager, 67, 42, 176, 104, 32, 8, f, 0); + drawProgressBar(guimanager, 67, 42, 176 + 26, 104, 32, 8, f, 0); f = ticksPassed >= 20 && ticksPassed < 40 ? (ticksPassed - 20) % 20 / 20.0F : 1.0F; if(ticksPassed < 20) f = 0.0F; - int infuseX = 176 + (getOtherStacks(i).get(0).item.isItemEqual(new ItemStack(Mekanism.CompressedCarbon)) ? 4 : 0); + int infuseX = 176 + 26 + (getOtherStacks(i).get(0).item.isItemEqual(new ItemStack(Mekanism.CompressedCarbon)) ? 4 : 0); int infuseY = getOtherStacks(i).get(0).item.isItemEqual(new ItemStack(Mekanism.CompressedCarbon)) ? 0 : 52; - drawProgressBar(guimanager, 2, 22, infuseX, infuseY, 4, 52, f, 3); + drawProgressBar(guimanager, 2, 12, infuseX, infuseY, 4, 52, f, 3); f = ticksPassed <= 20 ? ticksPassed / 20.0F : 1.0F; - drawProgressBar(guimanager, 160, 12, 176, 0, 4, 52, f, 3); + drawProgressBar(guimanager, 160, 12, 176 + 26, 0, 4, 52, f, 3); } @Override diff --git a/src/minecraft/mekanism/tools/common/MekanismTools.java b/src/minecraft/mekanism/tools/common/MekanismTools.java index dc9f8fd6f..f696a27e1 100644 --- a/src/minecraft/mekanism/tools/common/MekanismTools.java +++ b/src/minecraft/mekanism/tools/common/MekanismTools.java @@ -26,7 +26,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "MekanismTools", name = "MekanismTools", version = "5.2.3", dependencies = "required-after:Mekanism") +@Mod(modid = "MekanismTools", name = "MekanismTools", version = "5.3.0", dependencies = "required-after:Mekanism") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class MekanismTools {