From 9c98d96f4c3bb682626a67129fdbcafedfefc318 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 23 Dec 2018 18:07:13 +0100 Subject: [PATCH] large nuclear reactor almost finished --- .../gui/gui_reactor_large_experimental.png | Bin 3168 -> 11266 bytes .../textures/items/gun_buckshot_dragon.png | Bin 0 -> 244 bytes .../textures/items/gun_buckshot_explosive.png | Bin 0 -> 250 bytes .../textures/items/gun_buckshot_poison.png | Bin 0 -> 247 bytes .../hbm/textures/items/gun_buckshot_shock.png | Bin 0 -> 253 bytes .../textures/items/gun_buckshot_wither.png | Bin 0 -> 272 bytes assets/hbm/textures/items/radx.png | Bin 258 -> 302 bytes com/hbm/blocks/generic/WasteEarth.java | 21 +- com/hbm/blocks/machine/ReactorCore.java | 11 +- com/hbm/blocks/machine/ReactorHatch.java | 17 +- com/hbm/handler/GUIHandler.java | 8 +- com/hbm/inventory/FluidTank.java | 19 + .../container/ContainerReactorMultiblock.java | 100 +-- .../inventory/gui/GUIMachineReactorSmall.java | 4 +- .../inventory/gui/GUIReactorMultiblock.java | 143 +++- com/hbm/main/MainRegistry.java | 40 +- com/hbm/packet/AuxButtonPacket.java | 25 + com/hbm/packet/AuxGaugePacket.java | 20 + .../TileEntityMachineReactorLarge.java | 672 ++++++++++++++++++ 19 files changed, 960 insertions(+), 120 deletions(-) create mode 100644 assets/hbm/textures/items/gun_buckshot_dragon.png create mode 100644 assets/hbm/textures/items/gun_buckshot_explosive.png create mode 100644 assets/hbm/textures/items/gun_buckshot_poison.png create mode 100644 assets/hbm/textures/items/gun_buckshot_shock.png create mode 100644 assets/hbm/textures/items/gun_buckshot_wither.png create mode 100644 com/hbm/tileentity/machine/TileEntityMachineReactorLarge.java diff --git a/assets/hbm/textures/gui/gui_reactor_large_experimental.png b/assets/hbm/textures/gui/gui_reactor_large_experimental.png index 061063f3552f481ed9e8963d5f6acafa4d7bb24a..6be614cb8b58b39076ab6599e5fbe8728452a25e 100644 GIT binary patch literal 11266 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�`(|O$IsU~V7)=ut~@ba$O>9))#&Zj@ne;j>;yri04 zR<=vQ?TOQwfr9L&LBbh$vx{2o)XeZPQ&ZE)N}a27CA~`l+_{3~Nyh%5_tdy9Z}Jk! zU~Z%rihF_p7DiBDmkNNQHUKsMJuNk#gMtud(rM9j00gA8Kqsmr%=Q>)%UI_8yhWMz zFUHuq>m6Ao?dQ;pZ9AZSGcyht3>UsdDe-R0l)a+s>%2Dl*tY5UNzSja5Q7~%tT6pu zW&Tr~p$xoHZ$^H;x!n*gDDYkcy=h^7!4i@|7YXs@T@bKdic?%OC z)w-IRnyEPf-e8X3tDdJ9R=M0TaNdjW#8nvcrY||?lN{o+>*QMWlelM*h3|rD>SfhY z`1z+X^G|UV#k^^I9w3_?DKSeJ%=)R>U1~hrN7)xFE7{8K*!&>eEIU! z7iR8P!M!XVs6!enZM3}ldJZ>)gjKiK8wv&-JHqhN2=_(*C+$XM&4Yvd&DW>9!v^9g zho_nfG$P!_StjtcRuq&_+b~i2%F@S9v@m@3Bd*|ej1O1$ zEJdv&C3pE`$$241dI88>^wG6f%xskN-V^*va(H=LAwe{ciy#2B;0v4+$v~r&P0fl3 zy}mmq!>+IO7H`6&4n>-)t;O<|2AFU`x&3NNn~z{`zH4tMI=;^gB(;XKx3swhzFi(J zC_<3}$KBmH5HXZ}twReSrC%?8IX3NpVZN=-6;722Y=5}1%zPkGG;aSYDXb1jWY48u zOACBybf#zlOj)0!DxsAUwe%reY!Cb@wa=6udOxG7?&C? zSWe@6kqWgr@Au_C3*FU_J;*F8CuVPdtG<$(gJa)lXH<@E3UiHsqbMKF0uSSTlEWt5nm7sRwY1OtkH zF<6xRYS@2{w6O(F`Wzx8iiThz$=dFFW{-#*>Q{Frjkcs|_jrzKpdDx+7ykzH1FdfI za8K`^e=#c7%%+QwFr0DTI+M0m+l?Ez^TxY=&fC$~oGj!px>2BQz}1YCmKHW|2#GS~ z!9X9wwh)|b5YVh+-ML`sp(FT^Uu%-n-{NNq>UX171+-mq{^}+EWN0n^?OiA!pmnqN zU>wK}?13Vf%|CLVJIa#AQ^!}mbHZhm#)}sQJPMW8B(nWnb*PkTS{($}=(hC^weH6U z@b+3a(7FEEi6J?cg7!k-=*-^}L}Mf2q;k<8s z-r4kEHZ0nq39&ohc0)vWKX zDLX6~%5e3Hb81NnKvH#8NV+|so25asZTkbo`QnAi_8?1azN}oG*6mYG54IBDRCM}m z5X{2|dne_qK@ubwxdM(nR8`tf0;+gyzqVc5ST27|={D3*s+nPOUINQvcV9g(h1qO# z9fNtnS;LgCElp0ob?a7gvMUIvy{Jh#E+OVVh?oNbNKp`T;@?j*>98Y@j&YPa7ZT*^ zTHIyBp_RwXwUUSLtBb`$4ktZq<|Z>}WIRObpE~?YxXfwDZ}hpY`k2TCm$!AjBFW{{ml{1u5|!C+NpR=6OqtAI+~g< zt(!pu2|YbMUM3O&7i2BWr_2q9PwJ6o$xF%-2OmVI$su1^ZPom9*FjrE^4BQ!jG6`p zMH!t}MGvT;@s@hUB6rSXd5)4$>#WnHqVMhC)n$fkw}AsZR{EPhHRc{FZgRFd+Z3uZ z{mJn{$26aXHjXtARZ@eV3+alP@R%#g-(XqA5>)qL ztSH()aOr%AUkvJHgF9QF|EYt;?}G1}>U|OHdVAy61ECL!R_r!bwwU6BxP<=z5LcfC diff --git a/assets/hbm/textures/items/gun_buckshot_dragon.png b/assets/hbm/textures/items/gun_buckshot_dragon.png new file mode 100644 index 0000000000000000000000000000000000000000..af6b5dbf8f6bec8f1d5b98c9721235763e815b6c GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfMmx-|ic{i3igTtSuKfbKt;% zhBsU}467M=fMDV+j@yZP2iRtOnECIQG|S-_*GY`;_brxc;ePOiX_umk?;B^@%?$3@dSa*AxJh+?w$Luh}xg|FC pvme^`=<1$1@ZefY^xFeW3?Ecg7n$yyHyh||22WQ%mvv4FO#l(qU`_x4 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/gun_buckshot_explosive.png b/assets/hbm/textures/items/gun_buckshot_explosive.png new file mode 100644 index 0000000000000000000000000000000000000000..23ccbd54ad0f65b56d96362baeec8b95c29e74dc GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf^?V9CGRmcRxC zDd7US49v{T&M6Yi%_}&X_9vT{mHPbfssGE?l(F1yzi91t#%a_;cjI z2H}(EvsMWhF5<2DHLbDny>5%H?wJDz3Z}V;8vwzNSFXPXl9 soRh_MW=c;zxs45Wm`FVdQ&MBb@0Khd`?f?J) literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/gun_buckshot_poison.png b/assets/hbm/textures/items/gun_buckshot_poison.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8e2e4c5377dc5396a058d52c465e9663633b12 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf)@cs%nJb21az*xDwm>}qIiY&>{f#)jK+g&Ik(?xWM#PWOXH!ill=mq%Naaf{an^LB{Ts5MkHQ& literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/gun_buckshot_shock.png b/assets/hbm/textures/items/gun_buckshot_shock.png new file mode 100644 index 0000000000000000000000000000000000000000..193c51cff6df7eeaa7ebe9f228d3c33a61dfe44c GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf6E4ot;{?J_+DlT9ra~1ILhgy(Dz6y z{+HF=pI_eT$gWx2`+cc~Oca0RtY6jtQ+gI>9y!<9TNu1{x2HpFcjHB|ZbpVkwm_37 zp{6&t%{{t(?T@{o0tapxo>2ZTUZ<$o5IuczO!vYCTdz!GnkPFYmd{~LgZl$EhU3jH zTc=m-WM|5GKmV8R`^stRcGJbRJ!C2QxjQjun zaWv!*Kk$;Z#JPZRjoyqIzvn$X+b>`6=kNRYw$7dJJIfDV-p<358YsYf>ClhZhRfXh zo(V+F;CIr$;k$_Oz1`#Ol57QPPk-Lz`Jb4RnaIYrUF}X5yBGt*#ZUH^y7SBr1HHuH M>FVdQ&MBb@08glEs{jB1 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/radx.png b/assets/hbm/textures/items/radx.png index 0026e2c0c698b10cdc972af74345e448f4aad367..363b73867ee85cf79be792b68486cdad71a08ec1 100644 GIT binary patch delta 258 zcmV+d0sa1h08V1Kz)T1=k4E{POi*tS-grg)?W){O9HR!0`E-00S@A2L^R57p!Voa2c?! zA%Q`F^$&v}>pzC~zp*+Lw->5>bp8vl{(tN{ZHKy-jBAh8;tq@?s;NlEGd&1-x9D=8`cKXc{`)-b>ds(f_*pE+{|j&EMu z^B-3r;*7?9tuYJ?43HRr0PNvSn^%GTc?E&xdd0Cc2S&UWNSjsO4v07*qo IM6N<$f|B=m;Q#;t delta 214 zcmV;{04e{j0)hgNG=I5CL_t(IjbmUKXuya~@aDBW|37~dVBqEYz<^Afn3!OwXQGJ< z7#J8Bs(f_*3$XrS5M=$w@cuUwL)rQpSk+SO0;~qWY=;3s)_)9Lfg1nm=YsgI2^eDj zty8cXfHh#woH_HKm+J$DxVn}L&Opa7KuJmIzmk&D|C`tL{7+X>Qu=@9%o(g07*qoM6N<$f>zIFp8x;= diff --git a/com/hbm/blocks/generic/WasteEarth.java b/com/hbm/blocks/generic/WasteEarth.java index f2c1e553b..b09651d79 100644 --- a/com/hbm/blocks/generic/WasteEarth.java +++ b/com/hbm/blocks/generic/WasteEarth.java @@ -7,6 +7,7 @@ import com.hbm.entity.mob.EntityNuclearCreeper; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.potion.HbmPotion; import com.hbm.saveddata.RadiationSavedData; import cpw.mods.fml.relauncher.Side; @@ -91,19 +92,19 @@ public class WasteEarth extends Block { @Override public void onEntityWalking(World p_149724_1_, int p_149724_2_, int p_149724_3_, int p_149724_4_, Entity entity) { - /*if (entity instanceof EntityLivingBase && this == ModBlocks.waste_earth) - { - Library.applyRadiation((EntityLivingBase)entity, 4, 10, 0, 0); - }*/ + if (entity instanceof EntityLivingBase && this == ModBlocks.waste_earth) { + + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 15 * 20, 0)); + } + + if (entity instanceof EntityLivingBase && this == ModBlocks.frozen_grass) { - if (entity instanceof EntityLivingBase && this == ModBlocks.frozen_grass) - { ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 2 * 60 * 20, 2)); } - /*if (entity instanceof EntityLivingBase && this == ModBlocks.waste_mycelium) - { - Library.applyRadiation((EntityLivingBase)entity, 30, 14, 15, 9); - }*/ + if (entity instanceof EntityLivingBase && this == ModBlocks.waste_mycelium) { + + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 30 * 20, 3)); + } } @Override diff --git a/com/hbm/blocks/machine/ReactorCore.java b/com/hbm/blocks/machine/ReactorCore.java index cc274fd75..404096c84 100644 --- a/com/hbm/blocks/machine/ReactorCore.java +++ b/com/hbm/blocks/machine/ReactorCore.java @@ -2,6 +2,7 @@ package com.hbm.blocks.machine; import java.util.Random; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityReactorMultiblock; import net.minecraft.block.Block; @@ -25,7 +26,7 @@ public class ReactorCore extends BlockContainer { @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityReactorMultiblock(); + return new TileEntityMachineReactorLarge(); } @Override @@ -33,7 +34,7 @@ public class ReactorCore extends BlockContainer { { if (!keepInventory) { - TileEntityReactorMultiblock tileentityfurnace = (TileEntityReactorMultiblock)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); + TileEntityMachineReactorLarge tileentityfurnace = (TileEntityMachineReactorLarge)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); if (tileentityfurnace != null) { @@ -80,17 +81,17 @@ public class ReactorCore extends BlockContainer { super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); } - @Override + /*@Override public void onBlockDestroyedByExplosion(World p_149723_1_, int p_149723_2_, int p_149723_3_, int p_149723_4_, Explosion p_149723_5_) { if (!p_149723_1_.isRemote) { - TileEntityReactorMultiblock entity = (TileEntityReactorMultiblock) p_149723_1_.getTileEntity(p_149723_2_, p_149723_3_, p_149723_4_); + TileEntityMachineReactorLarge entity = (TileEntityMachineReactorLarge) p_149723_1_.getTileEntity(p_149723_2_, p_149723_3_, p_149723_4_); if(entity != null && entity.isLoaded) { entity.explode(); } } - } + }*/ } diff --git a/com/hbm/blocks/machine/ReactorHatch.java b/com/hbm/blocks/machine/ReactorHatch.java index b36fbd790..dbad47703 100644 --- a/com/hbm/blocks/machine/ReactorHatch.java +++ b/com/hbm/blocks/machine/ReactorHatch.java @@ -5,6 +5,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityReactorMultiblock; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -118,9 +119,9 @@ public class ReactorHatch extends Block { { if(world.getBlockMetadata(x, y, z) == 2) { - if(world.getTileEntity(x, y, z + 2) instanceof TileEntityReactorMultiblock) + if(world.getTileEntity(x, y, z + 2) instanceof TileEntityMachineReactorLarge) { - if(((TileEntityReactorMultiblock)world.getTileEntity(x, y, z + 2)).isStructureValid(world)) + if(((TileEntityMachineReactorLarge)world.getTileEntity(x, y, z + 2)).checkBody()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_reactor_multiblock, world, x, y, z + 2); } else { @@ -132,9 +133,9 @@ public class ReactorHatch extends Block { } if(world.getBlockMetadata(x, y, z) == 3) { - if(world.getTileEntity(x, y, z - 2) instanceof TileEntityReactorMultiblock) + if(world.getTileEntity(x, y, z - 2) instanceof TileEntityMachineReactorLarge) { - if(((TileEntityReactorMultiblock)world.getTileEntity(x, y, z - 2)).isStructureValid(world)) + if(((TileEntityMachineReactorLarge)world.getTileEntity(x, y, z - 2)).checkBody()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_reactor_multiblock, world, x, y, z - 2); } else { @@ -146,9 +147,9 @@ public class ReactorHatch extends Block { } if(world.getBlockMetadata(x, y, z) == 4) { - if(world.getTileEntity(x + 2, y, z) instanceof TileEntityReactorMultiblock) + if(world.getTileEntity(x + 2, y, z) instanceof TileEntityMachineReactorLarge) { - if(((TileEntityReactorMultiblock)world.getTileEntity(x + 2, y, z)).isStructureValid(world)) + if(((TileEntityMachineReactorLarge)world.getTileEntity(x + 2, y, z)).checkBody()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_reactor_multiblock, world, x + 2, y, z); } else { @@ -160,9 +161,9 @@ public class ReactorHatch extends Block { } if(world.getBlockMetadata(x, y, z) == 5) { - if(world.getTileEntity(x - 2, y, z) instanceof TileEntityReactorMultiblock) + if(world.getTileEntity(x - 2, y, z) instanceof TileEntityMachineReactorLarge) { - if(((TileEntityReactorMultiblock)world.getTileEntity(x - 2, y, z)).isStructureValid(world)) + if(((TileEntityMachineReactorLarge)world.getTileEntity(x - 2, y, z)).checkBody()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_reactor_multiblock, world, x - 2, y, z); } else { diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index c4e437500..ac13024ad 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -237,9 +237,9 @@ public class GUIHandler implements IGuiHandler { case ModBlocks.guiID_reactor_multiblock: { - if(entity instanceof TileEntityReactorMultiblock) + if(entity instanceof TileEntityMachineReactorLarge) { - return new ContainerReactorMultiblock(player.inventory, (TileEntityReactorMultiblock) entity); + return new ContainerReactorMultiblock(player.inventory, (TileEntityMachineReactorLarge) entity); } return null; } @@ -931,9 +931,9 @@ public class GUIHandler implements IGuiHandler { case ModBlocks.guiID_reactor_multiblock: { - if(entity instanceof TileEntityReactorMultiblock) + if(entity instanceof TileEntityMachineReactorLarge) { - return new GUIReactorMultiblock(player.inventory, (TileEntityReactorMultiblock) entity); + return new GUIReactorMultiblock(player.inventory, (TileEntityMachineReactorLarge) entity); } return null; } diff --git a/com/hbm/inventory/FluidTank.java b/com/hbm/inventory/FluidTank.java index c56822a69..8957bb758 100644 --- a/com/hbm/inventory/FluidTank.java +++ b/com/hbm/inventory/FluidTank.java @@ -61,6 +61,18 @@ public class FluidTank { return maxFluid; } + public int changeTankSize(int size) { + maxFluid = size; + + if(fluid > maxFluid) { + int dif = fluid - maxFluid; + fluid = maxFluid; + return dif; + } + + return 0; + } + //Called on TE update public void updateTank(int x, int y, int z) { @@ -154,6 +166,13 @@ public class FluidTank { return; } + if(slots[in].getItem() == ModItems.inf_water && this.type.name().equals(FluidType.WATER.name())) { + this.fluid -= 50; + if(this.fluid < 0) + this.fluid = 0; + return; + } + full = FluidContainerRegistry.getFullContainer(slots[in], type); } if(full == null) diff --git a/com/hbm/inventory/container/ContainerReactorMultiblock.java b/com/hbm/inventory/container/ContainerReactorMultiblock.java index 3be08e640..0609e2a3f 100644 --- a/com/hbm/inventory/container/ContainerReactorMultiblock.java +++ b/com/hbm/inventory/container/ContainerReactorMultiblock.java @@ -1,5 +1,7 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityReactorMultiblock; import net.minecraft.entity.player.EntityPlayer; @@ -11,56 +13,31 @@ import net.minecraft.item.ItemStack; public class ContainerReactorMultiblock extends Container { - private TileEntityReactorMultiblock diFurnace; + private TileEntityMachineReactorLarge diFurnace; private int heat; - public ContainerReactorMultiblock(InventoryPlayer invPlayer, TileEntityReactorMultiblock tedf) { + public ContainerReactorMultiblock(InventoryPlayer invPlayer, TileEntityMachineReactorLarge tedf) { diFurnace = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 62, 18)); - this.addSlotToContainer(new Slot(tedf, 1, 80, 18)); - this.addSlotToContainer(new Slot(tedf, 2, 98, 18)); - this.addSlotToContainer(new Slot(tedf, 3, 116, 18)); - this.addSlotToContainer(new Slot(tedf, 4, 134, 18)); - this.addSlotToContainer(new Slot(tedf, 5, 152, 18)); - this.addSlotToContainer(new Slot(tedf, 6, 62, 36)); - this.addSlotToContainer(new Slot(tedf, 7, 80, 36)); - this.addSlotToContainer(new Slot(tedf, 8, 98, 36)); - this.addSlotToContainer(new Slot(tedf, 9, 116, 36)); - this.addSlotToContainer(new Slot(tedf, 10, 134, 36)); - this.addSlotToContainer(new Slot(tedf, 11, 152, 36)); - this.addSlotToContainer(new Slot(tedf, 12, 62, 54)); - this.addSlotToContainer(new Slot(tedf, 13, 80, 54)); - this.addSlotToContainer(new Slot(tedf, 14, 98, 54)); - this.addSlotToContainer(new Slot(tedf, 15, 116, 54)); - this.addSlotToContainer(new Slot(tedf, 16, 134, 54)); - this.addSlotToContainer(new Slot(tedf, 17, 152, 54)); - this.addSlotToContainer(new Slot(tedf, 18, 62, 72)); - this.addSlotToContainer(new Slot(tedf, 19, 80, 72)); - this.addSlotToContainer(new Slot(tedf, 20, 98, 72)); - this.addSlotToContainer(new Slot(tedf, 21, 116, 72)); - this.addSlotToContainer(new Slot(tedf, 22, 134, 72)); - this.addSlotToContainer(new Slot(tedf, 23, 152, 72)); - this.addSlotToContainer(new Slot(tedf, 24, 62, 90)); - this.addSlotToContainer(new Slot(tedf, 25, 80, 90)); - this.addSlotToContainer(new Slot(tedf, 26, 98, 90)); - this.addSlotToContainer(new Slot(tedf, 27, 116, 90)); - this.addSlotToContainer(new Slot(tedf, 28, 134, 90)); - this.addSlotToContainer(new Slot(tedf, 29, 152, 90)); - //Water In - this.addSlotToContainer(new Slot(tedf, 30, 8, 90 - 18)); - //Water Out - this.addSlotToContainer(new Slot(tedf, 31, 8, 90)); - //Coolant In - this.addSlotToContainer(new Slot(tedf, 32, 26, 90 - 18)); - //Coolant Out - this.addSlotToContainer(new Slot(tedf, 33, 26, 90)); - //Batteries - this.addSlotToContainer(new Slot(tedf, 34, 44, 90)); - //Fuse - this.addSlotToContainer(new Slot(tedf, 35, 8, 108)); + //Water in + this.addSlotToContainer(new Slot(tedf, 0, 8, 90)); + //Water out + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 1, 8, 108)); + //Coolant in + this.addSlotToContainer(new Slot(tedf, 2, 26, 90)); + //Coolant out + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 3, 26, 108)); + + //Fuel in + this.addSlotToContainer(new Slot(tedf, 4, 80, 36)); + //Fuel out + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 5, 80, 72)); + //Waste in + this.addSlotToContainer(new Slot(tedf, 6, 152, 36)); + //Waste out + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 7, 152, 72)); for(int i = 0; i < 3; i++) { @@ -76,12 +53,6 @@ public class ContainerReactorMultiblock extends Container { } } - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 1, this.diFurnace.heat); - } - @Override public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { @@ -93,8 +64,8 @@ public class ContainerReactorMultiblock extends Container { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - if (par2 <= 33) { - if (!this.mergeItemStack(var5, 34, this.inventorySlots.size(), true)) + if (par2 <= 7) { + if (!this.mergeItemStack(var5, 8, this.inventorySlots.size(), true)) { return null; } @@ -119,29 +90,4 @@ public class ContainerReactorMultiblock 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.heat != this.diFurnace.heat) - { - par1.sendProgressBarUpdate(this, 1, this.diFurnace.heat); - } - } - - this.heat = this.diFurnace.heat; - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 1) - { - diFurnace.heat = j; - } - } } diff --git a/com/hbm/inventory/gui/GUIMachineReactorSmall.java b/com/hbm/inventory/gui/GUIMachineReactorSmall.java index d6fa27b6e..3dcbb1bef 100644 --- a/com/hbm/inventory/gui/GUIMachineReactorSmall.java +++ b/com/hbm/inventory/gui/GUIMachineReactorSmall.java @@ -82,11 +82,11 @@ public class GUIMachineReactorSmall extends GuiInfoContainer { case SUPERHOTSTEAM: s = "100x"; break; } - String[] text4 = new String[] { "Steam compression switch.", + String[] text4 = new String[] { "Steam compression switch", "Current compression level: " + s}; this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 63, guiTop + 107, 14, 18, mouseX, mouseY, text4); - String[] text5 = new String[] { diFurnace.retracting ? "Raise control rods." : "Lower control rods."}; + String[] text5 = new String[] { diFurnace.retracting ? "Raise control rods" : "Lower control rods"}; this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 52, guiTop + 53, 18, 18, mouseX, mouseY, text5); } diff --git a/com/hbm/inventory/gui/GUIReactorMultiblock.java b/com/hbm/inventory/gui/GUIReactorMultiblock.java index 4e5038822..37571e99b 100644 --- a/com/hbm/inventory/gui/GUIReactorMultiblock.java +++ b/com/hbm/inventory/gui/GUIReactorMultiblock.java @@ -5,9 +5,13 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerReactorMultiblock; import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxButtonPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityReactorMultiblock; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; @@ -15,10 +19,10 @@ import net.minecraft.util.ResourceLocation; public class GUIReactorMultiblock extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_reactor_multiblock.png"); - private TileEntityReactorMultiblock diFurnace; + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_reactor_large_experimental.png"); + private TileEntityMachineReactorLarge diFurnace; - public GUIReactorMultiblock(InventoryPlayer invPlayer, TileEntityReactorMultiblock tedf) { + public GUIReactorMultiblock(InventoryPlayer invPlayer, TileEntityMachineReactorLarge tedf) { super(new ContainerReactorMultiblock(invPlayer, tedf)); diFurnace = tedf; @@ -32,8 +36,71 @@ public class GUIReactorMultiblock extends GuiInfoContainer { diFurnace.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70 - 52, 16, 52); diFurnace.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 70 - 52, 16, 52); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 44, guiTop + 88 - 70, 16, 70, diFurnace.power, diFurnace.maxPower); + + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 115, guiTop + 17, 18, 90, new String[] { "Operating Level: " + diFurnace.rods + "%" }); + + String fuel = ""; + + switch(diFurnace.type) { + case URANIUM: + fuel = "Uranium"; + break; + case MOX: + fuel = "MOX"; + break; + case PLUTONIUM: + fuel = "Plutonium"; + break; + case SCHRABIDIUM: + fuel = "Schrabidium"; + break; + case UNKNOWN: + fuel = "ERROR"; + break; + } + + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 98, guiTop + 18, 16, 88, new String[] { fuel + ": " + (diFurnace.fuel / diFurnace.fuelMult) + "/" + (diFurnace.maxFuel / diFurnace.fuelMult) + "ng" }); + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 18, 16, 88, new String[] { "Depleted " + fuel + ": " + (diFurnace.waste / diFurnace.fuelMult) + "/" + (diFurnace.maxWaste / diFurnace.fuelMult) + "ng" }); + + String[] text0 = new String[] { diFurnace.rods > 0 ? "Reactor is ON" : "Reactor is OFF"}; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 52, guiTop + 53, 18, 18, mouseX, mouseY, text0); } + + @SuppressWarnings("incomplete-switch") + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 115 <= x && guiLeft + 115 + 18 > x && guiTop + 17 < y && guiTop + 17 + 90 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + + int rods = (y - (guiTop + 24)) * 100 / 76; + + if(rods < 0) + rods = 0; + + if(rods > 100) + rods = 100; + + rods = 100 - rods; + + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord, rods, 0)); + } + + if(guiLeft + 63 <= x && guiLeft + 63 + 14 > x && guiTop + 107 < y && guiTop + 107 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + int c = 0; + + switch(diFurnace.tanks[2].getTankType()) { + case STEAM: c = 0; break; + case HOTSTEAM: c = 1; break; + case SUPERHOTSTEAM: c = 2; break; + } + + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord, c, 1)); + } + } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { @@ -43,22 +110,72 @@ public class GUIReactorMultiblock extends GuiInfoContainer { this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } + @SuppressWarnings("incomplete-switch") @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); - - int k = (int)diFurnace.getPowerScaled(70); - drawTexturedModalRect(guiLeft + 44, guiTop + 88 - k, 208, 70 - k, 16, k); - - int l = diFurnace.getHeatScaled(142); - drawTexturedModalRect(guiLeft + 26, guiTop + 108, 0, 222, l, 16); + int k = diFurnace.rods; + drawTexturedModalRect(guiLeft + 115, guiTop + 107 - 14 - (k * 76 / 100), 208, 36, 18, 14); + + if(diFurnace.rods > 0) + drawTexturedModalRect(guiLeft + 52, guiTop + 53, 212, 0, 18, 18); + + int q = diFurnace.getFuelScaled(88); + drawTexturedModalRect(guiLeft + 98, guiTop + 106 - q, 176, 124 - q, 16, q); + + int j = diFurnace.getWasteScaled(88); + drawTexturedModalRect(guiLeft + 134, guiTop + 106 - j, 192, 124 - j, 16, j); + + int s = diFurnace.size; + + if(s < 8) + drawTexturedModalRect(guiLeft + 50, guiTop + 17, 208, 50 + s * 18, 22, 18); + else + drawTexturedModalRect(guiLeft + 50, guiTop + 17, 230, 50 + (s - 8) * 18, 22, 18); + + switch(diFurnace.tanks[2].getTankType()) { + case STEAM: drawTexturedModalRect(guiLeft + 63, guiTop + 107, 176, 18, 14, 18); break; + case HOTSTEAM: drawTexturedModalRect(guiLeft + 63, guiTop + 107, 190, 18, 14, 18); break; + case SUPERHOTSTEAM: drawTexturedModalRect(guiLeft + 63, guiTop + 107, 204, 18, 14, 18); break; + } + + if(diFurnace.hasHullHeat()) { + int i = diFurnace.getHullHeatScaled(88); + + i = (int) Math.min(i, 160); + + drawTexturedModalRect(guiLeft + 80, guiTop + 114, 0, 226, i, 4); + } + + if(diFurnace.hasCoreHeat()) { + int i = diFurnace.getCoreHeatScaled(88); + + i = (int) Math.min(i, 160); + + drawTexturedModalRect(guiLeft + 80, guiTop + 120, 0, 230, i, 4); + } + + if(diFurnace.tanks[2].getFill() > 0) { + int i = diFurnace.getSteamScaled(88); + + //i = (int) Math.min(i, 160); + + int offset = 234; + + switch(diFurnace.tanks[2].getTankType()) { + case HOTSTEAM: offset += 4; break; + case SUPERHOTSTEAM: offset += 8; break; + } + + drawTexturedModalRect(guiLeft + 80, guiTop + 108, 0, offset, i, 4); + } + Minecraft.getMinecraft().getTextureManager().bindTexture(diFurnace.tanks[0].getSheet()); - diFurnace.tanks[0].renderTank(this, guiLeft + 8, guiTop + 70, diFurnace.tanks[0].getTankType().textureX() * FluidTank.x, diFurnace.tanks[0].getTankType().textureY() * FluidTank.y, 16, 52); - + 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 + 70, diFurnace.tanks[1].getTankType().textureX() * FluidTank.x, diFurnace.tanks[1].getTankType().textureY() * FluidTank.y, 16, 52); + 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/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 73edbb1da..e61d6ab1b 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -306,6 +306,8 @@ 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.TileEntityMachineReactorLarge; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge.ReactorFuelType; import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineRefinery; import com.hbm.tileentity.machine.TileEntityMachineSPP; @@ -659,7 +661,6 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityDecoBlock.class, "tileentity_deco"); GameRegistry.registerTileEntity(TileEntityCoreTitanium.class, "tileentity_core_titanium"); GameRegistry.registerTileEntity(TileEntityCoreAdvanced.class, "tileentity_core_advanced"); - GameRegistry.registerTileEntity(TileEntityReactorMultiblock.class, "tileentity_reactor_multiblock"); GameRegistry.registerTileEntity(TileEntityFusionMultiblock.class, "tileentity_fusion_multiblock"); GameRegistry.registerTileEntity(TileEntityCrashedBomb.class, "tileentity_crashed_balefire"); GameRegistry.registerTileEntity(TileEntityCable.class, "tileentity_cable"); @@ -747,6 +748,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityMachineShredderLarge.class, "tileentity_machine_big_shredder"); GameRegistry.registerTileEntity(TileEntityRFDuct.class, "tileentity_hbm_rfduct"); GameRegistry.registerTileEntity(TileEntityReactorControl.class, "tileentity_reactor_remote_control"); + GameRegistry.registerTileEntity(TileEntityMachineReactorLarge.class, "tileentity_large_reactor"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); @@ -1597,6 +1599,42 @@ public class MainRegistry HazmatRegistry.instance.registerHazmat(ModItems.euphemium_plate, 12F); HazmatRegistry.instance.registerHazmat(ModItems.euphemium_legs, 9F); HazmatRegistry.instance.registerHazmat(ModItems.euphemium_boots, 3F); + + TileEntityMachineReactorLarge.registerFuelEntry(1, ReactorFuelType.URANIUM, false, ModItems.nugget_uranium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(9, ReactorFuelType.URANIUM, false, ModItems.ingot_uranium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.URANIUM, false, ModItems.rod_uranium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.URANIUM, false, ModItems.rod_dual_uranium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.URANIUM, false, ModItems.rod_quad_uranium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.URANIUM, true, ModItems.rod_uranium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.URANIUM, true, ModItems.rod_dual_uranium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.URANIUM, true, ModItems.rod_quad_uranium_fuel_depleted); + + TileEntityMachineReactorLarge.registerFuelEntry(1, ReactorFuelType.PLUTONIUM, false, ModItems.nugget_plutonium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(9, ReactorFuelType.PLUTONIUM, false, ModItems.ingot_plutonium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.PLUTONIUM, false, ModItems.rod_plutonium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.PLUTONIUM, false, ModItems.rod_dual_plutonium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.PLUTONIUM, false, ModItems.rod_quad_plutonium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.PLUTONIUM, true, ModItems.rod_plutonium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.PLUTONIUM, true, ModItems.rod_dual_plutonium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.PLUTONIUM, true, ModItems.rod_quad_plutonium_fuel_depleted); + + TileEntityMachineReactorLarge.registerFuelEntry(1, ReactorFuelType.MOX, false, ModItems.nugget_mox_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(9, ReactorFuelType.MOX, false, ModItems.ingot_mox_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.MOX, false, ModItems.rod_mox_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.MOX, false, ModItems.rod_dual_mox_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.MOX, false, ModItems.rod_quad_mox_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.MOX, true, ModItems.rod_mox_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.MOX, true, ModItems.rod_dual_mox_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.MOX, true, ModItems.rod_quad_mox_fuel_depleted); + + TileEntityMachineReactorLarge.registerFuelEntry(1, ReactorFuelType.SCHRABIDIUM, false, ModItems.nugget_schrabidium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(9, ReactorFuelType.SCHRABIDIUM, false, ModItems.ingot_schrabidium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.SCHRABIDIUM, false, ModItems.rod_schrabidium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.SCHRABIDIUM, false, ModItems.rod_dual_schrabidium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.SCHRABIDIUM, false, ModItems.rod_quad_schrabidium_fuel); + TileEntityMachineReactorLarge.registerFuelEntry(6, ReactorFuelType.SCHRABIDIUM, true, ModItems.rod_schrabidium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(12, ReactorFuelType.SCHRABIDIUM, true, ModItems.rod_dual_schrabidium_fuel_depleted); + TileEntityMachineReactorLarge.registerFuelEntry(24, ReactorFuelType.SCHRABIDIUM, true, ModItems.rod_quad_schrabidium_fuel_depleted); } @EventHandler diff --git a/com/hbm/packet/AuxButtonPacket.java b/com/hbm/packet/AuxButtonPacket.java index d7cc27ecb..ff8efe723 100644 --- a/com/hbm/packet/AuxButtonPacket.java +++ b/com/hbm/packet/AuxButtonPacket.java @@ -11,6 +11,7 @@ import com.hbm.tileentity.machine.TileEntityAMSEmitter; import com.hbm.tileentity.machine.TileEntityAMSLimiter; import com.hbm.tileentity.machine.TileEntityForceField; import com.hbm.tileentity.machine.TileEntityMachineDiesel; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; import com.hbm.tileentity.machine.TileEntityRadioRec; @@ -154,6 +155,30 @@ public class AuxButtonPacket implements IMessage { } } + if (te instanceof TileEntityMachineReactorLarge) { + TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)te; + + if(m.id == 0) + reactor.rods = m.value; + + if(m.id == 1) { + FluidType type = FluidType.STEAM; + int fill = reactor.tanks[2].getFill(); + + switch(m.value) { + case 0: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 1: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 2: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; + } + + if(fill > reactor.tanks[2].getMaxFill()) + fill = reactor.tanks[2].getMaxFill(); + + reactor.tanks[2].setTankType(type); + reactor.tanks[2].setFill(fill); + } + } + //} catch (Exception x) { } return null; diff --git a/com/hbm/packet/AuxGaugePacket.java b/com/hbm/packet/AuxGaugePacket.java index 864b6ef7c..8d07e029a 100644 --- a/com/hbm/packet/AuxGaugePacket.java +++ b/com/hbm/packet/AuxGaugePacket.java @@ -17,6 +17,8 @@ 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.TileEntityMachineReactorLarge; +import com.hbm.tileentity.machine.TileEntityMachineReactorLarge.ReactorFuelType; import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; import com.hbm.tileentity.machine.TileEntityRadioRec; @@ -209,6 +211,24 @@ public class AuxGaugePacket implements IMessage { nuke.primed = m.value == 1; } + if (te instanceof TileEntityMachineReactorLarge) { + TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)te; + + if(m.id == 0) + reactor.rods = m.value; + if(m.id == 1) + reactor.coreHeat = m.value; + if(m.id == 2) + reactor.hullHeat = m.value; + if(m.id == 3) + reactor.size = m.value; + if(m.id == 4) + reactor.fuel = m.value; + if(m.id == 5) + reactor.waste = m.value; + if(m.id == 6) + reactor.type = ReactorFuelType.getEnum(m.value); + } } catch (Exception x) {} return null; diff --git a/com/hbm/tileentity/machine/TileEntityMachineReactorLarge.java b/com/hbm/tileentity/machine/TileEntityMachineReactorLarge.java new file mode 100644 index 000000000..42c9edb5e --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityMachineReactorLarge.java @@ -0,0 +1,672 @@ +package com.hbm.tileentity.machine; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.explosion.ExplosionNukeGeneric; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.interfaces.IFluidSource; +import com.hbm.inventory.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemFuelRod; +import com.hbm.lib.Library; +import com.hbm.packet.AuxGaugePacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.saveddata.RadiationSavedData; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +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; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityMachineReactorLarge extends TileEntity + implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource { + + private ItemStack slots[]; + + public int hullHeat; + public final int maxHullHeat = 100000; + public int coreHeat; + public final int maxCoreHeat = 50000; + public int rods; + public final int rodsMax = 100; + public int age = 0; + public List list = new ArrayList(); + public FluidTank[] tanks; + public ReactorFuelType type; + public int fuel; + public int maxFuel = 240 * fuelMult; + public int waste; + public int maxWaste = 240 * fuelMult; + + public static int fuelMult = 1000; + public static int cycleDuration = 24000; + private static int fuelBase = 240 * fuelMult; + private static int waterBase = 128 * 1000; + private static int coolantBase = 64 * 1000; + private static int steamBase = 32 * 1000; + + private static final int[] slots_top = new int[] { 0 }; + private static final int[] slots_bottom = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16 }; + private static final int[] slots_side = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 }; + + private String customName; + + public TileEntityMachineReactorLarge() { + slots = new ItemStack[8]; + tanks = new FluidTank[3]; + tanks[0] = new FluidTank(FluidType.WATER, 128000, 0); + tanks[1] = new FluidTank(FluidType.COOLANT, 64000, 1); + tanks[2] = new FluidTank(FluidType.STEAM, 32000, 2); + type = ReactorFuelType.URANIUM; + } + + @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.reactorLarge"; + } + + @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) { + 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); + + coreHeat = nbt.getInteger("heat"); + hullHeat = nbt.getInteger("hullHeat"); + rods = nbt.getInteger("rods"); + slots = new ItemStack[getSizeInventory()]; + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "coolant"); + type = ReactorFuelType.getEnum(nbt.getInteger("type")); + + 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", coreHeat); + nbt.setInteger("hullHeat", hullHeat); + nbt.setInteger("rods", rods); + NBTTagList list = new NBTTagList(); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "coolant"); + nbt.setInteger("type", type.getID()); + + 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 false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + + } + + public int getCoreHeatScaled(int i) { + return (coreHeat * i) / maxCoreHeat; + } + + public int getHullHeatScaled(int i) { + return (hullHeat * i) / maxHullHeat; + } + + public int getFuelScaled(int i) { + return (fuel * i) / maxFuel; + } + + public int getWasteScaled(int i) { + return (waste * i) / maxWaste; + } + + public int getSteamScaled(int i) { + return (tanks[2].getFill() * i) / tanks[2].getMaxFill(); + } + + public boolean hasCoreHeat() { + return coreHeat > 0; + } + + public boolean hasHullHeat() { + return hullHeat > 0; + } + + public boolean checkBody() { + + return worldObj.getBlock(xCoord + 1, yCoord, zCoord + 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord - 1, yCoord, zCoord + 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord - 1, yCoord, zCoord - 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord + 1, yCoord, zCoord - 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord + 1, yCoord, zCoord) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord - 1, yCoord, zCoord) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord, yCoord, zCoord + 1) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord, yCoord, zCoord - 1) == ModBlocks.reactor_control; + } + + public boolean checkSegment(int offset) { + + return worldObj.getBlock(xCoord + 1, yCoord + offset, zCoord + 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord - 1, yCoord + offset, zCoord + 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord - 1, yCoord + offset, zCoord - 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord + 1, yCoord + offset, zCoord - 1) == ModBlocks.reactor_element && + worldObj.getBlock(xCoord + 1, yCoord + offset, zCoord) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord - 1, yCoord + offset, zCoord) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord, yCoord + offset, zCoord + 1) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord, yCoord + offset, zCoord - 1) == ModBlocks.reactor_control && + worldObj.getBlock(xCoord, yCoord + offset, zCoord) == ModBlocks.reactor_conductor; + } + + int height; + int depth; + public int size; + + private void caluclateSize() { + + height = 0; + depth = 0; + + for(int i = 0; i < 7; i++) { + + if(checkSegment(i + 1)) + height++; + else + break; + } + + for(int i = 0; i < 7; i++) { + + if(checkSegment(-i - 1)) + depth++; + else + break; + } + + size = height + depth + 1; + } + + private int getSize() { + return size; + } + + private void generate() { + + int consumption = (maxFuel / cycleDuration) * rods / 100; + + if(consumption > fuel) + consumption = fuel; + + if(consumption + waste > maxWaste) + consumption = maxWaste - waste; + + fuel -= consumption; + waste += consumption; + + int heat = consumption * type.heat / fuelMult; + + this.coreHeat += heat; + + } + + @Override + public void updateEntity() { + + if (!worldObj.isRemote && checkBody()) { + + age++; + if (age >= 20) { + age = 0; + } + + if (age == 9 || age == 19) + fillFluidInit(tanks[2].getTankType()); + + caluclateSize(); + + tanks[0].changeTankSize(waterBase * getSize()); + tanks[1].changeTankSize(coolantBase * getSize()); + tanks[2].changeTankSize(steamBase * getSize()); + } + + maxWaste = maxFuel = fuelBase * getSize(); + + if(!worldObj.isRemote) { + + if(waste > maxWaste) + waste = maxWaste; + + if(fuel > maxFuel) + fuel = maxFuel; + + tanks[0].loadTank(0, 1, slots); + tanks[1].loadTank(2, 3, slots); + + if(fuel == 0) { + + if(slots[4] != null && !getFuelType(slots[4].getItem()).toString().equals(ReactorFuelType.UNKNOWN.toString())) { + + this.type = getFuelType(slots[4].getItem()); + + } + } + + if(slots[4] != null && getFuelContent(slots[4].getItem(), type) > 0) { + + int cont = getFuelContent(slots[4].getItem(), type) * fuelMult; + + System.out.println(type.toString()); + + if(fuel + cont <= maxFuel) { + + if(!slots[4].getItem().hasContainerItem()) { + + slots[4].stackSize--; + fuel += cont; + + } else if(slots[5] == null) { + + slots[5] = new ItemStack(slots[4].getItem().getContainerItem()); + slots[4].stackSize--; + fuel += cont; + + } else if(slots[4].getItem().getContainerItem() == slots[5].getItem() && slots[5].stackSize < slots[5].getMaxStackSize()) { + + slots[4].stackSize--; + slots[5].stackSize++; + fuel += cont; + + } + + if(slots[4].stackSize == 0) + slots[4] = null; + } + } + + if(rods > 0) + generate(); + + if (this.coreHeat > 0 && this.tanks[1].getFill() > 0 && this.hullHeat < this.maxHullHeat) { + this.hullHeat += this.coreHeat * 0.175; + this.coreHeat -= this.coreHeat * 0.1; + + this.tanks[1].setFill(this.tanks[1].getFill() - 10); + + if (this.tanks[1].getFill() < 0) + this.tanks[1].setFill(0); + } + + if (this.hullHeat > maxHullHeat) { + this.hullHeat = maxHullHeat; + } + + if (this.hullHeat > 0 && this.tanks[0].getFill() > 0) { + generateSteam(); + this.hullHeat -= this.hullHeat * 0.085; + } + + if (this.coreHeat > maxCoreHeat) { + this.explode(); + } + + if (rods > 0 && coreHeat > 0 /*rad block*/) { + + float rad = (float)coreHeat / (float)maxCoreHeat * 50F; + RadiationSavedData data = RadiationSavedData.getData(worldObj); + data.incrementRad(worldObj, xCoord, zCoord, rad, rad * 4); + } + + for (int i = 0; i < 3; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, rods, 0)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, coreHeat, 1)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, hullHeat, 2)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, size, 3)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, fuel, 4)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, waste, 5)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, type.getID(), 6)); + } + } + + @SuppressWarnings("incomplete-switch") + private void generateSteam() { + + //function of SHS produced per tick + //maxes out at heat% * tank capacity / 20 + double steam = (((double)hullHeat / (double)maxHullHeat) * ((double)tanks[2].getMaxFill() / 50D)) * size; + + double water = steam; + + switch(tanks[2].getTankType()) { + case STEAM: + water /= 100D; + break; + case HOTSTEAM: + water /= 10; + break; + case SUPERHOTSTEAM: + break; + } + + tanks[0].setFill(tanks[0].getFill() - (int)Math.ceil(water)); + tanks[2].setFill(tanks[2].getFill() + (int)Math.floor(steam)); + + if(tanks[0].getFill() < 0) + tanks[0].setFill(0); + + if(tanks[2].getFill() > tanks[2].getMaxFill()) + tanks[2].setFill(tanks[2].getMaxFill()); + + } + + private void explode() { + for (int i = 0; i < slots.length; i++) { + this.slots[i] = null; + } + + worldObj.createExplosion(null, this.xCoord, this.yCoord, this.zCoord, 7.5F, true); + ExplosionNukeGeneric.waste(worldObj, this.xCoord, this.yCoord, this.zCoord, 35); + worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, ModBlocks.toxic_block); + + for(int i = yCoord - depth; i <= yCoord + height; i++) { + + if(worldObj.rand.nextInt(4) == 0) { + worldObj.setBlock(this.xCoord + 1, i, this.zCoord + 1, ModBlocks.toxic_block); + } + if(worldObj.rand.nextInt(4) == 0) { + worldObj.setBlock(this.xCoord + 1, i, this.zCoord - 1, ModBlocks.toxic_block); + } + if(worldObj.rand.nextInt(4) == 0) { + worldObj.setBlock(this.xCoord - 1, i, this.zCoord - 1, ModBlocks.toxic_block); + } + if(worldObj.rand.nextInt(4) == 0) { + worldObj.setBlock(this.xCoord - 1, i, this.zCoord + 1, ModBlocks.toxic_block); + } + + if(worldObj.rand.nextInt(10) == 0) { + worldObj.createExplosion(null, this.xCoord, this.yCoord, this.zCoord, 5.0F, true); + } + } + + RadiationSavedData data = RadiationSavedData.getData(worldObj); + data.incrementRad(worldObj, xCoord, zCoord, 1000F, 2000F); + } + + @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 void fillFluidInit(FluidType type) { + fillFluid(this.xCoord - 3, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord + 3, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord - 3, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord + 3, getTact(), type); + } + + @Override + public boolean getTact() { + if (age >= 0 && age < 10) { + return true; + } + + return false; + } + + @Override + public int getMaxFluidFill(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 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); + else if (type.name().equals(tanks[2].getTankType().name())) + tanks[2].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(); + else if (type.name().equals(tanks[2].getTankType().name())) + return tanks[2].getFill(); + else + return 0; + } + + @Override + public void setFillstate(int fill, int index) { + if (index < 3 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + if (index < 3 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getTanks() { + List list = new ArrayList(); + list.add(tanks[0]); + list.add(tanks[1]); + list.add(tanks[2]); + + return list; + } + + @Override + public List getFluidList(FluidType type) { + return list; + } + + @Override + public void clearFluidList(FluidType type) { + list.clear(); + } + + public enum ReactorFuelType { + + URANIUM(250000), + PLUTONIUM(312500), + MOX(250000), + SCHRABIDIUM(20850000), + UNKNOWN(1); + + private ReactorFuelType(int i) { + heat = i; + } + + //Heat per nugget burned + private int heat; + + public int getHeat() { + return heat; + } + + public int getID() { + return Arrays.asList(ReactorFuelType.values()).indexOf(this); + } + + public static ReactorFuelType getEnum(int i) { + if(i < ReactorFuelType.values().length) + return ReactorFuelType.values()[i]; + else + return ReactorFuelType.URANIUM; + } + } + + static class ReactorFuelEntry { + + int value; + ReactorFuelType type; + boolean isWaste; + Item item; + + public ReactorFuelEntry(int value, ReactorFuelType type, boolean isWaste, Item item) { + this.value = value; + this.type = type; + this.isWaste = isWaste; + this.item = item; + } + } + + static List entries = new ArrayList(); + + public static void registerFuelEntry(int nuggets, ReactorFuelType type, boolean isWaste, Item fuel) { + entries.add(new ReactorFuelEntry(nuggets, type, isWaste, fuel)); + } + + public static int getFuelContent(Item item, ReactorFuelType type) { + + for(ReactorFuelEntry ent : entries) { + if(!ent.isWaste && ent.item == item && type.toString().equals(ent.type.toString())) + return ent.value; + } + + return 0; + } + + public static ReactorFuelType getFuelType(Item item) { + + for(ReactorFuelEntry ent : entries) { + if(!ent.isWaste && ent.item == item) + return ent.type; + } + + return ReactorFuelType.UNKNOWN; + } +}