From 3ef96ad63b30b09279e6bb67afe0906e337cc230 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 12 Oct 2021 16:35:34 +0200 Subject: [PATCH] new RBMK columns --- src/main/java/com/hbm/blocks/ModBlocks.java | 6 ++ .../hbm/blocks/machine/rbmk/RBMKCooler.java | 23 +++++ .../hbm/blocks/machine/rbmk/RBMKStorage.java | 25 +++++ .../java/com/hbm/tileentity/TileMappings.java | 2 + .../machine/rbmk/IRBMKLoadable.java | 33 ++++++ .../machine/rbmk/TileEntityRBMKConsole.java | 4 +- .../machine/rbmk/TileEntityRBMKCooler.java | 96 ++++++++++++++++++ .../machine/rbmk/TileEntityRBMKStorage.java | 81 +++++++++++++++ .../hbm/textures/blocks/rbmk/rbmk_storage.png | Bin 0 -> 925 bytes .../gui/reactors/gui_rbmk_console.png | Bin 5783 -> 6015 bytes .../gui/reactors/gui_rbmk_storage.png | Bin 0 -> 2279 bytes 11 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKStorage.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKLoadable.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_storage.png create mode 100644 src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_storage.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index cccf627c9..7f5d1e630 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1034,6 +1034,8 @@ public class ModBlocks { public static Block rbmk_absorber; public static Block rbmk_moderator; public static Block rbmk_outgasser; + public static Block rbmk_storage; + public static Block rbmk_cooler; public static Block rbmk_console; public static Block rbmk_crane_console; public static final int guiID_rbmk_rod = 113; @@ -1945,6 +1947,8 @@ public class ModBlocks { rbmk_absorber = new RBMKAbsorber().setBlockName("rbmk_absorber").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_absorber"); rbmk_moderator = new RBMKModerator().setBlockName("rbmk_moderator").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_moderator"); rbmk_outgasser = new RBMKOutgasser().setBlockName("rbmk_outgasser").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_outgasser"); + rbmk_storage = new RBMKStorage().setBlockName("rbmk_storage").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_storage"); + rbmk_cooler = new RBMKCooler().setBlockName("rbmk_cooler").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_cooler"); rbmk_console = new RBMKConsole().setBlockName("rbmk_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_console"); rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console"); rbmk_loader = new BlockGeneric(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader"); @@ -2796,6 +2800,8 @@ public class ModBlocks { GameRegistry.registerBlock(rbmk_absorber, rbmk_absorber.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_moderator, rbmk_moderator.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_outgasser, rbmk_outgasser.getUnlocalizedName()); + GameRegistry.registerBlock(rbmk_storage, rbmk_storage.getUnlocalizedName()); + GameRegistry.registerBlock(rbmk_cooler, rbmk_cooler.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_console, rbmk_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_loader, rbmk_loader.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java new file mode 100644 index 000000000..5dd6fa078 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java @@ -0,0 +1,23 @@ +package com.hbm.blocks.machine.rbmk; + +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKCooler; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class RBMKCooler extends RBMKBase { + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + + if(meta >= this.offset) + return new TileEntityRBMKCooler(); + + return null; + } + + @Override + public int getRenderType(){ + return this.renderIDPassive; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKStorage.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKStorage.java new file mode 100644 index 000000000..924a0d009 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKStorage.java @@ -0,0 +1,25 @@ +package com.hbm.blocks.machine.rbmk; + +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKOutgasser; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKStorage; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class RBMKStorage extends RBMKBase { + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + + if(meta >= this.offset) + return new TileEntityRBMKStorage(); + + return new TileEntityProxyCombo(true, false, false); + } + + @Override + public int getRenderType(){ + return this.renderIDPassive; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 8fe84ccb5..3389c1969 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -255,6 +255,8 @@ public class TileMappings { map.put(TileEntityRBMKAbsorber.class, "tileentity_rbmk_absorber"); map.put(TileEntityRBMKModerator.class, "tileentity_rbmk_moderator"); map.put(TileEntityRBMKOutgasser.class, "tileentity_rbmk_outgasser"); + map.put(TileEntityRBMKCooler.class, "tileentity_rbmk_cooler"); + map.put(TileEntityRBMKStorage.class, "tileentity_rbmk_storage"); map.put(TileEntityCraneConsole.class, "tileentity_rbmk_crane_console"); map.put(TileEntityRBMKConsole.class, "tileentity_rbmk_console"); map.put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKLoadable.java b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKLoadable.java new file mode 100644 index 000000000..df7b2e3ad --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKLoadable.java @@ -0,0 +1,33 @@ +package com.hbm.tileentity.machine.rbmk; + +import net.minecraft.item.ItemStack; + +public interface IRBMKLoadable { + + /** + * @param toLoad the ItemStack that should be loaded + * @return TRUE if the provided ItemStack can be inserted into the column + */ + public boolean canLoad(ItemStack toLoad); + + /** + * Loads the given ItemStack, canLoad check necessary first + * @param toLoad + */ + public void load(ItemStack toLoad); + + /** + * @return TRUE if the column contains an ItemStack that can be unloaded + */ + public boolean canUnload(); + + /** + * @return The next ItemStack to be unloaded + */ + public ItemStack provideNext(); + + /** + * Removes the next ItemStack as part of the unloading process + */ + public void unload(); +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 228fcafeb..cab900e44 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -270,7 +270,9 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon ABSORBER(60), REFLECTOR(70), OUTGASSER(80), - BREEDER(100); + BREEDER(100), + STORAGE(110), + COOLER(120); public int offset; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java new file mode 100644 index 000000000..9152872bb --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java @@ -0,0 +1,96 @@ +package com.hbm.tileentity.machine.rbmk; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.inventory.FluidTank; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidAcceptor { + + private FluidTank tank; + + public TileEntityRBMKCooler() { + super(); + + this.tank = new FluidTank(FluidType.CRYOGEL, 8000, 0); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if((int)(this.heat) > 750) { + + int heatProvided = (int)(this.heat - 750D); + int cooling = Math.min(heatProvided, tank.getFill()); + + this.heat -= cooling; + this.tank.setFill(this.tank.getFill() - cooling); + + /* + * spew fire here + */ + } + } + + super.updateEntity(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + tank.readFromNBT(nbt, "cryo"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + tank.writeToNBT(nbt, "cryo"); + } + + @Override + public ColumnType getConsoleType() { + return ColumnType.COOLER; + } + + @Override + public void setFillstate(int fill, int index) { + tank.setFill(fill); + } + + @Override + public void setFluidFill(int fill, FluidType type) { + if(type == tank.getTankType()) + tank.setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + tank.setTankType(type); + } + + @Override + public List getTanks() { + return new ArrayList() {{ add(tank); }}; + } + + @Override + public int getFluidFill(FluidType type) { + return type == tank.getTankType() ? tank.getFill() : 0; + } + + @Override + public int getMaxFluidFill(FluidType type) { + return type == tank.getTankType() ? tank.getMaxFill() : 0; + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java new file mode 100644 index 000000000..ece42344a --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -0,0 +1,81 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.items.machine.ItemRBMKRod; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements IRBMKLoadable { + + public TileEntityRBMKStorage() { + super(12); + } + + @Override + public String getName() { + return "container.rbmkStorage"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(int i = 0; i < slots.length - 1; i++) { + + if(slots[i] == null && slots[i + 1] != null) { + slots[i] = slots[i + 1]; + slots[i + 1] = null; + } + } + } + + super.updateEntity(); + } + + @Override + public ColumnType getConsoleType() { + return ColumnType.STORAGE; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return itemStack.getItem() instanceof ItemRBMKRod; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + } + + @Override + public boolean canLoad(ItemStack toLoad) { + return slots[11] == null; + } + + @Override + public void load(ItemStack toLoad) { + slots[11] = toLoad.copy(); + } + + @Override + public boolean canUnload() { + return slots[0] != null; + } + + @Override + public ItemStack provideNext() { + return slots[0]; + } + + @Override + public void unload() { + slots[0] = null; + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_storage.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_storage.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5ae1bfda6fce2c99d6f7e752b2e5715065b781 GIT binary patch literal 925 zcmV;O17iG%P)1A!8fZ7$Ly^$a~ikJ5W|TL>xGw9w+6 zYwKseMbSh~?EHMq+gZ|BZ$>k3Mm#<~5)v3=Fom{l57wHd!OhLhS$0oPPhx*B1AzPc zdlW?hr4(;?@6mM~y!TK_K`8|x1VRY#-Xny7x~_3|cZbz#b(Y;2G5{!w0!2|kO3541 zpzAs)rI=s{0Yn7n8~`BCbL4q`mfa))DJ6&qudlDXu^-Yj{Ok1^-g`vb5CW5zQnKgK zdm#k0*3$%HSOMVW#KXe_hzQ<$CP_pG=Y;ruZfh+<2-5_NF(4u~0D!8hj*>{> zoEzlEKA{-;EX&3T#GmXl{QUepI6RxpV2nZE_nZUHIY=qty@zuSM1&9mUmTw%o*yM( ztwok)M@uP%wU&SAy+_~oAR>O67zrT+y!X65Nq~sZ_x)Ly1Ax|=JtQLh{QPjT#qeiY z#*q<19Djl=%O(%(qitIhMZw=vO3t4cZXpC~ic;$6|5*p}JReoMF~m}9+ZI}D6h*!?mqIw=BptZ(&y=Gqwb%wnkc!QI zUtg_O5JFsqgamftF;%Mo2HAhCxm-*jod@C@$IDVebzPq%`CkNpU9V0>W4qmQ?S>FA zpU)A`rt`pGF_7Ze(}@VP*^DpQY&HN+Ys7yOXqpC1)9_*{8q4L9Wf<6vR5 zjsO52qc@uklv1dw3iJ8=qPgK*unrhwSd8krW>Jz-VzF32Yt2(mTB3giyA#JIAp{nS z1#7}sUr**i1=Yg^; z5BfTQ!JH8L`t9xQb#)+}2Y_L{kCoark}u*P+fa?KDxi9X00000NkvXXu0mjfqmQY` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png index 70c13876606d257137ba39919dec821894c09578..6650681e23859692608965fa9370a0be04378086 100644 GIT binary patch literal 6015 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%0A}5f{#_Z`mHtSKJzjSL90BS6e&h ztr$BaTPSoBMovJ!t6Lr&8`MTHNxV`2>5fH7NU5+h=G*_V&}@J?oz+Dh8clUj5*$Xt z27&v=CWvaJM;kt&85!N9XQ;0g7UZ0}-xkZ4eXKf;+QVTBXH2o+|6U+N5e#epkA)|u zvj^xjvBzs|`kTF+dzkke>Q5(TYL{&XE(He%ch&e6*A^I0rsH2;y8hKRFisK1st{RM zr|H&P@zHmNQ7`GV>AE$CUKsQ+{6@N`r)O&9&Rz=#sEYPhTtXzUVyKE+_4NRWM51Tn z?}7-yh>ixcBU$0$3vR{9LI9QbPsOF)D5%BJ%dNiE_{o_UopC9)xLI6^(1IGI0+UaL z1<__|O`Je9o(qSOF}lWiA=cI+RyEaaRtDRQTN6&5a9}J|4tWR#yJ#%sV9u=aJ+X$-TI0tb`I(CrO)PjhXBBb}!c~ zv(4=X65mf!1F(}#U~V~@v%8sU_!5orP1b* literal 5783 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 S(a_NyxPDDdAx}=<`+oqB-kB-@ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_storage.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_storage.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c06e192fb9b6d47b4e5a0c0bf6b57bdd780705 GIT binary patch literal 2279 zcmbtWX;4#H7JdOFR0@cwblHI5Fb)>lgR;mHApr-lu^F(17DY*@px`z@K(_F*IM4%# zEEdiH#qu0cB7#tCV}}3{0inSpICO}}684B8gb)HrXJH=d%-B=ff9C#p=hnUFedoL9 z+;_g0b28|-3CaQm0Dwur*S@C!00B=CfRQ0=&L=#KhK)huv4Bt`cz{M1vH`%TGQig- zG__nZ!HL}|vOuo%*>tUPZGUf+x!o&bM-rcZyRbbfENM6|j;>xbBq1V5v2?$0_r=~= z_Gmc~s`$gwy~sXnZa+4_$fop5Id@H^-DlvFCS-rl!L7egk`C$O%!f=m{^>Ra5w&P0 zSvKSM(ozq4+m(SdJ8{=cy8=P^X&NOdGo~)@P4D-5sjAhB%yatClu9l#Gn1_?4jb_d zt}H^@XEbX6gH2f+LRYg3*jEkgb=(Hz*aKe&BD{$xU`Gg0SfWSo`R|rVL)+AkMf=Bo z*t6Zttiamq0A=SXW&*<3H_)!AIu6-W<`#ECn0dY3fZlV!OaIL9E0-?kfrKmO-o8EE zS!kh(B}>&zN^uwrWD1Ch-0$jm9hC_d_H-)SW@C9GcRnF)S!$T!W3^|` zpI);C;$AK{2vqRHUWyg2XgzUa1Ebs@6{&5BZ6$BsUr>S8a+T-b1~1l~u7w#iPLffz z5daK+x|Ux(T|79yz{RTR?w+3QYd%EEvf>WE-h8cRTJDTT2q`dH<1Ghqu$$=BE_$%wVbP+(M# zd4+_7P!oLaiHQkLFg<&C7&|!cgzq4m!znd2HJurGe9qCz)D2BX5|^15}a4!uM(xDF)sx+L435|Ik06}FLE zd?23gzEV(e6e>@lIOWhF>alB4s+9UdTxsA4bn+nk@8H0ty8QGGym40d8wHsJzsm8L zRxpLlBaA$UHeHS&Q>a`Wd^|^cdt{L?AUuJE2vtZ#N^-KR$>zFbETvPrJpxVJ+K8lU##KKJ!zF=l4vWPifuL1J zSESs(F#DATyW5!98r}N5D~>V1H^soh8v8CBQD+tG%889KFh14$KWQZk>LiUw8;|3U@?%cY*^CDaKPx8yOAK@mwjAKtNMV z#YI0p2vbt(HIL?sIgCpG<-A^EBNKIv;-&2B@)>VWbGDtN;FJkW&lGFrSVu>qV4b$C zY1?vcn~?*ZWkIv*(YiC#opWW#q3?P{2u%yy1}Bk*4O9d%Nb&{FjP!VMoV9mYE796p zAS`eYdeZB!a6IV_Y@3MAG$4Zi2!2p;ZJ-=z>xZdV@E91FdI|<2!_7TWLFpeRq2M_vZ443^j^@=d-c} zVqtf8H^=Wc;*AXH(o#>n`z_&VX~2jGAMEkC@lYp^xZnDaypCX zW>EhO@ih9p26^6`X&#@Xlk3BO8vplrdRmLd+}gbV%sgDX1s32J