From c5692c0533e79542d8b24094ee17a688f5bd1252 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Mon, 5 Nov 2018 23:57:23 +0100 Subject: [PATCH] electric boiler, turbine, block state GUI fix --- assets/hbm/lang/de_DE.lang | 7 + assets/hbm/lang/en_US.lang | 7 + .../blocks/machine_boiler_electric_front.png | Bin 425 -> 418 bytes .../machine_boiler_electric_front_alt.png | Bin 0 -> 425 bytes .../machine_boiler_electric_front_lit.png | Bin 423 -> 439 bytes .../machine_boiler_electric_front_lit_alt.png | Bin 0 -> 423 bytes .../textures/blocks/machine_turbine_base.png | Bin 0 -> 348 bytes .../textures/blocks/machine_turbine_top.png | Bin 0 -> 592 bytes assets/hbm/textures/gui/fluids2.png | Bin 3923 -> 5037 bytes assets/hbm/textures/gui/gadgetSchematic.png | Bin 3584 -> 3159 bytes assets/hbm/textures/gui/gui_boiler.png | Bin 2736 -> 2736 bytes .../hbm/textures/gui/gui_boiler_electric.png | Bin 2837 -> 2835 bytes assets/hbm/textures/gui/gui_nei_boiler.png | Bin 1011 -> 1013 bytes .../textures/gui/gui_reactor_experimental.png | Bin 0 -> 3334 bytes assets/hbm/textures/gui/gui_turbine.png | Bin 0 -> 2954 bytes com/hbm/blocks/ModBlocks.java | 10 +- com/hbm/blocks/machine/MachineBoiler.java | 5 +- com/hbm/blocks/machine/MachineTurbine.java | 126 ++++++ com/hbm/handler/FluidTypeHandler.java | 66 +-- com/hbm/handler/GUIHandler.java | 38 ++ com/hbm/handler/nei/BoilerRecipeHandler.java | 142 ++++++ com/hbm/inventory/MachineRecipes.java | 40 +- .../container/ContainerElectricFurnace.java | 30 -- .../ContainerMachineBoilerElectric.java | 95 ++++ .../container/ContainerMachineCoal.java | 29 -- .../container/ContainerMachineTurbine.java | 94 ++++ com/hbm/inventory/gui/GUIMachineBoiler.java | 41 +- .../gui/GUIMachineBoilerElectric.java | 103 +++++ com/hbm/inventory/gui/GUIMachineCoal.java | 5 + .../gui/GUIMachineElectricFurnace.java | 16 +- com/hbm/inventory/gui/GUIMachineTurbine.java | 82 ++++ com/hbm/lib/Library.java | 3 +- com/hbm/main/CraftingManager.java | 4 +- com/hbm/main/MainRegistry.java | 2 + com/hbm/main/NEIConfig.java | 2 + com/hbm/packet/AuxGaugePacket.java | 23 +- .../machine/TileEntityMachineBattery.java | 4 + .../machine/TileEntityMachineBoiler.java | 25 +- .../TileEntityMachineBoilerElectric.java | 408 +++++++++++++++++- .../machine/TileEntityMachineCoal.java | 3 + .../TileEntityMachineElectricFurnace.java | 7 +- .../machine/TileEntityMachineRefinery.java | 11 +- .../machine/TileEntityMachineTurbine.java | 382 ++++++++++++++++ 43 files changed, 1688 insertions(+), 122 deletions(-) create mode 100644 assets/hbm/textures/blocks/machine_boiler_electric_front_alt.png create mode 100644 assets/hbm/textures/blocks/machine_boiler_electric_front_lit_alt.png create mode 100644 assets/hbm/textures/blocks/machine_turbine_base.png create mode 100644 assets/hbm/textures/blocks/machine_turbine_top.png create mode 100644 assets/hbm/textures/gui/gui_reactor_experimental.png create mode 100644 assets/hbm/textures/gui/gui_turbine.png create mode 100644 com/hbm/blocks/machine/MachineTurbine.java create mode 100644 com/hbm/handler/nei/BoilerRecipeHandler.java create mode 100644 com/hbm/inventory/container/ContainerMachineBoilerElectric.java create mode 100644 com/hbm/inventory/container/ContainerMachineTurbine.java create mode 100644 com/hbm/inventory/gui/GUIMachineBoilerElectric.java create mode 100644 com/hbm/inventory/gui/GUIMachineTurbine.java create mode 100644 com/hbm/tileentity/machine/TileEntityMachineTurbine.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index 979cc0cd5..e74764d85 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -42,6 +42,7 @@ potion.hbm_bang=! ! ! hbmfluid.none=Nichts hbmfluid.water=Wasser hbmfluid.steam=Dampf +hbmfluid.hotsteam=Dichter Dampf hbmfluid.lava=Lava hbmfluid.uf6=Uranhexafluorid hbmfluid.puf6=Plutoniumhexafluorid @@ -333,6 +334,12 @@ container.battery=Energiespeicher tile.machine_coal_off.name=Kohlegenerator tile.machine_coal_on.name=Kohlegenerator container.machineCoal=Kohlegenerator +tile.machine_boiler_off.name=Dampfkessel +tile.machine_boiler_on.name=Dampfkessel +container.machineBoiler=Dampfkessel +tile.machine_boiler_electric_off.name=Elektrischer Boiler +tile.machine_boiler_electric_on.name=Elektrischer Boiler +container.machineBoilerElectric=Elektrischer Boiler tile.launch_pad.name=Raketenabschussrampe container.launchPad=Raketenabschussrampe tile.book_guide.name=Hbm's Nuclear Tech Mod Handbuch [LEGACY] diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index c89004653..2a89f28a7 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -42,6 +42,7 @@ potion.hbm_bang=! ! ! hbmfluid.none=None hbmfluid.water=Water hbmfluid.steam=Steam +hbmfluid.hotsteam=Dense Steam hbmfluid.lava=Lava hbmfluid.uf6=Uranium Hexafluoride hbmfluid.puf6=Plutonium Hexafluoride @@ -333,6 +334,12 @@ container.battery=Energy Storage tile.machine_coal_off.name=Coal Generator tile.machine_coal_on.name=Coal Generator container.machineCoal=Coal Generator +tile.machine_boiler_off.name=Boiler +tile.machine_boiler_on.name=Boiler +container.machineBoiler=Boiler +tile.machine_boiler_electric_off.name=Electric Boiler +tile.machine_boiler_electric_on.name=Electric Boiler +container.machineBoilerElectric=Electric Boiler tile.launch_pad.name=Missile Launch Pad container.launchPad=Missile Launch Pad tile.book_guide.name=Hbm's Nuclear Tech Mod Manual [LEGACY] diff --git a/assets/hbm/textures/blocks/machine_boiler_electric_front.png b/assets/hbm/textures/blocks/machine_boiler_electric_front.png index 3aa01340ede87b7d208c265cff3975b6e3d0c6dd..a780a61f3ae7113b7c71f6b0c426a1a805ab3b4a 100644 GIT binary patch delta 375 zcmV--0f_#o1EK?vG=Eu1L_t(IjeS!=j>0eu96P^*h z{f-#pAAqXDd;hj85v6w`0wTiodWEWj0f3o%MFyI)v1K*Rxqk-(B1!4eYCCW#~>h%rJ$aJ${`v0meNJoebJQ8b{R)HS~L`@#NfuZVzi;q36$$A`L30J*4abZjy6zYMIA?VMZYoP*zP z;k`##EKrsuzHsMrlx2x?)1cbzV7A-X9AiwDjmKl0n9p3N|-Dx6Ly zjH(KCUB~ZjS#~su045Fqtcn8fyIp5*w^u~Ksc;s&cX(A45g-+njgBp5{+EFjvYpeG zIp^@YUL((Qe0NQ!$g&KdlL@jc!?rB(w%NeiZrAo9gxJPjuZL|}LVu^MJr5t_F`kCQ zM$DVzoP(-jFc@^iN{20dGeiV$bW%$-NyTj&5#1Q5D(bp!R84zrIX0c?BlB%^6UVNV c0^aj~0DTeza`Vt1VgLXD07*qoM6N<$f-}3W#Q*>R diff --git a/assets/hbm/textures/blocks/machine_boiler_electric_front_alt.png b/assets/hbm/textures/blocks/machine_boiler_electric_front_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa01340ede87b7d208c265cff3975b6e3d0c6dd GIT binary patch literal 425 zcmV;a0apHrP)9p3N|-Dx6LyjH(KCUB~Zj zS#~su045Fqtcn8fyIp5*w^u~Ksc;s&cX(A45g-+njgBp5{+EFjvYpeGIp^@YUL((Q zd`+jwvJ9V-39>B1wk+|s*}&Rv*Y+WV*v4M3hizFxf2XWH4S#cdlA-597U>bh=JO?z!QHl67s^KEn!$F7wE-t&I|eG&t5 T^Uxn+00000NkvXXu0mjf4EeL4 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/machine_boiler_electric_front_lit.png b/assets/hbm/textures/blocks/machine_boiler_electric_front_lit.png index b1414c36593fa8236696ca7bcc04b51aadbdae13..6fade7b2ddb72b397c2a26decff02138a7cbc3b7 100644 GIT binary patch delta 397 zcmV;80doGQ1GfW^G=FYML_t(IjeS$WYQjJeeKQ-QJrulzqM{VUU+^NLzaTCBME^kW z=*3GvL0WRrLJ_3}EgH>E4>Ic}u^m`uvYCDJ_RTDfMk662SZg67P$MGzWtvMw2sALp zfSFyA?yL9hd_E&h(<^|8pjxf|S(S*~KWiv~=A`Sx0C!Ml?q;(O|-%gPxU%lVTk8O1Eu*K+IGEmkfy0?<6RWt zb1=A0VQvzC`h7GyolF-34U91m5j?cp1+n~L^WO{+Ay7KL`I`9R=8cFh3`7K*%_dXT r@3rRWb^J#bgy$eS~{KM_@3WA`)EF&D-l6NpsFw;y)1q5#fA3Lsh{5z|4Mf3vVR=s+>HSdMF3UB@p$Yc z1AzA)0MPIE8|>I9swxhL174QPD3XXEga8r2<#NIEVuAgB-(bf^(SW{YGpwo#r_%|m zszP1Y@q1gA9Ze#Di30$mqQLiV*V)_c6%lYMoCWV49u-9dNJV9%V~d&pWnhJD=d@+c zIlQjd$nzW@({(AbEJHb&Aj>kmmnGgd8(7=z+CGF3+t};%uq{jI@07LY;d4C3({R{` zd2^g|P*n^DgN|6~u%&N?h~SM*YN;lvxNRe%8v|8EUDu7OX|FBErZatHzKw3;*tJr? ad;SjtFavUMIlK!10000hw+>HSdMF3UB@p$Yc1AzA)0MPIE z8|>I9swxhL174QPD3XXEga8r2<#NIEVuAgB-(bf^(SW{YGpwo#r_%|mszP1Y@q1gA z9Ze#Di30$mqQLiV*V)_c6%lYMoCWV49u-9dNJV9%V~d&pWnhJD=d@+cIlQjd$nzW@ z(bDVQfRSX7$ zj#%lirEi9a;EhgdsV1qoZ6l%^164&`*Nv)auPw)>Gks*fjc(%DwNk)){tp8%19EUV RybAyT002ovPDHLkV1oD2wT=J) literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/machine_turbine_base.png b/assets/hbm/textures/blocks/machine_turbine_base.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca2496f7f6f705801be34b01ac5ffc8d07ce45f GIT binary patch literal 348 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 W$Am`y@W6b&E8)BY_OiVqFZ>gvrW7&& diff --git a/assets/hbm/textures/gui/gadgetSchematic.png b/assets/hbm/textures/gui/gadgetSchematic.png index 59f37b0ceeea4414173e9b6969d112ec99db0182..68137f106967ad0fd0eccf586ebd7d38c74bca75 100644 GIT binary patch literal 3159 zcmc&$XH=8v68;jR1{5g@h!iR7il7t~U3wN!1O({tgOk&`Zexuw$pK_3v)cISd*+f@-etZnf3q z&0-?>^VW-}1Lt&~_^JD;r0YH(;pzS;m9xwgcJ*iUY#bf1wRb7Pu{|G?TO9>ApuI`C z+z$*Ch8k{RZfa*S%f+m(_RdFT4<)lUd26HW7&)1Y57S3Rf0fB-ov3_}_?9nR zoLnss7D+YHmeqZrx6?X`avTpd(3xFnO!N;fUzOG!*PK;fUtiLlLrvT+wqd$_gC=B; z5xPzkvWkw@k2&m2vN{gwo~^!6F>_`ifC}3sx3BAx4#zfL_#9*j$}V!p6k~ z;xEL_>U~}f7)QDOUNGbe^lnxeBGEi2ZD>u5A_zF&x0W*|1y%qr*I4fY1J71Pg6=d! z2gXarL2s8pn&bG0K0>o#Wc~9^OPAdEW_mp$b7=!(l;5+);S?`-GNpkzpV3X`26v#h z`6TpJcl;Zl>4=8T=?G^j zWYE=tN^z?!-tf+wRk`pnEgXPTMBahnZQ_yu*hcaAimNeXCMwRM2mk{!4<&Bq;dzc6 zM~bY@Q-5T^Z2xdx|BN8+%`)~djk(eM7suvQHQvUz$;ruS!!MSz3X0csR{Dp|5Sbmr z!+AuWO6W3kCcJ1i_gdP1=9NPb7q%FW&EIb<6mhO{iyrjGtze04S({MCQ_XXQf!gs( ze(Dlao9gLJq)s?J-c+^8V$GyTL978zjlGVq{ex^)XhbBKsGZV^}FqF)vjgzfE(t7b13l@?`}sjYH8%U*G&XO5KTT8;LIq6aXFMf|WtSe>dx9%&+z3_Xj4S3O z6HMYiIOBxlqVE*J&}pbfH13!W>s(C|XskuR#6u@|@Jlnl_%0-mr99@`&b0`!|6nBB zJUMHrM!eKii&m8^xnFxGTP&IAkH`#WD2Re5E^8oVz*XJ&a}!#yU-nU{Vj(Hcp!6o? z%mo~>zdvs58b z6;-?^ep?ya;0%?zE4%-xeG(<7yZMnb#f_M9BSanY60{x1^F@1D@9t2d$&DBAyqb*8mga#8k5>}uk^Ux)fp9py zT37-1)0syK1eE!;vN=@>tInw-a^k+--Bru^MaJWKfMs#gVE(w2agCK$ivY?OR< z2X-u)4SKWmWQuQ5_~XhAQYd!9DHhk$5a1PgA!K`B4t{LrQpfs;cdoVvy?Sf01Dr7- zK6voDy1!=Xxc2aHb}A5Y&xfZ1kBlf+M`6Ol=9q6~!9s#ZYGX$WqAjV_@5Dxff4iwm z^$+qDu50NwO0SuK#D&!9F7d30BwoHc4RX(K5<9|P{fbP5#564)8U8cCLQ_@>`r#!= zpR?sXL*MEVwpi=4s-)fF`HPy67?r|?+V6sFtkA$zNg0$%lZklXzQ3XYfjs*?C*Z7@ zUBztvF7SCpL5Fd4m>X;l@94sAHB?tQ(VJnL+jxj^3@OK|G&R`cF>&`k@S8B+uu&C; zaEQ?{q)s|sY_TXAIA~O25M|LyeT04IVe`cwMzD)$e?0RIe{#$3#~?Q=JTNV4drbcH zDof2ul%1bzB>>QKMYZK)BaLPg≠d2(L)8X1Fe-E_z*I6J5S9Z<4EdD^HsVdj|`K(h!(N3aCL7lE!fk1me%{btS0(=rq~zq&)=Nw_A-JIsD0cd%E$rI#EF~nCL?@)Pm%G%kKT0>$4&304>*ZqQwxZmcdf36RK4GS=&pueY#$bN8??+;7 zw$;^8hIl?25nMVrbs<_&Z};}JFLthl_diDh4e=wzWHXIcBFW#1ojE-a&~p*tb-XSh z0tiyFL?C-S{iKs08f_^^2uKML4IL3ZyLggN%S&wG)ZbQckSuEG7 z9`n?v@`tyAdryD?{ZvtlrU?M8P=KQU_ihT-G}@8${&h&lGO7lf!TQt=>_C%OJtgullxTU-4alEi?OEOjKf$|N&_Mjbt6lJVR0l2TwHHhk1`XpQR3 z|77?#_&*^kRkguYD(taBjoz5&&^FXyxCndEZ|6Tf{(pe~gxI#&2=4G^>qiy(^&i6W~k3ITCzZV(EBlue-` zOH>rp0I4FN2n0(N3KA4GKvAM1OA%09h_c*8f7r!CDi0T|v6TH}}-%uVNOfYdYx zZ+K*gD2qK|JxrRRfdwtQ6UZ`VO)}31E<>vLpY-1vOCA6UE5!io5;;cgF+@QOzk=th z_*>!8L#TG@@GU43uVy(XdpX;Q6GBZSYZ8WFvDa%UEu7*Ca17q3ZP<+lRp0Dpt zaQCe-Wk>M4yF&B(bIa%e^7qAv7-BO^pcl7 zIP-K{=nl=);ccz}iYkO3n702I|(?K8eUtUUd+e}5dUk$rp;f=tp7=#e)C!Pg*o=%bo9p6e(d&>w>5E88xfM18 z&Oz#-nb{#OqkOH14J@WSIsu&%?5#4vRn~Pzo`lS{#{LmcDvo<|e!s_bT6ws$K z`h8I&(3RIph~`-u4QoIbz_VCtnh>YFzeZ^wH85;dl>Y7bqVQby$RoBwMv87xac^47 zBY3HeQQE2dSYm|RWDq0`!WO7{kp1pnezjh=bG`!O`(!`;cn47=x0$YjehnWNK_ zRfsouHpy?0L4GhKgvku7%aBzlkDNvpuW>wZWbW zfjxw4K=1fHa^G%R<}b6*;i&0;l8)fwZ_vJ2j3Pi4k@k@OP0nu4Zg@q5fFTkH>IKJt zG|rEFXX}k_KlL;}U>EAqb43QnbnckYHqSF7-j`|1c$BnDN}vH77e%0^&HF$$g_gpRQ-Gd3&MOZ+wykO? z13gT-ZX&)|k+x~sp@X8m#!=AZ7IJS|hBh>R=@6#wc5*_$O}BrRw1bmTH-rvPoNu>|D-NZI3wH7O!O+a-vY7OCm*y98?c#9E#3W86 z`}|@ZxT)GecX?tP&Tve63VnK(*KF*!yfUg*4c%T-K8qjT#3I6s&;sk3NY)0w(v%4{ z(MvDj!O&NN)&(^YOEIj;v5q)T=InYEtNUTJD92ej9qXZ-!*oXZww_VEPA8>0BJcd< z^J_-3p$z`Vc@+3b-3xU)i&PPT8BQWYPa_?QbpFgFG4C7L(&5r_<-V($d3<}GC4jY? z(Le_zOaLXDN)UMmSMu$6WE%dl zSR|JJA^xg`#?Bqvc0;u8;gpM-=#~l5aA7ef8*c+9U`j&dmM%OBfLJir(P3 zf#z0^DIe<#Q(7d7WL7VK_XIOTRx+WwNcgF3nEa)_K*MY(lZ`&Ey1e~h(GFOt_Wdz4 zP7}8LoZlB^3s9G8ZFGWEaZ(Db={?h7+;zF8&jq@L zT30slzs*fG=ErZBJb+5UrG+`q3Ukr2=lfsWn`;bLZ9FnXggwu7Wf_K#9{JnB|BCd_ z0N}Z)k)S8>H{dXZH#YUKWHb5>+kQH@fi9j)y;UZD{dqfl2XAn~`pedsA7=u+fPskf zKyB~WV0c9;)Z?Lw5tI;dw9S?TIB|y=Fj@QmDCiu9o=+pFl@7-)k#rU}Eq%|oxO%u$ If6Yn$1C)PS#{d8T diff --git a/assets/hbm/textures/gui/gui_boiler.png b/assets/hbm/textures/gui/gui_boiler.png index cc2df3e84f68ffa3da4cdf007211f2d0fc234fcc..c4142c919e705f8f2104068df306ab134c0638be 100644 GIT binary patch literal 2736 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 LNkvXXu0mjfp->K{ delta 2530 zcmb7GdsNcd8b!nrP0{lGj;6_cOl6wN42EG=&eUkWU#VlMGP! zvcmHL3ZO#duCJbRg2ZrC#{0Vr-gNnu|vF_WE{tS8A+Hu3XgB zvaz@%Ln%d+yIdSE;mHS2bAnhpxL|&BB`bu(FAk)1uM8ddasdF&q$%I_~N5I<_g0Y(m znBgbISsN`dh-w4?fXz=pws)pVJAcD;sD%+pax*iH#h018 zgtN=bdt0Riskf}b^E;F^B~u^RmBbGVx|7mrNyd@JoxRT)93d?gUxwJfzxupgXA%=k zO};3(%^PdBcBz+TCMCT_;q~akq${6pM>0X?=?1Zh?4yjCL34qSZXYlkKuz(V20mJ& zk0wZ6gYn0i=MAX$S#1k1M?;$TN?QZPwlmFQjjF1ugH{)bSy?7uL)2U?ouM1LdGE4_ z7JCwVFx6)kzJ;_Qwa@-_C}MV_kMsKO56b!GB17{SQJ!~Yo$cBi%zlbl1F{nSs$zP& zBZt#+l6jx#&ig5BTI|~t=|u_#$hej@yQiKwaDiJ)!IAgnDDUwRvRV` z%hFiWM-2FrHJE*%rFKBA^P`_${U6S!(=;g%@ z{LKjjslojPT~O-@qZXF{o+X-bDf**X7W_>C;#Ufbo^SSjRRWGXS~46Kft6(v#AnQk zeBb4eM#ZeUt6HadMu7Qn+rF>LH1<%2dLq#HHaK^96hUfhXlQsE&w?I4d^k$tF}`}T zRP#;x`SM9cPez%>+4S^ZM^5Sal+#j%{*WCC{Yc>De&BEm3SLeI2cznksMGn>9`NWt-?WU3WdUEBP*_MtwB&{vn>lsP@t$~`0x>6|{id+Vs8 z28bH}!kgz6TJOc@l(b2Bg+YyWZLfENUR)+~aMEOD#=rp^7q07j7YyA)l|m2t+@G5s z>EX8{mn~myW+Pd$6yFnTd?S)W-QUn5oz=u7bxG>K^Pn2cB_{#rKbpDglU zh}4Hnq&};$+MSrgQ7r!WUV4%bLz?LAzAEMtL= z{Ueh039WEvQ@?#N6oJL^JiwP-9{ES2>*9p&=IGgmd&J(mdqHj4P~VD*tTx9XxZ*FJ z+R&kbH}w<;LSx+oPt!B=;+z8FZzedivVMUxq)`im4jn5S9eUF>Hjgp}^dpk*~zt&D>KgmhBCZlAn_Aya{yz1xD*&?EK?k_ z!R@63mOaB6Tw&6Ewd3y;TwJiEe;f8O^EM}p{zeAAPN)d>sHQ6%c&kC{wyksPd*cQ! z110iYIsBzYJ%?*vT^&Uuy5n8ZTlJZmaT&hF{40zhN5$l6uRQ21sL(bo=2QPlQBl$M zr#1J9=Xu{lYwv`DYA22)2!0Fnr#{CXsUgsXw7-tOMaP9RF<&@N4C^(?9C%-rcTWEy z+~vWZGG#=ee67|nI}QDJ`{bRp#}!ut-ohEsC$IdKKmWWvHk1~qHuv0V6Hr3mJ)a3P zFoR-Hwj3^_Z_Z%3*SAU8yCI=~Pgk-XcpmeyvV{DdkBL^$82<%)R@40A4k_De0;c(= z=>0g!$-yn=b#;PN1s}l2GEU_rmSj_{MDvp5E7AFmkH&e@q)> zu6^yHkH}ss@!0oY*9O^YU%SvOb#0a)O#Zg1EGDL~jhB^MbSev>+Rq4g8%(qz;&a`Jlm0CdF86&&%yGS}tH0H8{f?4s*TUetjAAX4$o&Hd@W#=?|! zRhyxKrw&mUJRziF9Z>%bH5O70adUbgsC`hykI0+58j<(4y&Or$t>OP$lbay^SBEtgTy=YXj4W252PM`zCRpnK*wG9Hyil(AOHXW diff --git a/assets/hbm/textures/gui/gui_nei_boiler.png b/assets/hbm/textures/gui/gui_nei_boiler.png index 605a221b8c2f619ca86edced25e6e26335853a36..8afd2d494534b8875f9e9be8eede514e40938a96 100644 GIT binary patch delta 658 zcmV;D0&V^C2lWS#G=Ho~L_t(|obBCBZrV^3hT-F=dqRY5un{EYY3Gqx2p&>iq}n z6zlc+VsCLicJr=QtNr&gpU-dVt=Dh)ICEV$6@Yti%9+nulUw5+00c7ujC9PUz~9dF zWA7orrI`SZbj?jU_02+Zm;gpNH3EOfe7?=kHJJb)m)f&CfNN03g^yP5@J#MHh=jZ8n=v?*knE7g}d|ZpAyz1Yo&b z)_T33dKo9#?RNVJ%;)nz{%*|XzvTUfM>x)$Pghl~wN_Q-mppJ6hTpKX-EOPie}?%_ z?g5ig0#K800t|olt*W}N>ssIU`?p;NG7J+y_x$`k=|W(P?RHyL)lI#Qd-w4Gwn

