From 6038c29bf86f915835008f1716a6e6d1a38aef70 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Wed, 11 Jul 2018 22:19:48 +0200 Subject: [PATCH] new reactor almost 100% functional (needs balancing) --- assets/hbm/sounds.json | 2 + assets/hbm/sounds/block/reactorStart.ogg | Bin 0 -> 11732 bytes assets/hbm/sounds/block/reactorStop.ogg | Bin 0 -> 6355 bytes assets/hbm/textures/gui/gui_radar.png | Bin 2252 -> 2827 bytes assets/hbm/textures/gui/gui_reactor_small.png | Bin 0 -> 2808 bytes assets/hbm/textures/gui/gui_selenium.png | Bin 3647 -> 3515 bytes com/hbm/blocks/ModBlocks.java | 5 + .../blocks/machine/MachineReactorSmall.java | 127 ++++ com/hbm/handler/GUIHandler.java | 19 + .../ContainerMachineReactorSmall.java | 98 +++ .../inventory/gui/GUIMachineReactorSmall.java | 103 ++++ com/hbm/items/ModItems.java | 24 +- com/hbm/items/special/ItemFuelRod.java | 52 +- com/hbm/main/ClientProxy.java | 1 + com/hbm/main/MainRegistry.java | 2 + com/hbm/packet/AuxButtonPacket.java | 87 +++ com/hbm/packet/AuxGaugePacket.java | 11 + com/hbm/packet/PacketDispatcher.java | 4 +- .../render/tileentity/RenderSmallReactor.java | 35 ++ .../TileEntityMachineReactorSmall.java | 556 ++++++++++++++++++ 20 files changed, 1088 insertions(+), 38 deletions(-) create mode 100644 assets/hbm/sounds/block/reactorStart.ogg create mode 100644 assets/hbm/sounds/block/reactorStop.ogg create mode 100644 assets/hbm/textures/gui/gui_reactor_small.png create mode 100644 com/hbm/blocks/machine/MachineReactorSmall.java create mode 100644 com/hbm/inventory/container/ContainerMachineReactorSmall.java create mode 100644 com/hbm/inventory/gui/GUIMachineReactorSmall.java create mode 100644 com/hbm/packet/AuxButtonPacket.java create mode 100644 com/hbm/render/tileentity/RenderSmallReactor.java create mode 100644 com/hbm/tileentity/machine/TileEntityMachineReactorSmall.java diff --git a/assets/hbm/sounds.json b/assets/hbm/sounds.json index 4c54ca7a4..011740c26 100644 --- a/assets/hbm/sounds.json +++ b/assets/hbm/sounds.json @@ -17,6 +17,8 @@ "block.broadcast2": {"category": "block", "sounds": [{"name": "block/broadcast2", "stream": false}]}, "block.broadcast3": {"category": "block", "sounds": [{"name": "block/broadcast3", "stream": false}]}, "block.sonarPing": {"category": "block", "sounds": [{"name": "block/sonarPing", "stream": false}]}, + "block.reactorStart": {"category": "block", "sounds": [{"name": "block/reactorStart", "stream": false}]}, + "block.reactorStop": {"category": "block", "sounds": [{"name": "block/reactorStop", "stream": false}]}, "item.techBleep": {"category": "player", "sounds": [{"name": "tool/techBleep", "stream": false}]}, "item.techBoop": {"category": "player", "sounds": [{"name": "tool/techBoop", "stream": false}]}, diff --git a/assets/hbm/sounds/block/reactorStart.ogg b/assets/hbm/sounds/block/reactorStart.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3d27088ed076f2f0c680f3060f5e37ab722da2f5 GIT binary patch literal 11732 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 literal 0 HcmV?d00001 diff --git a/assets/hbm/sounds/block/reactorStop.ogg b/assets/hbm/sounds/block/reactorStop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8c8cf63631da6d4fc9d562398e706e1984ab72a1 GIT binary patch literal 6355 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 Qy}?S~_ad&xUYiH~C&(O)^8f$< literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/gui/gui_radar.png b/assets/hbm/textures/gui/gui_radar.png index 5b13fd40d6000fed9d366610906b8dd38e69b4a5..0e601449ef9558ebbb3d25b068b166351bb50174 100644 GIT binary patch literal 2827 zcmd^>`8U-2AIIOH*$iV#hOv+AWFN*7Gh-bS(S%g?$WoT9kb-&66FE_ z@K{mJ=m0?bPY9sl``7sjC;OjODBaQoRP~6@?H33iiVX#T+H}m02ND1{u(P%|-{(Xk z5laQyOq%h2c4S_x;_;K;eDv3R$Gdp#y7?Vm@;koZKheo=-yv}7`GHfd0%uqU zoZ9@A(&cYmmA}bQ$hxd>Ct4vhM)7W>Qf|0nPK0t^h*Dmta{fid>?rjrH;rl+LZhwD zQyW6lF`Z}DTK{s?synIm$X@G_gGTKc&4;HoYMeFeoV1_Nwd+r4Hyl^_El{~INTuk4 z%I^V(OZ*NO`>U4vsy#TXR_>)*?yXvOPQB7yy~0DklVtGvi2iFMgKh(ZE`y{VbS#3 zP4!+<^g77o2|4n(Jb6^nWLnDfi@52Gg!zK7#fpH%@+DrFdtdcGkHFbDxu07TMn869 z-|_!Bz=;ix{ayghVCtz*0C-z}9_VFInb$rP2{U&JI}vm)EYc&y8w7j!1%{~wdWYc& zY8q-$R~w+T7>3(WS;AwOBRolTf>@ns#Nmwaa_By$*^SCXlB5~Em%X}g%FX4izLYU1V5PJI^KllLiu9kZUx zlVSYal1yh8^2yjiS&c&eS0k`Z-A~~!`v_$Vz!0`I0J+YurdC4XWI^l$UH}$r=8z)J zg#+A3Nkr;Njwq2j2EYA-)c95o^wGEnM|DKMc^s_u%dl4fi|7s{{{5zh4g`9q5ZBw8 zlP>s8d=jB-Prg>J<=O)5xhGTW)rSN8xk&mzC7OzI?-bxT2mpQIZzXkEDoWJeNLG3X zvbbaj^ZXN(SMjh?nC{>*if0}I(r3t%Y8klZ0WhtWHjl$ah}yF=;+;8gpSvw1Be&mH zdh1)al~U+Ws~;ybQLLRI_8n{s__n_Oy;ME}mcioZ2D`gnD^`NOHZgXf>?)n;3mK^jjx`B12Et4X3)v?_;D=|UgWd9bc1x5H6a_>E z^6$KPt2o;VUl7@{Rpg&1`&kf1NxmjvDr)vmN-#~(nRuGV)d80-!(L2X4>n>U!H%m) z&_d}39ao}3^SJ$7@%nMD`y2(01y{P=#6Rb&be}#}a<*~3bF4&{=1~-#0D9N9mu+nw zm2mj`>49*j08d6j_IqMLTiC;>(sWyk{&yc7!M2@W}6!NnM5^ z08ii8(f1%&GQS7*DX2~geseQR4seGb0lp+m{fIFm_|o`CDa76FP`V&+_X%foxI>eO zT(?IkdOs&r^W6P<3s)Q#rNZrqtI%-rsCnK#y3CTo=13DveG~es$0O#i*SJWI;TtGn zakHqmJim*X5t9P>$MDT7$}r-|oT8?kXJMN-r}UyA^1sR7k{1dE^^w`{ zCN53YVyo+K<0P)wCT1magFMxq69wT-S3}QxUsPp@kN23d;16MNAY8cRmBT!YVPc}X z6i64gUotDk-8;6PJOllr^tMnx>j`A=@NvqFQ*Rw}$|5W`)Kf zoXKcd5|pnAN@~jJ8sF&k&mppT-F;eqebBGJeeItvUwLLp^DEA_Ut)g@8Imw5jv1QF z9K=1`_E)KHc=aOpfh==E#A9Zq6Qy)#l4>o}3}YQ}Bvh+F2<>GEQ(K)QMJvtLe`;EqV9n_teDs*~v9Fm%M>f}>* hsETU!R4od#DNI!(y}diPhW`08urfbpR%PNI`)`^`9}fTk literal 2252 zcmc&$X;YI~7QRUb^9mw5G)M_aAUG@~VR29q0s#$T7z9ND6@;V%ieej3K!|36Fbb_m z*PwuGf-A!!peWdE(I6?Y*+wKHOIR8LM1m#|mIN{{?T4P4A25BsoO5o~Jl=CwXe%uW^z?C`0S1$opnIwO?KMCTNFuuJSIQ56ucjqd)|DhDYN5gQ?pFLOzIvC+D#0bDqL{wT(I>{+kF-U729A-(CCYb zG80VWe2$qTujF~ICfdN;dUFNT!{hzpG?I-mevPKd1-F^<-zY78KQTX$?Yz7qVgl?_ zqOPM0-B`{oPEiOQ0Q4~(}&+M&QoGCaTgM!v_LG~r&67+XUm47 zkC!Qz=`W#3Er1C&Omgs9g%Dh}2}aj7`5_882bxchu5$XS&Fay<{|TGnp9~Nx?)}qOm}VvlOC7flCpv{5G?kLwlKo zZES38YDHw$)YlvL_xEpclU1pTL)!kaoy$?nYcgW^+h%4-^bH2oS0E=*GcbEC_4sY_F8%qZKZ9`gAqHo(dgR1$+_`EYt&izt5HkP_U1xL-L z>}hmSoprG%97JuTE2l|WZ*gWI^F0|nNha`7JNprjMvCSQsqd@;5rIIz>RjinGvBes zQbTK4A`g%BEiB`@iE!?(Xk-(@0Pef(;J~jiOwo0t$}Sko*!bev`Cx9kV7J)#7H}8l zLNwOny3!YGZWBGQ#Cv5SY8S8pm$R4*pIzJPCF< zttc7qRap%3rg)QZhdBS^~06zS&ihD;Mtfs!nS- z{A-7E`}e^Husy27dVb;ote}jOVgMeT(gLoLc1uF}G>)bP3QpuN&PWk-C~3_>pH}m? zHVjou%7PSV?2yqZQymyUBQ9kDPu9V)s@%$JARrIiyFiqf=(goc+IH~nTa(8ZhOuoc%l@}Q8`QlpS80+<`F6|EX> z-mL0ejgyTvsTbeN`)b2PN|CKF0*-Rgb7@eTHZcEyy(JL#aH^8iIAApc+0;WHC#4@q zdqL4fxVK6TYfBvoO8QldHUe7Ao6DxiHdY8dyo2AYG`|^UVG0cVb znS+T)-&Yoza*;N_-9-_W&0=Uja_oHpUwA7n2fni%Xj3RypDOmq9&7h21$7r$@)&9}gF_|%$@sz3 z{zn8bn8eA6f+yFy^&}3qc^9xp;BiW;c#ce1s*}=U%Mu^P{Jta|A_BqBIq)zeLE3t- z&Eo&AoHS;F^3#ty#3XCM4PN^XTJ{K+xLqTDvmL8Dg~P1%d~%JYno^A%KKl{r!>8QQ zqDs5f4hdoKa;53GZ$VL!@zedmpicV*(5LFS2cf8VU+YbGTHghvm|Mhje94oDV6a=)^bf{HE>nff^G3KZ7PFNS-JMm$YiZb zrLs#I~ u%EGnWAL~oUhh<&o{%?WcKgfR*e^HIQfhWXW{UmT(JEwU1lAr9QCjSQjCb{bX diff --git a/assets/hbm/textures/gui/gui_reactor_small.png b/assets/hbm/textures/gui/gui_reactor_small.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfce4066324c80e1e9031853a4f9fb86ffcc430 GIT binary patch literal 2808 zcmb_eXH-+!7Cs3Pf>I2kg9srLkU^0mh(L5dfh0i;QpL8OJ^ z2qQx=4w6taMuH4VQHnG{5~T!;0R`zVym_;Hi#2bp`SH%5bJpGae0$&h?fu<*%i7XJ zbi4F+0D!2OsgW%JF#Zt+kb?Zp`AXSk{)V_}Xl94xuPCHP0sz~q%!~}|NO`j(&4C;T z3HsZjS=Av0aTF#1!e=@9@57ju*8hNVTakpxSU1|8haky_8<+$4RFPw0I~>g(zQfj^ zpAoocmKm~`bKdkvrJQ?Typ+%dOVLnpfTOhR%A81qF*=#2GaD(a*S|E&TPq=NoU=8fYb|apSNG0u)UM-w6ecbRXUYl8udW_? zf+|nUosk`yeSDh;ep0z(9x?wuX+WLm_a(&ao<^`AK#8LgvEzkB<($U$Z);2V<|GB*$_5$$rKgVq=|Y6c-d(EeTe zyirF6zM0It8~sY%GI2-z237$S9#d6-@v+!*Z}cm;3V1ja{&=WjHI%1>t-nRKSYIR? zQ=C=(S{zrYNt!F~aZBWNM>We)&Zs{zN;LB`c`l|c1dZ5}VDmuw_|ad|N{NJ<A<$=s|f*+xs6Tn}s zkf2|FWRw3})@=ak1tWk|A5}1|;Md$2#-7~SS18CqbGu5iPy`M>Nhj&? zJM(7cah@vvNxVG7V5(p>^j*yMoG!hh^B^20%rfYgmW8oB{Zd3e^t!ke(2{>6+sGV7 zvx9ww#~3J}u26Fact%c9F1js5w6PKsZxL?GA^H~rlZCeNFM3-rKOs7q`{r!j>PP+< zCyp8!rtVujW5qeoys43r1i4G~<&;gC738lHO5x(ZRb+{{qT$q>W9eN?lJ&hXxT&JQ zR9saCzE?Ohuvk2Fyp;CXKoiaO2|=XQF6tliDenOfhQ;w#<@@pb2<`FTR&B%<(O%!e z6SSaDov%3pcY53JLWEsI)8CUV6eS2YqYPYdfbOKF54>wy8&397%?MZ6M_RGI2B|eSI1(aQnrdT!OpzD>R z=vcK-5G|`GQDCg5LjvkU=gGqgb*6CxZopS-wfwPk-sdwS6tMiZ&&jJ*wW0k z_Szsdy@!ulo;CF|_}$P@1+yDz_ft&Zkq&9(%5t+iJ?Fo?K7T!uc@yi>50-Ix`UBL7 zdB$3I$ido@?iT&scX)-#{aO$KpVvzR zXu6>s2FgsP7a|X%dv+(7%CtUAXjo6UT#>5E`RuemwJP7; znUlvFBvCT5#>;z8dDM!Q6g@HrDVz434s|c;!s2F@O#4v*&_y;T(2Gwl*F}m};6TnV zKY@;lcbQ~zF5QU;emip<)^mXUQ^iuvI5kigO^zB}yq3+wh-*P&$*q^t2WCh+-~;|g zlUuua=Nyz_b_4rd=MJlC`wwHW^GhETvE3mL<`$$`vG)f}KxUhf=M~=;VqXly^7-=K z78J`M)u9w#`dx7D=Q;-&@Yzle{;Z(;tOHwlGkD(n!8a+qLdXea?MD#{d&%Xq<~XC~ zmeWRL#Ym@!l~!w@!$Qc9f(&7{KABVap*-d)K0{ID7N_J1YQncauehW4=^43GR!Hl0z zEq{*29S~NsEtl`2-AY?sbvD7I;0B}gHBryblnYw_JRRNE>TS+ldS!l-tGK)?+`2LI$H`V?S9V5F+w?wb+C* z{m;ijf-e@re9_=byfGYXHCMlEkCj8CotmLOA-|oifiiB>^}7}diN$?thBD*y)3FIpi84tE4ZaO{6U;bu=XXOWZ<=#r z!ZY6*iGcuycS0)uDN#>MHn#5Mrq=y^+FOHceQ9kts&xrB$wx_GMagKxL*xICsFpq^ z7&;*Y@sc6&H9=(+_{-hdIMt_ZVcX)+b?{yM_>!gd|Lw9h$t{K2YW@>rQtU$PVO+?z zzOP91LWTH^E}}fvU?+k%Kd*V+nV!u?VyN}?oKOs2RuY7IY(PY{5-@#fP8rE&;IhUD zH#p%E&W)L4%lXfG+uw4EukYu2{oejzJ!4|G-t~=~8Zue4Z}{Q66N>YZXQP{(-|4Gy zm-H{R_?HFmA>iqMSMF`R=KWdUq%&qm))#D9qYrMsh%A_>+WRp^ONNR1+n(e9q5kg$ a?O4(O5NYu-uuE@r)60xtX;f+GcH>_TU(&1q literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/gui/gui_selenium.png b/assets/hbm/textures/gui/gui_selenium.png index 5cf250a6bb21588d2fe0737a051f7c570d11f9c5..6545942369964d080e03ceda0ed9acc13035dd82 100644 GIT binary patch literal 3515 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 KnU)xPMEw(m;X}v( literal 3647 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 nJMaI2 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_); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) + { + return true; + } else if(!player.isSneaking()) + { + TileEntityMachineReactorSmall entity = (TileEntityMachineReactorSmall) world.getTileEntity(x, y, z); + if(entity != null) + { + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_reactor_small, world, x, y, z); + } + return true; + } else { + return false; + } + } +} diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index fcca6f030..3f95b45a3 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -55,6 +55,7 @@ import com.hbm.tileentity.machine.TileEntityMachineRTG; import com.hbm.tileentity.machine.TileEntityMachineRadGen; import com.hbm.tileentity.machine.TileEntityMachineRadar; import com.hbm.tileentity.machine.TileEntityMachineReactor; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineRefinery; import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; @@ -648,6 +649,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_reactor_small: + { + if(entity instanceof TileEntityMachineReactorSmall) + { + return new ContainerMachineReactorSmall(player.inventory, (TileEntityMachineReactorSmall) entity); + } + return null; + } } return null; } @@ -1225,6 +1235,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_reactor_small: + { + if(entity instanceof TileEntityMachineReactorSmall) + { + return new GUIMachineReactorSmall(player.inventory, (TileEntityMachineReactorSmall) entity); + } + return null; + } } } else { //CLIENTONLY GUIS diff --git a/com/hbm/inventory/container/ContainerMachineReactorSmall.java b/com/hbm/inventory/container/ContainerMachineReactorSmall.java new file mode 100644 index 000000000..41681a0cd --- /dev/null +++ b/com/hbm/inventory/container/ContainerMachineReactorSmall.java @@ -0,0 +1,98 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; +import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineReactorSmall extends Container { + +private TileEntityMachineReactorSmall seleniumEngine; + + public ContainerMachineReactorSmall(InventoryPlayer invPlayer, TileEntityMachineReactorSmall tedf) { + + seleniumEngine = tedf; + + //Rods + this.addSlotToContainer(new Slot(tedf, 0, 98, 18)); + this.addSlotToContainer(new Slot(tedf, 1, 134, 18)); + this.addSlotToContainer(new Slot(tedf, 2, 80, 36)); + this.addSlotToContainer(new Slot(tedf, 3, 116, 36)); + this.addSlotToContainer(new Slot(tedf, 4, 152, 36)); + this.addSlotToContainer(new Slot(tedf, 5, 98, 54)); + this.addSlotToContainer(new Slot(tedf, 6, 134, 54)); + this.addSlotToContainer(new Slot(tedf, 7, 80, 72)); + this.addSlotToContainer(new Slot(tedf, 8, 116, 72)); + this.addSlotToContainer(new Slot(tedf, 9, 152, 72)); + this.addSlotToContainer(new Slot(tedf, 10, 98, 90)); + this.addSlotToContainer(new Slot(tedf, 11, 134, 90)); + + //Fluid IO + this.addSlotToContainer(new Slot(tedf, 12, 8, 90)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 13, 8, 108)); + this.addSlotToContainer(new Slot(tedf, 14, 26, 90)); + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 15, 26, 108)); + + //Battery + this.addSlotToContainer(new Slot(tedf, 16, 62, 108)); + + 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 + 56)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); + } + } + + @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 <= 16) { + if (!this.mergeItemStack(var5, 17, this.inventorySlots.size(), true)) + { + return null; + } + } else { + if (!this.mergeItemStack(var5, 0, 13, true)) + if (!this.mergeItemStack(var5, 14, 15, true)) + if (!this.mergeItemStack(var5, 16, 17, true)) + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return seleniumEngine.isUseableByPlayer(player); + } +} diff --git a/com/hbm/inventory/gui/GUIMachineReactorSmall.java b/com/hbm/inventory/gui/GUIMachineReactorSmall.java new file mode 100644 index 000000000..83dfd1585 --- /dev/null +++ b/com/hbm/inventory/gui/GUIMachineReactorSmall.java @@ -0,0 +1,103 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.container.ContainerMachineReactorSmall; +import com.hbm.inventory.container.ContainerMachineSelenium; +import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxButtonPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; +import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineReactorSmall extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_reactor_small.png"); + private TileEntityMachineReactorSmall diFurnace; + + public GUIMachineReactorSmall(InventoryPlayer invPlayer, TileEntityMachineReactorSmall tedf) { + super(new ContainerMachineReactorSmall(invPlayer, tedf)); + diFurnace = tedf; + + this.xSize = 176; + this.ySize = 222; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + diFurnace.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 36, 16, 52); + diFurnace.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 36, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 108, 88, 7, diFurnace.power, diFurnace.powerMax); + } + + @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); + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 53 <= x && guiLeft + 53 + 16 > x && guiTop + 54 < y && guiTop + 54 + 16 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord, diFurnace.retracting ? 0 : 1, 0)); + } + } + + @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) { + int i = (int)diFurnace.getPowerScaled(88); + + i = (int) Math.min(i, 88); + + drawTexturedModalRect(guiLeft + 80, guiTop + 108, 0, 222, i, 7); + } + if(diFurnace.heat > 0) { + int i = diFurnace.getHeatScaled(88); + + i = (int) Math.min(i, 160); + + drawTexturedModalRect(guiLeft + 80, guiTop + 117, 0, 229, i, 7); + } + + if(!diFurnace.retracting) + drawTexturedModalRect(guiLeft + 52, guiTop + 53, 212, 0, 18, 18); + + if(diFurnace.rods >= diFurnace.rodsMax) { + + for(int x = 0; x < 3; x++) + for(int y = 0; y < 3; y++) + drawTexturedModalRect(guiLeft + 79 + 36 * x, guiTop + 17 + 36 * y, 176, 0, 18, 18); + + } else if(diFurnace.rods > 0) { + + for(int x = 0; x < 3; x++) + for(int y = 0; y < 3; y++) + drawTexturedModalRect(guiLeft + 79 + 36 * x, guiTop + 17 + 36 * y, 194, 0, 18, 18); + + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[0].getSheet()); + diFurnace.tanks[0].renderTank(this, guiLeft + 8, guiTop + 88, 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 + 26, guiTop + 88, diFurnace.tanks[1].getTankType().textureX() * FluidTank.x, diFurnace.tanks[1].getTankType().textureY() * FluidTank.y, 16, 52); + } +} diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index 8371b7eb7..addf23948 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -1761,18 +1761,18 @@ public class ModItems { rod_quad_schrabidium = new ItemCustomLore().setUnlocalizedName("rod_quad_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_schrabidium"); rod_quad_solinium = new ItemCustomLore().setUnlocalizedName("rod_quad_solinium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_solinium"); - rod_uranium_fuel = new ItemFuelRod(10000).setUnlocalizedName("rod_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_uranium_fuel"); - rod_dual_uranium_fuel = new ItemFuelRod(20000).setUnlocalizedName("rod_dual_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_uranium_fuel"); - rod_quad_uranium_fuel = new ItemFuelRod(40000).setUnlocalizedName("rod_quad_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_uranium_fuel"); - rod_plutonium_fuel = new ItemFuelRod(25000).setUnlocalizedName("rod_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_plutonium_fuel"); - rod_dual_plutonium_fuel = new ItemFuelRod(50000).setUnlocalizedName("rod_dual_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_plutonium_fuel"); - rod_quad_plutonium_fuel = new ItemFuelRod(100000).setUnlocalizedName("rod_quad_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_plutonium_fuel"); - rod_mox_fuel = new ItemFuelRod(100000).setUnlocalizedName("rod_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_mox_fuel"); - rod_dual_mox_fuel = new ItemFuelRod(200000).setUnlocalizedName("rod_dual_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_mox_fuel"); - rod_quad_mox_fuel = new ItemFuelRod(400000).setUnlocalizedName("rod_quad_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_mox_fuel"); - rod_schrabidium_fuel = new ItemFuelRod(2500000).setUnlocalizedName("rod_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_schrabidium_fuel"); - rod_dual_schrabidium_fuel = new ItemFuelRod(5000000).setUnlocalizedName("rod_dual_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_schrabidium_fuel"); - rod_quad_schrabidium_fuel = new ItemFuelRod(10000000).setUnlocalizedName("rod_quad_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_schrabidium_fuel"); + rod_uranium_fuel = new ItemFuelRod(10000, 100).setUnlocalizedName("rod_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_uranium_fuel"); + rod_dual_uranium_fuel = new ItemFuelRod(20000, 100).setUnlocalizedName("rod_dual_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_uranium_fuel"); + rod_quad_uranium_fuel = new ItemFuelRod(40000, 100).setUnlocalizedName("rod_quad_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_uranium_fuel"); + rod_plutonium_fuel = new ItemFuelRod(25000, 250).setUnlocalizedName("rod_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_plutonium_fuel"); + rod_dual_plutonium_fuel = new ItemFuelRod(50000, 250).setUnlocalizedName("rod_dual_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_plutonium_fuel"); + rod_quad_plutonium_fuel = new ItemFuelRod(100000, 250).setUnlocalizedName("rod_quad_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_plutonium_fuel"); + rod_mox_fuel = new ItemFuelRod(100000, 75).setUnlocalizedName("rod_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_mox_fuel"); + rod_dual_mox_fuel = new ItemFuelRod(200000, 75).setUnlocalizedName("rod_dual_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_mox_fuel"); + rod_quad_mox_fuel = new ItemFuelRod(400000, 75).setUnlocalizedName("rod_quad_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_mox_fuel"); + rod_schrabidium_fuel = new ItemFuelRod(2500000, 1000).setUnlocalizedName("rod_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_schrabidium_fuel"); + rod_dual_schrabidium_fuel = new ItemFuelRod(5000000, 1000).setUnlocalizedName("rod_dual_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_schrabidium_fuel"); + rod_quad_schrabidium_fuel = new ItemFuelRod(10000000, 1000).setUnlocalizedName("rod_quad_schrabidium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_schrabidium_fuel"); rod_water = new ItemCustomLore().setUnlocalizedName("rod_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_water"); rod_dual_water = new ItemCustomLore().setUnlocalizedName("rod_dual_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_water"); diff --git a/com/hbm/items/special/ItemFuelRod.java b/com/hbm/items/special/ItemFuelRod.java index 4797df0f6..18adffe9d 100644 --- a/com/hbm/items/special/ItemFuelRod.java +++ b/com/hbm/items/special/ItemFuelRod.java @@ -11,9 +11,11 @@ import net.minecraft.nbt.NBTTagCompound; public class ItemFuelRod extends ItemRadioactive { public int lifeTime; + public int heat; - public ItemFuelRod(int life) { + public ItemFuelRod(int life, int heat) { this.lifeTime = life; + this.heat = heat; this.setMaxDamage(100); } @@ -25,85 +27,85 @@ public class ItemFuelRod extends ItemRadioactive { if(this == ModItems.rod_uranium_fuel) { list.add("Generates 100 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 10000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_dual_uranium_fuel) { list.add("Generates 100 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 20000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_quad_uranium_fuel) { list.add("Generates 100 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 40000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_plutonium_fuel) { list.add("Generates 150 power per tick"); - list.add("Generates 2 heat per tick"); - list.add("Lasts 25000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_dual_plutonium_fuel) { list.add("Generates 150 power per tick"); - list.add("Generates 2 heat per tick"); - list.add("Lasts 50000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_quad_plutonium_fuel) { list.add("Generates 150 power per tick"); - list.add("Generates 2 heat per tick"); - list.add("Lasts 100000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_mox_fuel) { list.add("Generates 50 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 100000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_dual_mox_fuel) { list.add("Generates 50 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 200000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_quad_mox_fuel) { list.add("Generates 50 power per tick"); - list.add("Generates 1 heat per tick"); - list.add("Lasts 400000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_schrabidium_fuel) { list.add("Generates 25000 power per tick"); - list.add("Generates 10 heat per tick"); - list.add("Lasts 2500000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_dual_schrabidium_fuel) { list.add("Generates 25000 power per tick"); - list.add("Generates 10 heat per tick"); - list.add("Lasts 5000000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } if(this == ModItems.rod_quad_schrabidium_fuel) { list.add("Generates 25000 power per tick"); - list.add("Generates 10 heat per tick"); - list.add("Lasts 10000000 ticks"); + list.add("Generates " + heat + " heat per tick"); + list.add("Lasts " + lifeTime + " ticks"); } } diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index 069205f72..8f2b8fc5f 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -95,6 +95,7 @@ public class ClientProxy extends ServerProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadGen.class, new RenderRadGen()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadar.class, new RenderRadar()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineSeleniumEngine.class, new RenderSelenium()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineReactorSmall.class, new RenderSmallReactor()); //RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderRocket()); RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderSnowball(ModItems.man_core)); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 713930c92..2895e9b7f 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -259,6 +259,7 @@ import com.hbm.tileentity.machine.TileEntityMachineRTG; import com.hbm.tileentity.machine.TileEntityMachineRadGen; import com.hbm.tileentity.machine.TileEntityMachineRadar; import com.hbm.tileentity.machine.TileEntityMachineReactor; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineRefinery; import com.hbm.tileentity.machine.TileEntityMachineSPP; import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator; @@ -644,6 +645,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityCelPrimeTanks.class, "tileentity_cel_prime_storage"); GameRegistry.registerTileEntity(TileEntityMachineSeleniumEngine.class, "tileentity_selenium_engine"); GameRegistry.registerTileEntity(TileEntityMachineSatLinker.class, "tileentity_satlinker"); + GameRegistry.registerTileEntity(TileEntityMachineReactorSmall.class, "tileentity_small_reactor"); 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/packet/AuxButtonPacket.java b/com/hbm/packet/AuxButtonPacket.java new file mode 100644 index 000000000..c5afe714a --- /dev/null +++ b/com/hbm/packet/AuxButtonPacket.java @@ -0,0 +1,87 @@ +package com.hbm.packet; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.saveddata.SatelliteSaveStructure; +import com.hbm.saveddata.SatelliteSavedData; +import com.hbm.tileentity.bomb.TileEntityTurretCIWS; +import com.hbm.tileentity.bomb.TileEntityTurretCheapo; +import com.hbm.tileentity.machine.TileEntityAMSBase; +import com.hbm.tileentity.machine.TileEntityAMSEmitter; +import com.hbm.tileentity.machine.TileEntityAMSLimiter; +import com.hbm.tileentity.machine.TileEntityMachineDiesel; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; +import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; + +public class AuxButtonPacket implements IMessage { + + int x; + int y; + int z; + int value; + int id; + + public AuxButtonPacket() + { + + } + + public AuxButtonPacket(int x, int y, int z, int value, int id) + { + this.x = x; + this.y = y; + this.z = z; + this.value = value; + this.id = id; + } + + @Override + public void fromBytes(ByteBuf buf) { + x = buf.readInt(); + y = buf.readInt(); + z = buf.readInt(); + value = buf.readInt(); + id = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(x); + buf.writeInt(y); + buf.writeInt(z); + buf.writeInt(value); + buf.writeInt(id); + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(AuxButtonPacket m, MessageContext ctx) { + + EntityPlayer p = ctx.getServerHandler().playerEntity; + + //try { + TileEntity te = p.worldObj.getTileEntity(m.x, m.y, m.z); + + if (te instanceof TileEntityMachineReactorSmall) { + TileEntityMachineReactorSmall reactor = (TileEntityMachineReactorSmall)te; + + reactor.retracting = m.value == 1; + } + + //} catch (Exception x) { } + + return null; + } + } +} diff --git a/com/hbm/packet/AuxGaugePacket.java b/com/hbm/packet/AuxGaugePacket.java index 8778c7652..4c91a0143 100644 --- a/com/hbm/packet/AuxGaugePacket.java +++ b/com/hbm/packet/AuxGaugePacket.java @@ -8,6 +8,7 @@ import com.hbm.tileentity.machine.TileEntityAMSBase; import com.hbm.tileentity.machine.TileEntityAMSEmitter; import com.hbm.tileentity.machine.TileEntityAMSLimiter; import com.hbm.tileentity.machine.TileEntityMachineDiesel; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; import cpw.mods.fml.common.network.simpleimpl.IMessage; @@ -116,6 +117,16 @@ public class AuxGaugePacket implements IMessage { selenium.powerCap = m.value; } + if (te instanceof TileEntityMachineReactorSmall) { + TileEntityMachineReactorSmall reactor = (TileEntityMachineReactorSmall)te; + + if(m.id == 0) + reactor.rods = m.value; + if(m.id == 1) + reactor.retracting = m.value == 1; + if(m.id == 2) + reactor.heat = m.value; + } } catch (Exception x) { } return null; diff --git a/com/hbm/packet/PacketDispatcher.java b/com/hbm/packet/PacketDispatcher.java index ac4e5f998..b7b13672a 100644 --- a/com/hbm/packet/PacketDispatcher.java +++ b/com/hbm/packet/PacketDispatcher.java @@ -51,7 +51,7 @@ public class PacketDispatcher { wrapper.registerMessage(TEPressPacket.Handler.class, TEPressPacket.class, i++, Side.CLIENT); //Electricity gauge for GUI rendering wrapper.registerMessage(AuxElectricityPacket.Handler.class, AuxElectricityPacket.class, i++, Side.CLIENT); - //Electricity gauge for GUI rendering + //Universal package for machine gauges and states wrapper.registerMessage(AuxGaugePacket.Handler.class, AuxGaugePacket.class, i++, Side.CLIENT); //Siren packet for looped sounds wrapper.registerMessage(TESirenPacket.Handler.class, TESirenPacket.class, i++, Side.CLIENT); @@ -63,6 +63,8 @@ public class PacketDispatcher { wrapper.registerMessage(TERadarDestructorPacket.Handler.class, TERadarDestructorPacket.class, i++, Side.CLIENT); //Signals server to perform orbital strike wrapper.registerMessage(SatLaserPacket.Handler.class, SatLaserPacket.class, i++, Side.SERVER); + //Universal package for sending small info packs back to server + wrapper.registerMessage(AuxButtonPacket.Handler.class, AuxButtonPacket.class, i++, Side.SERVER); } } diff --git a/com/hbm/render/tileentity/RenderSmallReactor.java b/com/hbm/render/tileentity/RenderSmallReactor.java new file mode 100644 index 000000000..32a4598df --- /dev/null +++ b/com/hbm/render/tileentity/RenderSmallReactor.java @@ -0,0 +1,35 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; +import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderSmallReactor extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) + { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glRotatef(180, 0F, 1F, 0F); + + TileEntityMachineReactorSmall reactor = (TileEntityMachineReactorSmall)tileEntity; + + bindTexture(ResourceManager.reactor_small_base_tex); + ResourceManager.reactor_small_base.renderAll(); + + GL11.glTranslated(0.0D, reactor.rods / 100D, 0.0D); + + bindTexture(ResourceManager.reactor_small_rods_tex); + ResourceManager.reactor_small_rods.renderAll(); + + GL11.glPopMatrix(); + } +} diff --git a/com/hbm/tileentity/machine/TileEntityMachineReactorSmall.java b/com/hbm/tileentity/machine/TileEntityMachineReactorSmall.java new file mode 100644 index 000000000..791bdc81a --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityMachineReactorSmall.java @@ -0,0 +1,556 @@ +package com.hbm.tileentity.machine; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.hbm.blocks.machine.MachineGenerator; +import com.hbm.explosion.ExplosionNukeGeneric; +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.ISource; +import com.hbm.inventory.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemBattery; +import com.hbm.items.special.ItemFuelRod; +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.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityMachineReactorSmall extends TileEntity implements ISidedInventory, ISource, IFluidContainer, IFluidAcceptor { + + private ItemStack slots[]; + + public int heat; + public final int heatMax = 10000; + public long power; + public final long powerMax = 100000; + public int rods; + public final int rodsMax = 100; + public boolean retracting = true; + public int age = 0; + public List list = new ArrayList(); + public FluidTank[] tanks; + + private static final int[] slots_top = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8}; + private static final int[] slots_bottom = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; + private static final int[] slots_side = new int[] {9, 10, 11}; + + private String customName; + + public TileEntityMachineReactorSmall() { + slots = new ItemStack[17]; + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(FluidType.WATER, 32000, 0); + tanks[1] = new FluidTank(FluidType.COOLANT, 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.generator"; + } + + @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 itemStack) { + if(i == 0 || + i == 1 || + i == 2 || + i == 3 || + i == 4 || + i == 5 || + i == 6 || + i == 7 || + i == 8) + if(itemStack.getItem() instanceof ItemFuelRod) + return true; + if(i == 12) + if(itemStack.getItem() == ModItems.rod_water || itemStack.getItem() == ModItems.rod_dual_water || itemStack.getItem() == ModItems.rod_quad_water || itemStack.getItem() == Items.water_bucket) + return true; + if(i == 14) + if(itemStack.getItem() == ModItems.rod_coolant || itemStack.getItem() == ModItems.rod_dual_coolant || itemStack.getItem() == ModItems.rod_quad_coolant) + return true; + if(i == 16) + if(itemStack.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); + + power = nbt.getLong("power"); + heat = nbt.getInteger("heat"); + slots = new ItemStack[getSizeInventory()]; + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "coolant"); + + 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.setLong("power", power); + nbt.setInteger("heat", heat); + NBTTagList list = new NBTTagList(); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "coolant"); + + 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) { + if(i == 0 || + i == 1 || + i == 2 || + i == 3 || + i == 4 || + i == 5 || + i == 6 || + i == 7 || + i == 8) + if(itemStack.getItem() == ModItems.rod_uranium_fuel_depleted || + itemStack.getItem() == ModItems.rod_dual_uranium_fuel_depleted || + itemStack.getItem() == ModItems.rod_quad_uranium_fuel_depleted || + itemStack.getItem() == ModItems.rod_plutonium_fuel_depleted || + itemStack.getItem() == ModItems.rod_dual_plutonium_fuel_depleted || + itemStack.getItem() == ModItems.rod_quad_plutonium_fuel_depleted || + itemStack.getItem() == ModItems.rod_mox_fuel_depleted || + itemStack.getItem() == ModItems.rod_dual_mox_fuel_depleted || + itemStack.getItem() == ModItems.rod_quad_mox_fuel_depleted || + itemStack.getItem() == ModItems.rod_schrabidium_fuel_depleted || + itemStack.getItem() == ModItems.rod_dual_schrabidium_fuel_depleted || + itemStack.getItem() == ModItems.rod_quad_schrabidium_fuel_depleted) + return true; + if(i == 9 || i == 10) + if(itemStack.getItem() == Items.bucket || itemStack.getItem() == ModItems.rod_empty || itemStack.getItem() == ModItems.rod_dual_empty || itemStack.getItem() == ModItems.rod_quad_empty) + return true; + if(i == 11) + if (itemStack.getItem() instanceof ItemBattery && ItemBattery.getCharge(itemStack) == ItemBattery.getMaxChargeStatic(itemStack)) + return true; + + return false; + } + + public long getPowerScaled(long i) { + return (power * i) / powerMax; + } + + public int getHeatScaled(int i) { + return (heat * i) / heatMax; + } + + public boolean hasPower() { + return power > 0; + } + + public boolean hasHeat() { + return heat > 0; + } + + private int[] getNeighbouringSlots(int id) { + + switch(id) { + case 0: return new int[] { 1, 5 }; + case 1: return new int[] { 0, 6 }; + case 2: return new int[] { 3, 7 }; + case 3: return new int[] { 2, 4, 8 }; + case 4: return new int[] { 3, 9 }; + case 5: return new int[] { 0, 6, 0xA }; + case 6: return new int[] { 1, 5, 0xB }; + case 7: return new int[] { 2, 8 }; + case 8: return new int[] { 3, 7, 9}; + case 9: return new int[] { 4, 8 }; + case 10: return new int[] { 5, 0xB }; + case 11: return new int[] { 6, 0xA }; + } + + return null; + } + + @Override + public void updateEntity() { + + age++; + if(age >= 20) + { + age = 0; + } + + if(age == 9 || age == 19) + ffgeuaInit(); + + if(!worldObj.isRemote) + { + tanks[0].loadTank(12, 13, slots); + tanks[1].loadTank(14, 15, slots); + + if(retracting && rods > 0) { + + if(rods == rodsMax) + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStart", 1.0F, 0.75F); + + rods--; + + if(rods == 0) + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStop", 1.0F, 1.0F); + } + if(!retracting && rods < rodsMax) { + + if(rods == 0) + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStart", 1.0F, 0.75F); + + rods++; + + if(rods == rodsMax) + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStop", 1.0F, 1.0F); + } + + for(int i = 0; i < 2; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + //Batteries + power = Library.chargeItemsFromTE(slots, 11, power, powerMax); + + if(rods >= rodsMax) + for(int i = 0; i < 12; i++) + { + if(slots[i] != null && slots[i].getItem() instanceof ItemFuelRod) + decay(i); + } + + if(this.power > powerMax) + { + this.power = powerMax; + } + + if(this.heat > heatMax) + { + this.explode(); + } + + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, rods, 0)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, retracting ? 1 : 0, 1)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, heat, 2)); + } + } + + private boolean hasFuelRod(int id) { + if(id > 11) + return false; + + if(slots[id] != null) + return slots[id].getItem() instanceof ItemFuelRod; + + return false; + } + + private int getNeightbourCount(int id) { + + int[] neighbours = this.getNeighbouringSlots(id); + + if(neighbours == null) + return 0; + + int count = 0; + + for(int i = 0; i < neighbours.length; i++) + if(hasFuelRod(neighbours[i])) + count++; + + return count; + + } + + //itemstack in slots[id] has to contain ItemFuelRod item + private void decay(int id) { + if(id > 11) + return; + + int decay = getNeightbourCount(id) + 1; + + for(int i = 0; i < decay; i++) { + ItemFuelRod rod = ((ItemFuelRod)slots[id].getItem()); + this.heat += rod.heat; + ItemFuelRod.setLifeTime(slots[id], ItemFuelRod.getLifeTime(slots[id]) + 1); + ItemFuelRod.updateDamage(slots[id]); + + if(ItemFuelRod.getLifeTime(slots[id]) <= 0) { + onRunOut(id); + return; + } + } + } + + //itemstack in slots[id] has to contain ItemFuelRod item + private void onRunOut(int id) { + + Item item = slots[id].getItem(); + + if(item == ModItems.rod_uranium_fuel) { + slots[id] = new ItemStack(ModItems.rod_uranium_fuel_depleted); + + } else if(item == ModItems.rod_plutonium_fuel) { + slots[id] = new ItemStack(ModItems.rod_plutonium_fuel_depleted); + + } else if(item == ModItems.rod_mox_fuel) { + slots[id] = new ItemStack(ModItems.rod_mox_fuel_depleted); + + } else if(item == ModItems.rod_schrabidium_fuel) { + slots[id] = new ItemStack(ModItems.rod_schrabidium_fuel_depleted); + + } else if(item == ModItems.rod_dual_uranium_fuel) { + slots[id] = new ItemStack(ModItems.rod_dual_uranium_fuel_depleted); + + } else if(item == ModItems.rod_dual_plutonium_fuel) { + slots[id] = new ItemStack(ModItems.rod_dual_plutonium_fuel_depleted); + + } else if(item == ModItems.rod_dual_mox_fuel) { + slots[id] = new ItemStack(ModItems.rod_dual_mox_fuel_depleted); + + } else if(item == ModItems.rod_dual_schrabidium_fuel) { + slots[id] = new ItemStack(ModItems.rod_dual_schrabidium_fuel_depleted); + + } else if(item == ModItems.rod_quad_uranium_fuel) { + slots[id] = new ItemStack(ModItems.rod_quad_uranium_fuel_depleted); + + } else if(item == ModItems.rod_quad_plutonium_fuel) { + slots[id] = new ItemStack(ModItems.rod_quad_plutonium_fuel_depleted); + + } else if(item == ModItems.rod_quad_mox_fuel) { + slots[id] = new ItemStack(ModItems.rod_quad_mox_fuel_depleted); + + } else if(item == ModItems.rod_quad_schrabidium_fuel) { + slots[id] = new ItemStack(ModItems.rod_quad_schrabidium_fuel_depleted); + } + } + + private void explode() { + for(int i = 0; i < slots.length; i++) + { + this.slots[i] = null; + } + + worldObj.createExplosion(null, this.xCoord, this.yCoord, this.zCoord, 18.0F, true); + ExplosionNukeGeneric.waste(worldObj, this.xCoord, this.yCoord, this.zCoord, 35); + worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, Blocks.flowing_lava); + } + + @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 - 1, this.yCoord + 1, this.zCoord, getTact()); + ffgeua(this.xCoord + 1, this.yCoord + 1, this.zCoord, getTact()); + ffgeua(this.xCoord, this.yCoord + 1, this.zCoord - 1, getTact()); + ffgeua(this.xCoord, this.yCoord + 1, this.zCoord + 1, getTact()); + + ffgeua(this.xCoord - 1, this.yCoord - 1, this.zCoord, getTact()); + ffgeua(this.xCoord + 1, this.yCoord - 1, this.zCoord, getTact()); + ffgeua(this.xCoord, this.yCoord - 1, this.zCoord - 1, getTact()); + ffgeua(this.xCoord, this.yCoord - 1, this.zCoord + 1, getTact()); + } + + @Override + public boolean getTact() { + if(age >= 0 && age < 10) + { + return true; + } + + return false; + } + + @Override + public long getSPower() { + return power; + } + + @Override + public void setSPower(long i) { + this.power = i; + } + + @Override + public List getList() { + return list; + } + + @Override + public void clearList() { + this.list.clear(); + } + + @Override + public int getMaxAFluidFill(FluidType type) { + if(type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getMaxFill(); + else if(type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getMaxFill(); + else + return 0; + } + + @Override + public void setAFluidFill(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 getAFluidFill(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(); + else + 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); + } +} \ No newline at end of file