Jw+kg@J1qKPCG}+Lb8sSW!(;_ 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 Gh<^e`(BQTJ literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/gui/gui_turbine.png b/assets/hbm/textures/gui/gui_turbine.png new file mode 100644 index 0000000000000000000000000000000000000000..86f6bf854e4f80009474e5713578ceaa487fb7ee GIT binary patch literal 2954 zcmcImdsNcd7XE>#%#_+#6Q!BxVmV z+b-?SkVpr=ZTlfl7A%^TFtQ%5Yp`w{cElT1@?^SU4yDrSQ`6IF0nDJxjEsz|TD686 zm`Nl`&(Y3Rp=aleT<&%iU3pKU8VKABYiVd~^xMdonwXdv_-L=6Bfru#Iy+u(5#?u) zNdAr(a)|>})k4>!uG`2E0nF~DN=UgwUh7n=W7eH7aDqc)yiTMcUSe$O$L!NjNI9|b zn6$>u7nafoIB($0W?jy-zf-+DulHk+Eg-$uJwkPO%eBu;k8%ow!-3?`?!wl9iTx!D zmjKfGWO%)O2J4Z}0tiItuUt8a-6(%n9&pj9oUIj}YeO2)M?e4uY*$L%4V8RyaU_uZ z=CB#w(dsfsE_VhRj>~={>YtPj^WUv<0vb-~=g=|+HDJUi25(1{D__Ac{-8Ncy;d7l ztaN2ir}bGZizGgRx6{&Wu$zfRWC?#ebFBIzEsPF=;QoT3gl3f3o_(RtHkn;gyy%_v zbd0qj%X0_RbA>g6By4VOF1ugjS1p>HOwoyOSyqMtJRM`4n$)(o(rJ?_$y0fi?^!=(7s3K8 z;O>KWxCf&X#Yb`Fn3DtZl-n%_!lyrw`jtJScvfAM-&NQHewO%fo;)%jeaXFi!9-t~ zfUwJmwc;ZkU*1}qdtwUibo6+lHAtXKh-vrT^QDy!^bILKK+yJkb(AJGUTkN+Fdxem z6d7sO*)$q$^bU^h3|oDC)@`tefA&HJFBQJ!)g+iR&J(vxzvUf#G`1nSX3?@Bv@El4 zHLRbq6S45sRd|PBY3a@PiE4?1^`+64ZtLto0S0a8m$;Pf%BCq5jg<4s+hlsgOue$I zDwT9DZ-zNleho~sDl)EKj)We&f0SOfV-|aA?wT-=au1)?G#AE-bKG&;GxT}6B}o(b zi-16B!s@Gq2VyAz;R^q0F41>}!hCX|bfnLh0t6PJBjgDcn7E{wYLu;KdM+jmPY?P% zc#!S0FfkXV%jDd(O6yQhshVvZ#_Yq=Tv7lE+Z(#qYL?HXyZJWkzYleyy$M&ZELo5} zobJkgk^$^(SuveR#=o1Z$#tQpta>@Cx8)x-;|%<`5?Y=Pc|Z|FqQbWuywl4!xmVAs zCc!=*7=gl>>!)7fk148EC#`OJ1ou-Xp1&4#Y1ndgce6$EWqB?y?>zBAsPC4QP1i$bNsO3Bb+lwfF6$h z%MEqzE+iK(-=>vZ$Noi^SmyBq_yXSder?RuA-u<`m&vp0T1zAfcvD%q&V_%~uLClL zd@CTmL0vL(-oJKrp?67ocr95Eny@1x%#WYvFsqA=i;)^*R?Zy{$qS9I;Y-8Y8fM9>+-KtCZ)%b?N+m2Il6Nqrwu z6!$gL-Qssxt+wf*W8FA2)ft%9lR~%w0|b(92c({DKgFAykt&3sosri#8<7d#jF_oD zf@?G~BIOrqYqfaZD#HaH$J;`6@bLlZ;xlE}K}hPQ51`%eJ(P3th5VkI>Av*!?oZp> z{nEN>v5TSCI;=0I?22HRT_Sk?*v`~D_WLS(sLK1+f}D6C*iw{D z^oXAGBIJ);QZ=$kwN%~{9WYZ}HB^CcWGfkx407NoCz%C{a6nA~FPs|rB;kC%Y zF{SvY#o4#4JdZrDf=D`VE(xw;x5ed-x*M|TYqmlQ<6qojRSfB4UVGRsOBhu1=e|4m zID9SO9TsCfSoHcBdR{*{x>tL>fZX69QE0hcJ2*b>o^{nrz7|*dyve&4@Z{3_xx2-w zC5>wpi}&^dg_4-pz1{hx#BU0h03_zm27_L$Hbza}DMgBzEhK4C?nZh)$I;nBIDY;R z9ZhN*XxYfnVBujYq^YFl7Ap3%#OBLRGtZTIeLIXvAsLCaSpQaDVk(Q6AR(6(pId#H zYs+OlM2f-d7ogs574yfdi+6p}yATwR^r8C|`B9E3KyyWb2?!gEa4ziXkVcxfxI_Ee}e0}!8d13G2dIl{F<_ymF<7>!P^t zN8y8A7Wb!MB3tE`;EcJ6ukf8$;#DMRn4_R8u9BE=p0EUC|2cq6{!V5|t=4$FMfyN_mx@_4JqnbrEv`!U zP4BzUyjZ_->^c><0)jKk!}L2Z3e13M)yVO}2UiGz! zlKG#=`Xpt*{M|NPnxZH02roJ;^VkU4)Fdi)d%en{8h(ln{+6=!vN-}*kfyOfoMBpnzN;l9n#aKJl326ARFt62}UwEHV}vi zQc%OhMIy7xN74x%N1d_R!ff!2XUVRI^%aaaU}%##kbbsG(NUYWk-;??wd=#zYb&3c zglHN)6zw!BIjOnBLwU$+a2p(e9|F9hp#XF-u&5BYD1-qpXTZq~0%U*k=T*33e9%w2 z@fqQ*YwOUX_TzuJPg~~QkY5zN=70a{9{>wtP(7zUj1P{%PoR)nm=}DU@+@&zcR-H^ zXxh*EloC21|CH8W0`S)SqzGwYFeXgOr_C;{I 0) { + int j1 = this.field_149933_a.nextInt(21) + 10; + + if (j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, + p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if (itemstack.hasTagCompound()) { + entityitem.getEntityItem() + .setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; + entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; + p_149749_1_.spawnEntityInWorld(entityitem); + } + } + } + + p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); + } + + super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + } + +} diff --git a/com/hbm/handler/FluidTypeHandler.java b/com/hbm/handler/FluidTypeHandler.java index ca659ff74..35a722954 100644 --- a/com/hbm/handler/FluidTypeHandler.java +++ b/com/hbm/handler/FluidTypeHandler.java @@ -7,52 +7,54 @@ public class FluidTypeHandler { public enum FluidType { NONE (0x888888, 8947848, 0, 1, 1, "hbmfluid.none"), - WATER (0x3333FF, 3355647, 1, 1, 1, "hbmfluid.water"), - STEAM (0xe5e5e5, 15066597, 9, 2, 1, "hbmfluid.steam"), - COOLANT (0xd8fcff, 14220543, 2, 1, 1, "hbmfluid.coolant"), + WATER (0x3333FF, 3355647, 1, 1, 1, "hbmfluid.water"), + STEAM (0xe5e5e5, 15066597, 9, 2, 1, "hbmfluid.steam"), + HOTSTEAM (0xE7D6D6, 0xE7D6D6, 9, 2, 1, "hbmfluid.hotsteam"), + SUPERHOTSTEAM (0xE7B7B7, 0xE7B7B7, 9, 2, 1, "hbmfluid.superhotsteam"), + COOLANT (0xd8fcff, 14220543, 1, 1, 2, "hbmfluid.coolant"), - LAVA (0xFF3300, 16724736, 3, 1, 1, "hbmfluid.lava"), + LAVA (0xFF3300, 16724736, 3, 1, 1, "hbmfluid.lava"), - DEUTERIUM (0x0000FF, 255, 4, 1, 1, "hbmfluid.deuterium"), - TRITIUM (0x000099, 153, 5, 1, 1, "hbmfluid.tritium"), + DEUTERIUM (0x0000FF, 255, 4, 1, 1, "hbmfluid.deuterium"), + TRITIUM (0x000099, 153, 5, 1, 1, "hbmfluid.tritium"), - OIL (0x020202, 131586, 6, 1, 1, "hbmfluid.oil"), - HOTOIL (0x300900, 3148032, 8, 1, 1, "hbmfluid.hotoil"), + OIL (0x020202, 131586, 6, 1, 1, "hbmfluid.oil"), + HOTOIL (0x300900, 3148032, 8, 2, 1, "hbmfluid.hotoil"), - HEAVYOIL (0x141312, 1315602, 2, 2, 1, "hbmfluid.heavyoil"), - BITUMEN (0x1f2426, 2040870, 3, 2, 1, "hbmfluid.bitumen"), - SMEAR (0x190f01, 1642241, 7, 1, 1, "hbmfluid.smear"), - HEATINGOIL (0x211806, 2168838, 4, 2, 1, "hbmfluid.heatingoil"), + HEAVYOIL (0x141312, 1315602, 2, 2, 1, "hbmfluid.heavyoil"), + BITUMEN (0x1f2426, 2040870, 3, 2, 1, "hbmfluid.bitumen"), + SMEAR (0x190f01, 1642241, 7, 1, 1, "hbmfluid.smear"), + HEATINGOIL (0x211806, 2168838, 4, 2, 1, "hbmfluid.heatingoil"), - RECLAIMED (0x332b22, 3353378, 8, 1, 1, "hbmfluid.reclaimed"), - PETROIL (0x44413d, 4473149, 9, 1, 1, "hbmfluid.petroil"), + RECLAIMED (0x332b22, 3353378, 8, 1, 1, "hbmfluid.reclaimed"), + PETROIL (0x44413d, 4473149, 9, 1, 1, "hbmfluid.petroil"), - LUBRICANT (0x606060, 6316128, 10, 1, 1, "hbmfluid.lubricant"), + LUBRICANT (0x606060, 6316128, 10, 1, 1, "hbmfluid.lubricant"), - NAPHTHA (0x595744, 5855044, 5, 2, 1, "hbmfluid.naphtha"), - DIESEL (0xf2eed5, 15920853, 11, 1, 1, "hbmfluid.diesel"), + NAPHTHA (0x595744, 5855044, 5, 2, 1, "hbmfluid.naphtha"), + DIESEL (0xf2eed5, 15920853, 11, 1, 1, "hbmfluid.diesel"), - LIGHTOIL (0x8c7451, 9204817, 6, 2, 1, "hbmfluid.lightoil"), - KEROSENE (0xffa5d2, 16754130, 12, 1, 1, "hbmfluid.kerosene"), + LIGHTOIL (0x8c7451, 9204817, 6, 2, 1, "hbmfluid.lightoil"), + KEROSENE (0xffa5d2, 16754130, 12, 1, 1, "hbmfluid.kerosene"), - GAS (0xfffeed, 16776941, 13, 1, 1, "hbmfluid.gas"), - PETROLEUM (0x7cb7c9, 8173513, 7, 2, 1, "hbmfluid.petroleum"), + GAS (0xfffeed, 16776941, 13, 1, 1, "hbmfluid.gas"), + PETROLEUM (0x7cb7c9, 8173513, 7, 2, 1, "hbmfluid.petroleum"), - BIOGAS (0xbfd37c, 12571516, 12, 2, 1, "hbmfluid.biogas"), - BIOFUEL (0xeef274, 15659636, 13, 2, 1, "hbmfluid.biofuel"), + BIOGAS (0xbfd37c, 12571516, 12, 2, 1, "hbmfluid.biogas"), + BIOFUEL (0xeef274, 15659636, 13, 2, 1, "hbmfluid.biofuel"), - NITAN (0x8018ad, 8394925, 15, 2, 1, "hbmfluid.nitan"), + NITAN (0x8018ad, 8394925, 15, 2, 1, "hbmfluid.nitan"), - UF6 (0xD1CEBE, 13749950, 14, 1, 1, "hbmfluid.uf6"), - PUF6 (0x4C4C4C, 5000268, 15, 1, 1, "hbmfluid.puf6"), - SAS3 (0x4ffffc, 5242876, 14, 2, 1, "hbmfluid.sas3"), + UF6 (0xD1CEBE, 13749950, 14, 1, 1, "hbmfluid.uf6"), + PUF6 (0x4C4C4C, 5000268, 15, 1, 1, "hbmfluid.puf6"), + SAS3 (0x4ffffc, 5242876, 14, 2, 1, "hbmfluid.sas3"), - AMAT (0x010101, 65793, 0, 2, 1, "hbmfluid.amat"), - ASCHRAB (0xb50000, 11862016, 1, 2, 1, "hbmfluid.aschrab"), + AMAT (0x010101, 65793, 0, 2, 1, "hbmfluid.amat"), + ASCHRAB (0xb50000, 11862016, 1, 2, 1, "hbmfluid.aschrab"), - ACID (0xfff7aa, 16775082, 10, 2, 1, "hbmfluid.acid"), - WATZ (0x86653E, 8807742, 11, 2, 1, "hbmfluid.watz"), - CRYOGEL (0x32ffff, 3342335, 0, 1, 2, "hbmfluid.cryogel"); + ACID (0xfff7aa, 16775082, 10, 2, 1, "hbmfluid.acid"), + WATZ (0x86653E, 8807742, 11, 2, 1, "hbmfluid.watz"), + CRYOGEL (0x32ffff, 3342335, 0, 1, 2, "hbmfluid.cryogel"); //Approximate HEX Color of the fluid, used for pipe rendering diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index fb4d9fadc..599a36c15 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -34,6 +34,7 @@ import com.hbm.tileentity.machine.TileEntityFusionMultiblock; import com.hbm.tileentity.machine.TileEntityMachineAssembler; import com.hbm.tileentity.machine.TileEntityMachineBattery; import com.hbm.tileentity.machine.TileEntityMachineBoiler; +import com.hbm.tileentity.machine.TileEntityMachineBoilerElectric; import com.hbm.tileentity.machine.TileEntityMachineCMBFactory; import com.hbm.tileentity.machine.TileEntityMachineCentrifuge; import com.hbm.tileentity.machine.TileEntityMachineChemplant; @@ -66,6 +67,7 @@ import com.hbm.tileentity.machine.TileEntityMachineShredder; import com.hbm.tileentity.machine.TileEntityMachineSiren; import com.hbm.tileentity.machine.TileEntityMachineTeleLinker; import com.hbm.tileentity.machine.TileEntityMachineTeleporter; +import com.hbm.tileentity.machine.TileEntityMachineTurbine; import com.hbm.tileentity.machine.TileEntityMachineTurbofan; import com.hbm.tileentity.machine.TileEntityMachineUF6Tank; import com.hbm.tileentity.machine.TileEntityNukeFurnace; @@ -728,6 +730,24 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_machine_boiler_electric: + { + if(entity instanceof TileEntityMachineBoilerElectric) + { + return new ContainerMachineBoilerElectric(player.inventory, (TileEntityMachineBoilerElectric) entity); + } + return null; + } + + case ModBlocks.guiID_machine_turbine: + { + if(entity instanceof TileEntityMachineTurbine) + { + return new ContainerMachineTurbine(player.inventory, (TileEntityMachineTurbine) entity); + } + return null; + } } return null; } @@ -1377,6 +1397,24 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_machine_boiler_electric: + { + if(entity instanceof TileEntityMachineBoilerElectric) + { + return new GUIMachineBoilerElectric(player.inventory, (TileEntityMachineBoilerElectric) entity); + } + return null; + } + + case ModBlocks.guiID_machine_turbine: + { + if(entity instanceof TileEntityMachineTurbine) + { + return new GUIMachineTurbine(player.inventory, (TileEntityMachineTurbine) entity); + } + return null; + } } } else { //CLIENTONLY GUIS diff --git a/com/hbm/handler/nei/BoilerRecipeHandler.java b/com/hbm/handler/nei/BoilerRecipeHandler.java new file mode 100644 index 000000000..55e86b9f9 --- /dev/null +++ b/com/hbm/handler/nei/BoilerRecipeHandler.java @@ -0,0 +1,142 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import com.hbm.handler.nei.RefineryRecipeHandler.SmeltingSet; +import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.gui.GUIMachineBoiler; +import com.hbm.inventory.gui.GUIMachineBoilerElectric; +import com.hbm.inventory.gui.GUIMachineRefinery; +import com.hbm.lib.RefStrings; + +import codechicken.nei.PositionedStack; +import codechicken.nei.api.IOverlayHandler; +import codechicken.nei.api.IRecipeOverlayRenderer; +import codechicken.nei.recipe.GuiRecipe; +import codechicken.nei.recipe.ICraftingHandler; +import codechicken.nei.recipe.TemplateRecipeHandler; +import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRect; +import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRectHandler; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; + +public class BoilerRecipeHandler extends TemplateRecipeHandler { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe + { + PositionedStack input; + PositionedStack result; + + public SmeltingSet(ItemStack input, ItemStack result) { + input.stackSize = 1; + this.input = new PositionedStack(input, 21 + 9, 6 + 18); + this.result = new PositionedStack(result, 120, 24); + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleticks / 48, Arrays.asList(new PositionedStack[] {input})); + } + + @Override + public PositionedStack getResult() { + return result; + } + } + + @Override + public String getRecipeName() { + return "Boiler"; + } + + @Override + public String getGuiTexture() { + return RefStrings.MODID + ":textures/gui/gui_nei_boiler.png"; + } + + @Override + public Class getGuiClass() { + return null; + } + + @Override + public TemplateRecipeHandler newInstance() { + return super.newInstance(); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if ((outputId.equals("ntmboiler")) && getClass() == BoilerRecipeHandler.class) { + Map recipes = MachineRecipes.instance().getBoilerRecipes(); + for (Map.Entry recipe : recipes.entrySet()) { + this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), + (ItemStack)recipe.getValue())); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + Map recipes = MachineRecipes.instance().getBoilerRecipes(); + for (Map.Entry recipe : recipes.entrySet()) { + if (compareFluidStacks((ItemStack)recipe.getValue(), result) || + compareFluidStacks((ItemStack)recipe.getValue(), result)) + this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), + (ItemStack)recipe.getValue())); + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + if ((inputId.equals("ntmboiler")) && getClass() == BoilerRecipeHandler.class) { + loadCraftingRecipes("ntmboiler", new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + Map recipes = MachineRecipes.instance().getBoilerRecipes(); + for (Map.Entry recipe : recipes.entrySet()) { + if (compareFluidStacks(ingredient, (ItemStack)recipe.getKey())) + this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), + (ItemStack)recipe.getValue())); + } + } + + private boolean compareFluidStacks(ItemStack sta1, ItemStack sta2) { + return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); + } + + @Override + public void drawExtras(int recipe) { + drawProgressBar(80, 23, 0, 85, 6, 17, 240, 3); + } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); + + transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 36 - 27 - 9, 23, 36, 18), "ntmboiler")); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2 + 36, 89 - 29 - 18 - 18, 18, 18 * 2), "ntmboiler")); + guiGui.add(GUIMachineBoiler.class); + guiGui.add(GUIMachineBoilerElectric.class); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } +} diff --git a/com/hbm/inventory/MachineRecipes.java b/com/hbm/inventory/MachineRecipes.java index f26bb827a..a3313a769 100644 --- a/com/hbm/inventory/MachineRecipes.java +++ b/com/hbm/inventory/MachineRecipes.java @@ -477,12 +477,26 @@ public class MachineRecipes { switch(type) { case WATER: return new Object[] { FluidType.STEAM, 5, 5, 10000 }; + case STEAM: return new Object[] { FluidType.HOTSTEAM, 5, 50, 45000 }; case OIL: return new Object[] { FluidType.HOTOIL, 5, 5, 35000 }; } return null; } + //return: FluidType, amount produced, amount required, HE produced + @SuppressWarnings("incomplete-switch") + public static Object[] getTurbineOutput(FluidType type) { + + switch(type) { + case STEAM: return new Object[] { FluidType.WATER, 5, 5, 50 }; + case HOTSTEAM: return new Object[] { FluidType.STEAM, 50, 5, 250 }; + case SUPERHOTSTEAM: return new Object[] { FluidType.HOTSTEAM, 50, 5, 750 }; + } + + return null; + } + public static List stamps_flat = new ArrayList() {{ add(ModItems.stamp_stone_flat); add(ModItems.stamp_iron_flat); @@ -4641,7 +4655,7 @@ public class MachineRecipes { Map recipes = new HashMap(); - ItemStack oil = new ItemStack(ModItems.fluid_icon, 1, Arrays.asList(FluidType.values()).indexOf(FluidType.OIL)); + ItemStack oil = new ItemStack(ModItems.fluid_icon, 1, Arrays.asList(FluidType.values()).indexOf(FluidType.HOTOIL)); oil.stackTagCompound = new NBTTagCompound(); oil.stackTagCompound.setInteger("fill", 1000); @@ -4671,6 +4685,30 @@ public class MachineRecipes { return recipes; } + public Map getBoilerRecipes() { + + Map recipes = new HashMap(); + + for(int i = 0; i < FluidType.values().length; i++) { + Object[] outs = getBoilerOutput(FluidType.getEnum(i)); + + if(outs != null) { + + ItemStack in = new ItemStack(ModItems.fluid_icon, 1, i); + in.stackTagCompound = new NBTTagCompound(); + in.stackTagCompound.setInteger("fill", (Integer) outs[2]); + + ItemStack out = new ItemStack(ModItems.fluid_icon, 1, ((FluidType)outs[0]).getID()); + out.stackTagCompound = new NBTTagCompound(); + out.stackTagCompound.setInteger("fill", (Integer) outs[1]); + + recipes.put(in, out); + } + } + + return recipes; + } + public static List getChemInputFromTempate(ItemStack stack) { if(stack == null || !(stack.getItem() instanceof ItemChemistryTemplate)) diff --git a/com/hbm/inventory/container/ContainerElectricFurnace.java b/com/hbm/inventory/container/ContainerElectricFurnace.java index 8dc5c61fb..ec58470e9 100644 --- a/com/hbm/inventory/container/ContainerElectricFurnace.java +++ b/com/hbm/inventory/container/ContainerElectricFurnace.java @@ -13,12 +13,8 @@ import net.minecraft.item.ItemStack; public class ContainerElectricFurnace extends Container { private TileEntityMachineElectricFurnace diFurnace; - private int dualCookTime; - private int lastItemBurnTime; public ContainerElectricFurnace(InventoryPlayer invPlayer, TileEntityMachineElectricFurnace tedf) { - dualCookTime = 0; - lastItemBurnTime = 0; diFurnace = tedf; @@ -43,7 +39,6 @@ public class ContainerElectricFurnace extends Container { @Override public void addCraftingToCrafters(ICrafting crafting) { super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 0, this.diFurnace.dualCookTime); } @Override @@ -86,29 +81,4 @@ public class ContainerElectricFurnace extends Container { public boolean canInteractWith(EntityPlayer player) { return diFurnace.isUseableByPlayer(player); } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - for(int i = 0; i < this.crafters.size(); i++) - { - ICrafting par1 = (ICrafting)this.crafters.get(i); - - if(this.dualCookTime != this.diFurnace.dualCookTime) - { - par1.sendProgressBarUpdate(this, 0, this.diFurnace.dualCookTime); - } - } - - this.dualCookTime = this.diFurnace.dualCookTime; - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 0) - { - diFurnace.dualCookTime = j; - } - } } diff --git a/com/hbm/inventory/container/ContainerMachineBoilerElectric.java b/com/hbm/inventory/container/ContainerMachineBoilerElectric.java new file mode 100644 index 000000000..c956ec9a2 --- /dev/null +++ b/com/hbm/inventory/container/ContainerMachineBoilerElectric.java @@ -0,0 +1,95 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.TileEntityMachineBoiler; +import com.hbm.tileentity.machine.TileEntityMachineBoilerElectric; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineBoilerElectric extends Container { + + private TileEntityMachineBoilerElectric diFurnace; + + public ContainerMachineBoilerElectric(InventoryPlayer invPlayer, TileEntityMachineBoilerElectric tedf) { + + diFurnace = tedf; + + //Fluid ID + this.addSlotToContainer(new Slot(tedf, 0, 8, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 1, 8, 53)); + //Input IO + this.addSlotToContainer(new Slot(tedf, 2, 44, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 3, 44, 53)); + //Battery + this.addSlotToContainer(new Slot(tedf, 4, 98, 53)); + //Output IO + this.addSlotToContainer(new Slot(tedf, 5, 152, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 6, 152, 53)); + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 9; j++) + { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public void addCraftingToCrafters(ICrafting crafting) { + super.addCraftingToCrafters(crafting); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 <= 6) { + if (!this.mergeItemStack(var5, 7, this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 4, 5, false)) + { + if (!this.mergeItemStack(var5, 2, 3, false)) + if (!this.mergeItemStack(var5, 5, 6, false)) + if (!this.mergeItemStack(var5, 0, 1, false)) + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return diFurnace.isUseableByPlayer(player); + } +} diff --git a/com/hbm/inventory/container/ContainerMachineCoal.java b/com/hbm/inventory/container/ContainerMachineCoal.java index 2df372592..cd826de2d 100644 --- a/com/hbm/inventory/container/ContainerMachineCoal.java +++ b/com/hbm/inventory/container/ContainerMachineCoal.java @@ -13,11 +13,8 @@ import net.minecraft.item.ItemStack; public class ContainerMachineCoal extends Container { private TileEntityMachineCoal diFurnace; - private int burnTime; public ContainerMachineCoal(InventoryPlayer invPlayer, TileEntityMachineCoal tedf) { - burnTime = 0; - diFurnace = tedf; this.addSlotToContainer(new Slot(tedf, 0, 44, 53 - 36)); @@ -42,7 +39,6 @@ public class ContainerMachineCoal extends Container { @Override public void addCraftingToCrafters(ICrafting crafting) { super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 0, this.diFurnace.burnTime); } @Override @@ -86,29 +82,4 @@ public class ContainerMachineCoal extends Container { public boolean canInteractWith(EntityPlayer player) { return diFurnace.isUseableByPlayer(player); } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - for(int i = 0; i < this.crafters.size(); i++) - { - ICrafting par1 = (ICrafting)this.crafters.get(i); - - if(this.burnTime != this.diFurnace.burnTime) - { - par1.sendProgressBarUpdate(this, 0, this.diFurnace.burnTime); - } - } - - this.burnTime = this.diFurnace.burnTime; - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 0) - { - diFurnace.burnTime = j; - } - } } diff --git a/com/hbm/inventory/container/ContainerMachineTurbine.java b/com/hbm/inventory/container/ContainerMachineTurbine.java new file mode 100644 index 000000000..788cd8d08 --- /dev/null +++ b/com/hbm/inventory/container/ContainerMachineTurbine.java @@ -0,0 +1,94 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.TileEntityMachineTurbine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineTurbine extends Container { + + private TileEntityMachineTurbine diFurnace; + + public ContainerMachineTurbine(InventoryPlayer invPlayer, TileEntityMachineTurbine tedf) { + + diFurnace = tedf; + + //Fluid ID + this.addSlotToContainer(new Slot(tedf, 0, 8, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 1, 8, 53)); + //Input IO + this.addSlotToContainer(new Slot(tedf, 2, 44, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 3, 44, 53)); + //Battery + this.addSlotToContainer(new Slot(tedf, 4, 98, 53)); + //Output IO + this.addSlotToContainer(new Slot(tedf, 5, 152, 17)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 6, 152, 53)); + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 9; j++) + { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public void addCraftingToCrafters(ICrafting crafting) { + super.addCraftingToCrafters(crafting); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 <= 6) { + if (!this.mergeItemStack(var5, 7, this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 4, 5, false)) + { + if (!this.mergeItemStack(var5, 2, 3, false)) + if (!this.mergeItemStack(var5, 5, 6, false)) + if (!this.mergeItemStack(var5, 0, 1, false)) + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return diFurnace.isUseableByPlayer(player); + } +} diff --git a/com/hbm/inventory/gui/GUIMachineBoiler.java b/com/hbm/inventory/gui/GUIMachineBoiler.java index 087e709f1..aeff05a32 100644 --- a/com/hbm/inventory/gui/GUIMachineBoiler.java +++ b/com/hbm/inventory/gui/GUIMachineBoiler.java @@ -2,6 +2,7 @@ package com.hbm.inventory.gui; import org.lwjgl.opengl.GL11; +import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerMachineBoiler; import com.hbm.inventory.container.ContainerMachineGasCent; @@ -33,8 +34,32 @@ public class GUIMachineBoiler extends GuiInfoContainer { diFurnace.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 16, 52); diFurnace.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 69 - 52, 16, 52); - + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 102, guiTop + 16, 8, 18, mouseX, mouseY, new String[] { String.valueOf((int)((double)diFurnace.heat / 100D)) + "°C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 97, guiTop + 34, 18, 18, mouseX, mouseY, new String[] { String.valueOf((int)(Math.ceil((double)diFurnace.burnTime / 20D))) + "s"}); + + String[] text = new String[] { "Heat produced:", + " 0.5°C/t", + " or 10°C/s", + "Heat consumed:", + " 0.15°C/t", + " or 3.0°C/s (base)", + " 0.25°C/t", + " or 5.0°C/t (once boiling point is reached)", + " 0.05°C/t", + " or 1.0°C/t (for every subsequent multiple of boiling point)" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + + String[] text1 = new String[] { "Boiling rate:", + " Base rate * amount of full multiples", + " of boiling points reached" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + + String[] text2 = new String[] { "Error: Liquid can not be boiled!" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 32, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 32, text2); + } } @Override @@ -51,12 +76,22 @@ public class GUIMachineBoiler extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - /*int i = (int)diFurnace.getPowerRemainingScaled(34); - drawTexturedModalRect(guiLeft + 8, guiTop + 51 - i, 176, 34 - i, 16, i);*/ + if(diFurnace.burnTime > 0) + drawTexturedModalRect(guiLeft + 97, guiTop + 34, 176, 0, 18, 18); int j = (int)diFurnace.getHeatScaled(17); drawTexturedModalRect(guiLeft + 103, guiTop + 33 - j, 194, 16 - j, 6, j); + if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineBoiler) + diFurnace = (TileEntityMachineBoiler) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + + this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32, 16, 16, 6); + } + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[0].getSheet()); diFurnace.tanks[0].renderTank(this, guiLeft + 62, guiTop + 69, diFurnace.tanks[0].getTankType().textureX() * FluidTank.x, diFurnace.tanks[0].getTankType().textureY() * FluidTank.y, 16, 52); diff --git a/com/hbm/inventory/gui/GUIMachineBoilerElectric.java b/com/hbm/inventory/gui/GUIMachineBoilerElectric.java new file mode 100644 index 000000000..d6aca1847 --- /dev/null +++ b/com/hbm/inventory/gui/GUIMachineBoilerElectric.java @@ -0,0 +1,103 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.container.ContainerMachineBoilerElectric; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineBoilerElectric; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineBoilerElectric extends GuiInfoContainer { + + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_boiler_electric.png"); + private TileEntityMachineBoilerElectric diFurnace; + + public GUIMachineBoilerElectric(InventoryPlayer invPlayer, TileEntityMachineBoilerElectric tedf) { + super(new ContainerMachineBoilerElectric(invPlayer, tedf)); + diFurnace = tedf; + + this.xSize = 176; + this.ySize = 168; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + diFurnace.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 16, 52); + diFurnace.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 69 - 52, 16, 52); + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 102, guiTop + 16, 8, 18, mouseX, mouseY, new String[] { String.valueOf((int)((double)diFurnace.heat / 100D)) + "°C"}); + + String[] text = new String[] { "Heat produced:", + " 1.5°C/t", + " or 30°C/s", + "Heat consumed:", + " 0.15°C/t", + " or 3.0°C/s (base)", + " 0.25°C/t", + " or 5.0°C/t (once boiling point is reached)", + " 0.15°C/t", + " or 3.0°C/t (for every subsequent multiple of boiling point)" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + + String[] text1 = new String[] { "Boiling rate:", + " Base rate * amount of full multiples", + " of boiling points reached" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + + String[] text2 = new String[] { "Error: Liquid can not be boiled!" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 32, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 32, text2); + } + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 123, guiTop + 69 - 34, 7, 34, diFurnace.power, diFurnace.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(diFurnace.power > 0) + drawTexturedModalRect(guiLeft + 97, guiTop + 34, 176, 0, 18, 18); + + int j = (int)diFurnace.getHeatScaled(17); + drawTexturedModalRect(guiLeft + 103, guiTop + 33 - j, 194, 16 - j, 6, j); + + int i = (int)diFurnace.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 123, guiTop + 69 - i, 200, 34 - i, 7, i); + + if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineBoilerElectric) + diFurnace = (TileEntityMachineBoilerElectric) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + + this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32, 16, 16, 6); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[0].getSheet()); + diFurnace.tanks[0].renderTank(this, guiLeft + 62, guiTop + 69, diFurnace.tanks[0].getTankType().textureX() * FluidTank.x, diFurnace.tanks[0].getTankType().textureY() * FluidTank.y, 16, 52); + + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[1].getSheet()); + diFurnace.tanks[1].renderTank(this, guiLeft + 134, guiTop + 69, diFurnace.tanks[1].getTankType().textureX() * FluidTank.x, diFurnace.tanks[1].getTankType().textureY() * FluidTank.y, 16, 52); + } +} diff --git a/com/hbm/inventory/gui/GUIMachineCoal.java b/com/hbm/inventory/gui/GUIMachineCoal.java index 2f50b2199..a6e9953d8 100644 --- a/com/hbm/inventory/gui/GUIMachineCoal.java +++ b/com/hbm/inventory/gui/GUIMachineCoal.java @@ -53,6 +53,8 @@ public class GUIMachineCoal extends GuiInfoContainer { "the generator to function properly!" }; this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 32, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 32, text2); } + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 34, 18, 18, mouseX, mouseY, new String[] { String.valueOf((int)(Math.ceil((double)diFurnace.burnTime / 20D))) + "s"}); } @Override @@ -69,6 +71,9 @@ public class GUIMachineCoal extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineCoal) + diFurnace = (TileEntityMachineCoal) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + if(diFurnace.power > 0) { int i = (int)diFurnace.getPowerScaled(52); drawTexturedModalRect(guiLeft + 152, guiTop + 69 - i, 176, 52 - i, 16, i); diff --git a/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index b11b0aeba..ad106eb95 100644 --- a/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -46,7 +46,19 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - if(diFurnace.hasPower()) { + //failsafe TE clone + //if initial TE invalidates, new TE is fetched + //if initial ZE is still present, it'll be used instead + //works so that container packets can still be used + //efficiency! + TileEntityMachineElectricFurnace fs = null; + + if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineElectricFurnace) + fs = (TileEntityMachineElectricFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + else + fs = diFurnace; + + if(fs.hasPower()) { int i = (int)diFurnace.getPowerRemainingScaled(52); drawTexturedModalRect(guiLeft + 20, guiTop + 69 - i, 200, 52 - i, 16, i); } @@ -56,7 +68,7 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 56, guiTop + 36, 176, 0, 15, 16); } - int j1 = diFurnace.getDiFurnaceProgressScaled(24); + int j1 = fs.getDiFurnaceProgressScaled(24); drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 14, j1 + 1, 17); } diff --git a/com/hbm/inventory/gui/GUIMachineTurbine.java b/com/hbm/inventory/gui/GUIMachineTurbine.java new file mode 100644 index 000000000..a33b4da39 --- /dev/null +++ b/com/hbm/inventory/gui/GUIMachineTurbine.java @@ -0,0 +1,82 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.container.ContainerMachineTurbine; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineTurbine; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineTurbine extends GuiInfoContainer { + + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_turbine.png"); + private TileEntityMachineTurbine diFurnace; + + public GUIMachineTurbine(InventoryPlayer invPlayer, TileEntityMachineTurbine tedf) { + super(new ContainerMachineTurbine(invPlayer, tedf)); + diFurnace = tedf; + + this.xSize = 176; + this.ySize = 168; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + diFurnace.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 16, 52); + diFurnace.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 69 - 52, 16, 52); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + + String[] text2 = new String[] { "Error: Invalid fluid!" }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 32, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 32, text2); + } + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 123, guiTop + 69 - 34, 7, 34, diFurnace.power, diFurnace.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(diFurnace.tanks[0].getTankType().name().equals(FluidType.STEAM.name())) { + drawTexturedModalRect(guiLeft + 99, guiTop + 18, 183, 0, 14, 14); + } + if(diFurnace.tanks[0].getTankType().name().equals(FluidType.HOTSTEAM.name())) { + drawTexturedModalRect(guiLeft + 99, guiTop + 18, 183, 14, 14, 14); + } + if(diFurnace.tanks[0].getTankType().name().equals(FluidType.SUPERHOTSTEAM.name())) { + drawTexturedModalRect(guiLeft + 99, guiTop + 18, 183, 28, 14, 14); + } + + int i = (int)diFurnace.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 123, guiTop + 69 - i, 176, 34 - i, 7, i); + + if(diFurnace.tanks[1].getTankType().name().equals(FluidType.NONE.name())) { + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32, 16, 16, 6); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[0].getSheet()); + diFurnace.tanks[0].renderTank(this, guiLeft + 62, guiTop + 69, diFurnace.tanks[0].getTankType().textureX() * FluidTank.x, diFurnace.tanks[0].getTankType().textureY() * FluidTank.y, 16, 52); + + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[1].getSheet()); + diFurnace.tanks[1].renderTank(this, guiLeft + 134, guiTop + 69, diFurnace.tanks[1].getTankType().textureX() * FluidTank.x, diFurnace.tanks[1].getTankType().textureY() * FluidTank.y, 16, 52); + } +} diff --git a/com/hbm/lib/Library.java b/com/hbm/lib/Library.java index 0a45e7d2b..f042682d1 100644 --- a/com/hbm/lib/Library.java +++ b/com/hbm/lib/Library.java @@ -1206,7 +1206,8 @@ public class Library { } } - if(tileentity instanceof IFluidAcceptor && newTact && !(tileentity instanceof TileEntityMachineFluidTank && ((TileEntityMachineFluidTank)tileentity).dna())) + if(tileentity instanceof IFluidAcceptor && newTact && !(tileentity instanceof TileEntityMachineFluidTank && ((TileEntityMachineFluidTank)tileentity).dna()) + && ((IFluidAcceptor)tileentity).getMaxFluidFill(type) > 0 && ((IFluidAcceptor)tileentity).getMaxFluidFill(type) - ((IFluidAcceptor)tileentity).getFluidFill(type) > 0) { that.getFluidList(type).add((IFluidAcceptor)tileentity); } diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index 99c8bef60..d9b4d6c7c 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -544,7 +544,7 @@ public class CraftingManager { //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_reactor), 1), new Object[] { "LSL", "SCS", "LSL", 'S', "ingotSteel", 'L', "ingotLead", 'C', ModItems.reactor_core })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_nuke_furnace_off), 1), new Object[] { "SSS", "SFS", "CCC", 'S', "plateSteel", 'C', "plateCopper", 'F', Item.getItemFromBlock(Blocks.furnace) })); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_rtg_furnace_off), 1), new Object[] { "NNN", "NFN", "UUU", 'N', "plateDenseLead", 'U', ModItems.rtg_unit, 'F', Item.getItemFromBlock(Blocks.furnace) })); - GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 1), new Object[] { "BBB", "WFW", "RRR", 'B', ModItems.ingot_beryllium, 'R', ModItems.coil_tungsten, 'W', ModItems.wire_red_copper, 'F', Item.getItemFromBlock(Blocks.furnace) }); + GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 1), new Object[] { "BBB", "WFW", "RRR", 'B', ModItems.ingot_beryllium, 'R', ModItems.coil_tungsten, 'W', ModItems.board_copper, 'F', Item.getItemFromBlock(Blocks.furnace) }); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_generator), 1), new Object[] { "SLS", "LCL", "SLS", 'C', ModItems.circuit_red_copper, 'L', ModItems.rod_quad_lead, 'S', "ingotSteel" })); //GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_industrial_generator), 1), new Object[] { "PPP", "FGG", "WSS", 'P', ModItems.board_copper, 'F', ModItems.generator_front, 'G', ModItems.generator_steel, 'W', ModBlocks.red_wire_coated, 'S', ModItems.pedestal_steel }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.red_wire_coated), 16), new Object[] { "WRW", "RIR", "WRW", 'W', ModItems.plate_polymer, 'I', "ingotRedstoneAlloy", 'R', ModItems.wire_red_copper })); @@ -558,6 +558,8 @@ public class CraftingManager { //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_battery), 1), new Object[] { "TST", "RIR", "TLT", 'T', "ingotTungsten", 'I', "ingotRedstoneAlloy", 'R', ModItems.wire_red_copper, 'S', "blockSulfur", 'L', "blockLead" })); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_battery), 1), new Object[] { "TLT", "RIR", "TST", 'T', "ingotTungsten", 'I', "ingotRedstoneAlloy", 'R', ModItems.wire_red_copper, 'S', "blockSulfur", 'L', "blockLead" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', "ingotSteel", 'T', ModItems.tank_steel, 'C', "ingotRedstoneAlloy", 'F', Blocks.furnace })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_boiler_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', "ingotSteel", 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', Blocks.furnace })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_boiler_electric_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', "ingotDesh", 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', ModBlocks.machine_electric_furnace_off })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_converter_he_rf, 1), new Object[] { "SSS", "CRB", "SSS", 'S', "ingotSteel", 'C', ModItems.coil_copper, 'R', ModItems.coil_copper_torus, 'B', "blockRedstone" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_converter_rf_he, 1), new Object[] { "SSS", "BRC", "SSS", 'S', ModItems.ingot_beryllium, 'C', ModItems.coil_copper, 'R', ModItems.coil_copper_torus, 'B', "blockRedstone" })); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_schrabidium_transmutator), 1), new Object[] { "TST", "ARA", "BBB", 'S', ModItems.nugget_schrabidium , 'T', "ingotTitanium", 'A', Item.getItemFromBlock(ModBlocks.factory_advanced_hull), 'R', Item.getItemFromBlock(ModBlocks.machine_reactor), 'B', Item.getItemFromBlock(ModBlocks.machine_battery) })); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 2168027d2..a209ecc16 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -310,6 +310,7 @@ import com.hbm.tileentity.machine.TileEntityMachineSiren; import com.hbm.tileentity.machine.TileEntityMachineTeleLinker; import com.hbm.tileentity.machine.TileEntityMachineTeleporter; import com.hbm.tileentity.machine.TileEntityMachineTransformer; +import com.hbm.tileentity.machine.TileEntityMachineTurbine; import com.hbm.tileentity.machine.TileEntityMachineTurbofan; import com.hbm.tileentity.machine.TileEntityMachineUF6Tank; import com.hbm.tileentity.machine.TileEntityNukeFurnace; @@ -726,6 +727,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityMachineGasCent.class, "tileentity_gas_centrifuge"); GameRegistry.registerTileEntity(TileEntityMachineBoiler.class, "tileentity_boiler"); GameRegistry.registerTileEntity(TileEntityMachineBoilerElectric.class, "tileentity_electric_boiler"); + GameRegistry.registerTileEntity(TileEntityMachineTurbine.class, "tileentity_turbine"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); diff --git a/com/hbm/main/NEIConfig.java b/com/hbm/main/NEIConfig.java index 0ca3307fe..cb7c5ac18 100644 --- a/com/hbm/main/NEIConfig.java +++ b/com/hbm/main/NEIConfig.java @@ -32,6 +32,8 @@ public class NEIConfig implements IConfigureNEI { API.registerUsageHandler(new AssemblerRecipeHandler()); API.registerRecipeHandler(new RefineryRecipeHandler()); API.registerUsageHandler(new RefineryRecipeHandler()); + API.registerRecipeHandler(new BoilerRecipeHandler()); + API.registerUsageHandler(new BoilerRecipeHandler()); //API.registerRecipeHandler(new ModInfoHandler()); //API.registerUsageHandler(new ModInfoHandler()); API.registerRecipeHandler(new ChemplantRecipeHandler()); diff --git a/com/hbm/packet/AuxGaugePacket.java b/com/hbm/packet/AuxGaugePacket.java index 9d3e0d7a1..b0e219d89 100644 --- a/com/hbm/packet/AuxGaugePacket.java +++ b/com/hbm/packet/AuxGaugePacket.java @@ -9,8 +9,11 @@ import com.hbm.tileentity.machine.TileEntityAMSBase; import com.hbm.tileentity.machine.TileEntityAMSEmitter; import com.hbm.tileentity.machine.TileEntityAMSLimiter; import com.hbm.tileentity.machine.TileEntityMachineBoiler; +import com.hbm.tileentity.machine.TileEntityMachineBoilerElectric; import com.hbm.tileentity.machine.TileEntityMachineCentrifuge; +import com.hbm.tileentity.machine.TileEntityMachineCoal; import com.hbm.tileentity.machine.TileEntityMachineDiesel; +import com.hbm.tileentity.machine.TileEntityMachineElectricFurnace; import com.hbm.tileentity.machine.TileEntityMachineGasCent; import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; @@ -176,8 +179,26 @@ public class AuxGaugePacket implements IMessage { if(m.id == 1) boiler.burnTime = m.value; } + if (te instanceof TileEntityMachineCoal) { + TileEntityMachineCoal coalgen = (TileEntityMachineCoal)te; + + if(m.id == 0) + coalgen.burnTime = m.value; + } + if (te instanceof TileEntityMachineElectricFurnace) { + TileEntityMachineElectricFurnace furn = (TileEntityMachineElectricFurnace)te; + + if(m.id == 0) + furn.dualCookTime = m.value; + } + if (te instanceof TileEntityMachineBoilerElectric) { + TileEntityMachineBoilerElectric boiler = (TileEntityMachineBoilerElectric)te; + + if(m.id == 0) + boiler.heat = m.value; + } - } catch (Exception x) { } + } catch (Exception x) {} return null; } } diff --git a/com/hbm/tileentity/machine/TileEntityMachineBattery.java b/com/hbm/tileentity/machine/TileEntityMachineBattery.java index b69c5a47f..f074b81e7 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineBattery.java +++ b/com/hbm/tileentity/machine/TileEntityMachineBattery.java @@ -35,6 +35,10 @@ public class TileEntityMachineBattery extends TileEntity implements ISidedInvent private String customName; + public TileEntityMachineBattery() { + slots = new ItemStack[2]; + } + public TileEntityMachineBattery(long maxPower) { slots = new ItemStack[2]; this.maxPower = maxPower; diff --git a/com/hbm/tileentity/machine/TileEntityMachineBoiler.java b/com/hbm/tileentity/machine/TileEntityMachineBoiler.java index 08319b5ff..68162af2c 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineBoiler.java +++ b/com/hbm/tileentity/machine/TileEntityMachineBoiler.java @@ -34,7 +34,7 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento private ItemStack slots[]; public int burnTime; - public int heat; + public int heat = 2000; public static final int maxHeat = 50000; public int age = 0; public List list = new ArrayList(); @@ -218,6 +218,8 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento @Override public void updateEntity() { + boolean mark = false; + if(!worldObj.isRemote) { age++; @@ -231,7 +233,6 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento tanks[0].setType(0, 1, slots); tanks[0].loadTank(2, 3, slots); - //TODO: set tanks[1]'s type accordingly Object[] outs = MachineRecipes.getBoilerOutput(tanks[0].getTankType()); @@ -248,7 +249,7 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento boolean flag1 = false; - if(heat > 0) { + if(heat > 2000) { heat -= 15; } @@ -258,8 +259,10 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento flag1 = true; } - if(burnTime == 0 && !flag1) + if(burnTime == 0 && flag1) { MachineBoiler.updateBlockState(false, worldObj, xCoord, yCoord, zCoord); + mark = true; + } if(heat > maxHeat) heat = maxHeat; @@ -271,8 +274,10 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento if(slots[4].stackSize <= 0) slots[4] = null; - if(!flag1) + if(!flag1) { MachineBoiler.updateBlockState(true, worldObj, xCoord, yCoord, zCoord); + mark = true; + } } if(outs != null) { @@ -290,13 +295,17 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento } } - if(heat < 0) { - heat = 0; + if(heat < 2000) { + heat = 2000; } - + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, heat, 0)); PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, burnTime, 1)); } + + if(mark) { + this.markDirty(); + } } public boolean isItemValid() { diff --git a/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java b/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java index 6bb8b71fc..b2e3ac2d0 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java +++ b/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java @@ -1,7 +1,413 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.MachineBoiler; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IConsumer; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.interfaces.IFluidSource; +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.MachineRecipes; +import com.hbm.items.special.ItemBattery; +import com.hbm.lib.Library; +import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; +import com.hbm.packet.PacketDispatcher; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; -public class TileEntityMachineBoilerElectric extends TileEntity { +public class TileEntityMachineBoilerElectric extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IConsumer { + private ItemStack slots[]; + + public long power; + public int heat = 2000; + public static final long maxPower = 10000; + public static final int maxHeat = 80000; + public int age = 0; + public List list = new ArrayList(); + public FluidTank[] tanks; + + private static final int[] slots_top = new int[] {4}; + private static final int[] slots_bottom = new int[] {6}; + private static final int[] slots_side = new int[] {4}; + + private String customName; + + public TileEntityMachineBoilerElectric() { + slots = new ItemStack[7]; + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(FluidType.WATER, 16000, 0); + tanks[1] = new FluidTank(FluidType.STEAM, 16000, 1); + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) + { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.machineElecricBoiler"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) + { + return false; + }else{ + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; + } + } + + //You scrubs aren't needed for anything (right now) + @Override + public void openInventory() {} + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + + if(i == 4) + if(stack != null && stack.getItem() instanceof ItemBattery) + return true; + + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if(slots[i] != null) + { + if(slots[i].stackSize <= j) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) + { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + heat = nbt.getInteger("heat"); + power = nbt.getLong("power"); + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "steam"); + slots = new ItemStack[getSizeInventory()]; + + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) + { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("heat", heat); + nbt.setLong("power", power); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "steam"); + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) + { + if(slots[i] != null) + { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) + { + return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side); + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + public int getHeatScaled(int i) { + return (heat * i) / maxHeat; + } + + public long getPowerScaled(int i) { + return (power * i) / maxPower; + } + + @Override + public void updateEntity() { + + boolean mark = false; + + if(!worldObj.isRemote) + { + age++; + if(age >= 20) + { + age = 0; + } + + if(age == 9 || age == 19) + fillFluidInit(tanks[1].getTankType()); + + power = Library.chargeTEFromItems(slots, 4, power, maxPower); + + tanks[0].setType(0, 1, slots); + tanks[0].loadTank(2, 3, slots); + + Object[] outs = MachineRecipes.getBoilerOutput(tanks[0].getTankType()); + + if(outs == null) { + tanks[1].setTankType(FluidType.NONE); + } else { + tanks[1].setTankType((FluidType) outs[0]); + } + + tanks[1].unloadTank(5, 6, slots); + + for(int i = 0; i < 2; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + if(heat > 2000) { + heat -= 15; + } + + if(power > 0) { + power -= 100; + heat += 150; + } + + if(power <= 0 && worldObj.getBlock(xCoord, yCoord, zCoord) == ModBlocks.machine_boiler_electric_on) { + power = 0; + MachineBoiler.updateBlockState(false, worldObj, xCoord, yCoord, zCoord); + mark = true; + } + + if(heat > maxHeat) + heat = maxHeat; + + if(power > 0 && worldObj.getBlock(xCoord, yCoord, zCoord) == ModBlocks.machine_boiler_electric_off) { + MachineBoiler.updateBlockState(true, worldObj, xCoord, yCoord, zCoord); + mark = true; + } + + if(outs != null) { + + for(int i = 0; i < (heat / ((Integer)outs[3]).intValue()); i++) { + if(tanks[0].getFill() >= ((Integer)outs[2]).intValue() && tanks[1].getFill() + ((Integer)outs[1]).intValue() <= tanks[1].getMaxFill()) { + tanks[0].setFill(tanks[0].getFill() - ((Integer)outs[2]).intValue()); + tanks[1].setFill(tanks[1].getFill() + ((Integer)outs[1]).intValue()); + + if(i == 0) + heat -= 25; + else + heat -= 15; + } + } + } + + if(heat < 2000) { + heat = 2000; + } + + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, heat, 0)); + } + + if(mark) { + this.markDirty(); + } + } + + public boolean isItemValid() { + + if(slots[1] != null && TileEntityFurnace.getItemBurnTime(slots[1]) > 0) + { + return true; + } + + return false; + } + + @Override + public void fillFluidInit(FluidType type) { + + fillFluid(this.xCoord + 1, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord - 1, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord + 1, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord - 1, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord + 1, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord - 1, getTact(), type); + } + + @Override + public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { + Library.transmitFluid(x, y, z, newTact, this, worldObj, type); + } + + @Override + public boolean getTact() { + if(age >= 0 && age < 10) + { + return true; + } + + return false; + } + + @Override + public void setFluidFill(int i, FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + tanks[0].setFill(i); + else if(type.name().equals(tanks[1].getTankType().name())) + tanks[1].setFill(i); + } + + @Override + public int getFluidFill(FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getFill(); + else if(type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getFill(); + + return 0; + } + + @Override + public int getMaxFluidFill(FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getMaxFill(); + + return 0; + } + + @Override + public void setFillstate(int fill, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getTanks() { + List list = new ArrayList(); + list.add(tanks[0]); + list.add(tanks[1]); + + return list; + } + + @Override + public List getFluidList(FluidType type) { + return list; + } + + @Override + public void clearFluidList(FluidType type) { + list.clear(); + } + + @Override + public void setPower(long i) { + power = i; + } + + @Override + public long getPower() { + return power; + + } + + @Override + public long getMaxPower() { + return maxPower; + } } diff --git a/com/hbm/tileentity/machine/TileEntityMachineCoal.java b/com/hbm/tileentity/machine/TileEntityMachineCoal.java index 5edf77b0a..f69e58429 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineCoal.java +++ b/com/hbm/tileentity/machine/TileEntityMachineCoal.java @@ -26,6 +26,7 @@ import com.hbm.items.ModItems; import com.hbm.items.special.ItemBattery; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; public class TileEntityMachineCoal extends TileEntity implements ISidedInventory, ISource, IFluidContainer, IFluidAcceptor { @@ -257,7 +258,9 @@ public class TileEntityMachineCoal extends TileEntity implements ISidedInventory flag1 = true; MachineCoal.updateBlockState(this.burnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); } + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, burnTime, 0)); generate(); } diff --git a/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index c03a2d2bf..44ba44566 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -5,6 +5,7 @@ import com.hbm.interfaces.IConsumer; import com.hbm.items.special.ItemBattery; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import net.minecraft.entity.player.EntityPlayer; @@ -218,7 +219,7 @@ public class TileEntityMachineElectricFurnace extends TileEntity implements ISid return false; } ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[1]); - //ItemStack itemStack = MachineRecipes.getShredderResult(this.slots[1]); + if(itemStack == null) { return false; @@ -243,7 +244,6 @@ public class TileEntityMachineElectricFurnace extends TileEntity implements ISid private void processItem() { if(canProcess()) { ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[1]); - //ItemStack itemStack = MachineRecipes.getShredderResult(this.slots[1]); if(slots[2] == null) { @@ -305,8 +305,9 @@ public class TileEntityMachineElectricFurnace extends TileEntity implements ISid } power = Library.chargeTEFromItems(slots, 0, power, maxPower); - + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, dualCookTime, 0)); } diff --git a/com/hbm/tileentity/machine/TileEntityMachineRefinery.java b/com/hbm/tileentity/machine/TileEntityMachineRefinery.java index b0b47d9d0..81cb44146 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineRefinery.java +++ b/com/hbm/tileentity/machine/TileEntityMachineRefinery.java @@ -9,6 +9,7 @@ import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; import com.hbm.interfaces.IFluidSource; import com.hbm.interfaces.IOilAcceptor; +import com.hbm.inventory.FluidContainerRegistry; import com.hbm.inventory.FluidTank; import com.hbm.items.ModItems; import com.hbm.items.special.ItemBattery; @@ -33,7 +34,7 @@ public class TileEntityMachineRefinery extends TileEntity implements ISidedInven public long power = 0; public int sulfur = 0; public static final int maxSulfur = 100; - public static final long maxPower = 100000; + public static final long maxPower = 1000; public int age = 0; public FluidTank[] tanks; public List list1 = new ArrayList(); @@ -50,7 +51,7 @@ public class TileEntityMachineRefinery extends TileEntity implements ISidedInven public TileEntityMachineRefinery() { slots = new ItemStack[12]; tanks = new FluidTank[5]; - tanks[0] = new FluidTank(FluidType.OIL, 64000, 0); + tanks[0] = new FluidTank(FluidType.HOTOIL, 64000, 0); tanks[1] = new FluidTank(FluidType.HEAVYOIL, 16000, 1); tanks[2] = new FluidTank(FluidType.NAPHTHA, 16000, 2); tanks[3] = new FluidTank(FluidType.LIGHTOIL, 16000, 3); @@ -127,7 +128,7 @@ public class TileEntityMachineRefinery extends TileEntity implements ISidedInven if(i == 0 && stack.getItem() instanceof ItemBattery) return true; - if(i == 1 && stack.getItem() == ModItems.canister_oil) + if(i == 1 && FluidContainerRegistry.getFluidContent(stack, FluidType.HOTOIL) > 0) return true; if(stack.getItem() == ModItems.canister_empty) { if(i == 3) @@ -274,7 +275,7 @@ public class TileEntityMachineRefinery extends TileEntity implements ISidedInven int lo = 15; int pe = 10; - if(power >= 50 && tanks[0].getFill() >= 100 && + if(power >= 5 && tanks[0].getFill() >= 100 && tanks[1].getFill() + ho <= tanks[1].getMaxFill() && tanks[2].getFill() + nt <= tanks[2].getMaxFill() && tanks[3].getFill() + lo <= tanks[3].getMaxFill() && @@ -286,7 +287,7 @@ public class TileEntityMachineRefinery extends TileEntity implements ISidedInven tanks[3].setFill(tanks[3].getFill() + lo); tanks[4].setFill(tanks[4].getFill() + pe); sulfur += 1; - power -= 100; + power -= 5; } tanks[1].unloadTank(3, 4, slots); diff --git a/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/com/hbm/tileentity/machine/TileEntityMachineTurbine.java new file mode 100644 index 000000000..9a52a5522 --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -0,0 +1,382 @@ +package com.hbm.tileentity.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IConsumer; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.interfaces.IFluidSource; +import com.hbm.interfaces.ISource; +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.MachineRecipes; +import com.hbm.items.special.ItemBattery; +import com.hbm.lib.Library; +import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; +import com.hbm.packet.PacketDispatcher; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; + +public class TileEntityMachineTurbine extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, ISource { + + private ItemStack slots[]; + + public long power; + public static final long maxPower = 1000000; + public int age = 0; + public List list1 = new ArrayList(); + public List list2 = new ArrayList(); + public FluidTank[] tanks; + + private static final int[] slots_top = new int[] {4}; + private static final int[] slots_bottom = new int[] {6}; + private static final int[] slots_side = new int[] {4}; + + private String customName; + + public TileEntityMachineTurbine() { + slots = new ItemStack[7]; + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(FluidType.STEAM, 8000, 0); + tanks[1] = new FluidTank(FluidType.WATER, 8000, 1); + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) + { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.machineTurbine"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) + { + return false; + }else{ + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; + } + } + + //You scrubs aren't needed for anything (right now) + @Override + public void openInventory() {} + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + + if(i == 4) + if(stack != null && stack.getItem() instanceof ItemBattery) + return true; + + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if(slots[i] != null) + { + if(slots[i].stackSize <= j) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) + { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "steam"); + power = nbt.getLong("power"); + + slots = new ItemStack[getSizeInventory()]; + + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) + { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "steam"); + nbt.setLong("power", power); + + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) + { + if(slots[i] != null) + { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) + { + return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side); + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + public long getPowerScaled(int i) { + return (power * i) / maxPower; + } + + @Override + public void updateEntity() { + + boolean mark = false; + + if(!worldObj.isRemote) + { + age++; + if(age >= 20) + { + age = 0; + } + + if(age == 9 || age == 19) { + fillFluidInit(tanks[1].getTankType()); + ffgeuaInit(); + } + + tanks[0].setType(0, 1, slots); + tanks[0].loadTank(2, 3, slots); + + Object[] outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType()); + + if(outs == null) { + tanks[1].setTankType(FluidType.NONE); + } else { + tanks[1].setTankType((FluidType) outs[0]); + + for(int i = 0; i < tanks[0].getFill() / 50 + 1; i++) { + if(tanks[0].getFill() >= (Integer)outs[2] && tanks[1].getFill() + (Integer)outs[1] <= tanks[1].getMaxFill()) { + tanks[0].setFill(tanks[0].getFill() - (Integer)outs[2]); + tanks[1].setFill(tanks[1].getFill() + (Integer)outs[1]); + + power += (Integer)outs[3]; + + if(power > maxPower) + power = maxPower; + } + } + } + + tanks[1].unloadTank(5, 6, slots); + + for(int i = 0; i < 2; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + } + } + + @Override + public void ffgeua(int x, int y, int z, boolean newTact) { + + Library.ffgeua(x, y, z, newTact, this, worldObj); + } + + @Override + public void ffgeuaInit() { + ffgeua(this.xCoord, this.yCoord + 1, this.zCoord, getTact()); + ffgeua(this.xCoord, this.yCoord - 1, this.zCoord, getTact()); + ffgeua(this.xCoord - 1, this.yCoord, this.zCoord, getTact()); + ffgeua(this.xCoord + 1, this.yCoord, this.zCoord, getTact()); + ffgeua(this.xCoord, this.yCoord, this.zCoord - 1, getTact()); + ffgeua(this.xCoord, this.yCoord, this.zCoord + 1, getTact()); + } + + @Override + public void fillFluidInit(FluidType type) { + + fillFluid(this.xCoord + 1, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord - 1, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord + 1, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord - 1, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord + 1, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord - 1, getTact(), type); + } + + @Override + public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { + Library.transmitFluid(x, y, z, newTact, this, worldObj, type); + } + + @Override + public boolean getTact() { + if(age >= 0 && age < 10) + { + return true; + } + + return false; + } + + @Override + public void setFluidFill(int i, FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + tanks[0].setFill(i); + else if(type.name().equals(tanks[1].getTankType().name())) + tanks[1].setFill(i); + } + + @Override + public int getFluidFill(FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getFill(); + else if(type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getFill(); + + return 0; + } + + @Override + public int getMaxFluidFill(FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getMaxFill(); + + return 0; + } + + @Override + public void setFillstate(int fill, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getTanks() { + List list = new ArrayList(); + list.add(tanks[0]); + list.add(tanks[1]); + + return list; + } + + @Override + public List getFluidList(FluidType type) { + return list2; + } + + @Override + public void clearFluidList(FluidType type) { + list2.clear(); + } + + @Override + public long getSPower() { + return power; + } + + @Override + public void setSPower(long i) { + this.power = i; + } + + @Override + public List getList() { + return list1; + } + + @Override + public void clearList() { + this.list1.clear(); + } +}