From 10168b945d525cc70924cad3ae16b67c7f093c3c Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 5 Mar 2026 15:40:44 +0100 Subject: [PATCH] hee hee hee haa --- changelog | 12 ++- src/main/java/com/hbm/blocks/ModBlocks.java | 6 ++ .../blocks/generic/BlockForgottenLock.java | 10 +++ .../com/hbm/blocks/machine/rbmk/RBMKBase.java | 37 ++++----- .../hbm/blocks/machine/rbmk/RBMKControl.java | 21 +++++ .../blocks/machine/rbmk/RBMKControlAuto.java | 26 +++++- .../com/hbm/inventory/gui/GUIRBMKControl.java | 9 ++ .../hbm/inventory/gui/GUIRBMKControlAuto.java | 9 ++ src/main/java/com/hbm/items/ModItems.java | 77 +++++++++++------- .../com/hbm/items/machine/ItemRBMKRod.java | 6 ++ .../java/com/hbm/main/CraftingManager.java | 7 +- .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/render/block/RenderRBMKControl.java | 2 +- .../com/hbm/render/block/RenderRBMKRod.java | 2 + .../render/item/ItemRenderLibraryDoors.java | 4 +- .../tileentity/RenderRBMKFuelChannel.java | 7 +- .../door/RenderContainmentDoor.java | 5 +- .../tileentity/door/RenderWaterDoor.java | 5 +- .../java/com/hbm/tileentity/DoorDecl.java | 24 ++++++ .../machine/TileEntityHeatBoiler.java | 6 +- .../TileEntityHeatBoilerIndustrial.java | 6 +- .../machine/rbmk/TileEntityRBMKControl.java | 62 ++++++++++++-- .../machine/rbmk/TileEntityRBMKRod.java | 4 + .../rbmk/rbmk_control_auto_glass_side.png | Bin 142 -> 0 bytes .../rbmk/rbmk_control_auto_glass_top.png | Bin 215 -> 0 bytes .../blocks/rbmk/rbmk_control_glass_side.png | Bin 142 -> 0 bytes .../blocks/rbmk/rbmk_control_glass_top.png | Bin 215 -> 0 bytes .../rbmk/rbmk_control_mod_glass_side.png | Bin 142 -> 0 bytes .../rbmk/rbmk_control_mod_glass_top.png | Bin 215 -> 0 bytes .../rbmk/rbmk_control_reasim_auto_bottom.png | Bin 0 -> 558 bytes .../rbmk_control_reasim_auto_pipe_side.png | Bin 0 -> 121 bytes .../rbmk_control_reasim_auto_pipe_top.png | Bin 0 -> 167 bytes .../rbmk/rbmk_control_reasim_auto_side.png | Bin 0 -> 425 bytes .../rbmk/rbmk_control_reasim_auto_top.png | Bin 0 -> 417 bytes .../rbmk/rbmk_control_reasim_bottom.png | Bin 0 -> 558 bytes .../rbmk/rbmk_control_reasim_pipe_side.png | Bin 0 -> 121 bytes .../rbmk/rbmk_control_reasim_pipe_top.png | Bin 0 -> 167 bytes .../blocks/rbmk/rbmk_control_reasim_side.png | Bin 0 -> 425 bytes .../blocks/rbmk/rbmk_control_reasim_top.png | Bin 0 -> 417 bytes .../blocks/rbmk/rbmk_element_fuel.png | Bin 216 -> 232 bytes .../blocks/rbmk/rbmk_element_mod_fuel.png | Bin 216 -> 232 bytes .../blocks/rbmk/rbmk_element_reasim_fuel.png | Bin 216 -> 232 bytes .../rbmk/rbmk_element_reasim_mod_fuel.png | Bin 216 -> 232 bytes .../gui/reactors/gui_rbmk_control.png | Bin 3876 -> 4353 bytes .../gui/reactors/gui_rbmk_control_auto.png | Bin 3689 -> 4205 bytes .../pheodoors/containment_door_trefoil.png | Bin 0 -> 10553 bytes .../models/pheodoors/water_door_clean.png | Bin 0 -> 19781 bytes 47 files changed, 269 insertions(+), 80 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_top.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_top.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_pipe_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_pipe_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_pipe_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_pipe_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_top.png create mode 100644 src/main/resources/assets/hbm/textures/models/pheodoors/containment_door_trefoil.png create mode 100644 src/main/resources/assets/hbm/textures/models/pheodoors/water_door_clean.png diff --git a/changelog b/changelog index c06455a46..c2b24e71d 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,10 @@ +## Added +* Reasim RBMK control rods + * Come in manual and auto variants, but not moderated + * The same as standard control rods, except they need 5kHE/t + * Have only a single cable connection at the bottom + * Replace standard RBMK control rods when 528 mode is enabled + ## Changed * Updated RBMK visuals * The indentations on most RBMK passive elements have been removed, heavily reducing tri count and allowing face culling, making RBMKs render much more efficiently @@ -11,6 +18,8 @@ * This means that things like 2x2 jungle trees can now be automated * Annihilating radioactive items now creates that item's radiation value x5 as chunk radiation * The maximum per tick is a 1000 RAD/s increase to prevent world-destroying radiation levels from annihilating demon cores +* The water door now has a skin that isn't rusted with less contrast +* The containment door now has a lead-colored skin with a trefoil on it ## Fixed * Fixed NBTStack serialization omitting the stack size most of the time, preventing deserialization (mainly in the precision assembler config) @@ -19,4 +28,5 @@ * Fixed tool abilities switching when clicking on a block with a special interaction * Fixed outdated info on the QMAW pages involving AA and BSCCO due to the fusion reactor update * Fixed ammo container giving 9mm instead of .22 for the akimbo target pistols -* Fixed RBMK control rods incorrectly showing up in the red group when no group is set \ No newline at end of file +* Fixed RBMK control rods incorrectly showing up in the red group when no group is set +* Fixed fluid output direction being incorrect on boilers, causing them to break with pipe anchors \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index e78099f48..abeb51912 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1083,6 +1083,8 @@ public class ModBlocks { public static Block rbmk_control; public static Block rbmk_control_mod; public static Block rbmk_control_auto; + public static Block rbmk_control_reasim; + public static Block rbmk_control_reasim_auto; public static Block rbmk_blank; public static Block rbmk_boiler; public static Block rbmk_reflector; @@ -2100,6 +2102,8 @@ public class ModBlocks { rbmk_control = new RBMKControl(false).setBlockName("rbmk_control").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_control"); rbmk_control_mod = new RBMKControl(true).setBlockName("rbmk_control_mod").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_control_mod"); rbmk_control_auto = new RBMKControlAuto().setBlockName("rbmk_control_auto").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_control_auto"); + rbmk_control_reasim = new RBMKControl(false).setBlockName("rbmk_control_reasim").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_control_reasim"); + rbmk_control_reasim_auto = new RBMKControlAuto().setBlockName("rbmk_control_reasim_auto").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_control_reasim_auto"); rbmk_blank = new RBMKBlank().setBlockName("rbmk_blank").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_blank"); rbmk_boiler = new RBMKBoiler().setBlockName("rbmk_boiler").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_boiler"); rbmk_reflector = new RBMKReflector().setBlockName("rbmk_reflector").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_reflector"); @@ -3089,6 +3093,8 @@ public class ModBlocks { GameRegistry.registerBlock(rbmk_control, rbmk_control.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_control_mod, rbmk_control_mod.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_control_auto, rbmk_control_auto.getUnlocalizedName()); + GameRegistry.registerBlock(rbmk_control_reasim, rbmk_control_reasim.getUnlocalizedName()); + GameRegistry.registerBlock(rbmk_control_reasim_auto, rbmk_control_reasim_auto.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_blank, rbmk_blank.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_boiler, rbmk_boiler.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_reflector, rbmk_reflector.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java b/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java index 23051777a..b1af065e0 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java +++ b/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java @@ -1,10 +1,13 @@ package com.hbm.blocks.generic; +import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.BlockPillar; import com.hbm.items.ModItems; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -38,5 +41,12 @@ public class BlockForgottenLock extends BlockPillar { public static void generate(World world, int x, int y, int z, int meta, ForgeDirection dir) { + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + int len = 15; + for(int w = -2; w <= 2; w++) for(int h = -2; h <= 2; h++) for(int d = 0; d < len; d++) { + Block b = (w == -2 || w == 2 || h == -2 || h == 2 || d == len - 1) ? ModBlocks.brick_forgotten : Blocks.air; + world.setBlock(x - dir.offsetX * d + rot.offsetX * w, y + h, z - dir.offsetZ * d + rot.offsetZ * w, b); + } } } diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java index 72a54dd84..932e11380 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java @@ -64,13 +64,18 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo if(renderLid != LID_NONE && side > 1) return true; return super.shouldSideBeRendered(world, x, y, z, side); } + + public boolean hasOwnLid() { + return this == ModBlocks.rbmk_control || this == ModBlocks.rbmk_control_auto || this == ModBlocks.rbmk_control_mod || + this == ModBlocks.rbmk_control_reasim || this == ModBlocks.rbmk_control_reasim_auto; + } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { this.blockIcon = reg.registerIcon(this.getTextureName() + "_side"); this.textureTop = reg.registerIcon(this.getTextureName() + "_top"); - if(this == ModBlocks.rbmk_control || this == ModBlocks.rbmk_control_auto || this == ModBlocks.rbmk_control_mod) return; + if(hasOwnLid()) return; this.coverTextureTop = reg.registerIcon(this.getTextureName() + "_cover_top"); this.coverTextureSide = reg.registerIcon(this.getTextureName() + "_cover_side"); this.glassTextureTop = reg.registerIcon(this.getTextureName() + "_glass_top"); @@ -80,8 +85,10 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { - if(renderLid == LID_STANDARD) return side == 0 || side == 1 ? coverTextureTop : coverTextureSide; - if(renderLid == LID_GLASS) return side == 0 || side == 1 ? glassTextureTop : glassTextureSide; + if(!hasOwnLid()) { + if(renderLid == LID_STANDARD) return side == 0 || side == 1 ? coverTextureTop : coverTextureSide; + if(renderLid == LID_GLASS) return side == 0 || side == 1 ? glassTextureTop : glassTextureSide; + } return side == 0 || side == 1 ? textureTop : blockIcon; } @@ -97,34 +104,24 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo public boolean openInv(World world, int x, int y, int z, EntityPlayer player) { - if(world.isRemote) { - return true; - } + if(world.isRemote) return true; int[] pos = this.findCore(world, x, y, z); - - if(pos == null) - return false; + if(pos == null) return false; TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); - - if(!(te instanceof TileEntityRBMKBase)) - return false; + if(!(te instanceof TileEntityRBMKBase)) return false; TileEntityRBMKBase rbmk = (TileEntityRBMKBase) te; if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKLid) { - - if(!rbmk.hasLid()) - return false; + if(!rbmk.hasLid()) return false; } - if(!player.isSneaking()) { + if(!player.isSneaking()) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); - return true; - } else { - return true; - } + + return true; } @Override diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java index 89f3a4531..8f26b37d8 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java @@ -1,21 +1,42 @@ package com.hbm.blocks.machine.rbmk; +import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; import net.minecraft.world.World; public class RBMKControl extends RBMKPipedBase { public boolean moderated = false; + public IIcon textureBottom; public RBMKControl(boolean moderated) { super(); this.moderated = moderated; } + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + if(this == ModBlocks.rbmk_control_reasim) + this.textureBottom = reg.registerIcon(this.getTextureName() + "_bottom"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(this.renderLid == LID_NONE && this == ModBlocks.rbmk_control_reasim && side == 0) return textureBottom; + return super.getIcon(side, meta); + } + @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= this.offset) return new TileEntityRBMKControlManual(); diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControlAuto.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControlAuto.java index 33c069b8e..e73aee221 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControlAuto.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControlAuto.java @@ -1,19 +1,39 @@ package com.hbm.blocks.machine.rbmk; +import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlAuto; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; import net.minecraft.world.World; public class RBMKControlAuto extends RBMKPipedBase { + public IIcon textureBottom; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + if(this == ModBlocks.rbmk_control_reasim_auto) + this.textureBottom = reg.registerIcon(this.getTextureName() + "_bottom"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(this.renderLid == LID_NONE && this == ModBlocks.rbmk_control_reasim_auto && side == 0) return textureBottom; + return super.getIcon(side, meta); + } + @Override public TileEntity createNewTileEntity(World world, int meta) { - - if(meta >= this.offset) - return new TileEntityRBMKControlAuto(); + if(meta >= this.offset) return new TileEntityRBMKControlAuto(); return null; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java index b1c8f415e..74b532066 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java @@ -7,6 +7,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual; +import com.hbm.util.BobMathUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; @@ -33,6 +34,10 @@ public class GUIRBMKControl extends GuiInfoContainer { super.drawScreen(mouseX, mouseY, f); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 71, guiTop + 29, 16, 56, mouseX, mouseY, new String[]{ (int)(rod.level * 100) + "%" } ); + + if(rod.isPowered()) { + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 87, guiTop + 21, 16, 16, mouseX, mouseY, new String[]{ BobMathUtil.getShortNumber(rod.power) + " / " + BobMathUtil.getShortNumber(rod.maxPower) + "HE" } ); + } } @Override @@ -85,5 +90,9 @@ public class GUIRBMKControl extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 28, guiTop + 26 + color * 11, 184, color * 10, 12, 10); } + + if(rod.isPowered()) { + drawTexturedModalRect(guiLeft + 87, guiTop + 21, 196, rod.hasPower ? 16 : 0, 16, 16); + } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java index e55576bef..61d563318 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java @@ -9,6 +9,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlAuto; +import com.hbm.util.BobMathUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; @@ -64,6 +65,10 @@ public class GUIRBMKControlAuto extends GuiInfoContainer { this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 124, guiTop + 29, 16, 56, mouseX, mouseY, new String[]{ (int)(rod.level * 100) + "%" } ); + if(rod.isPowered()) { + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 136, guiTop + 21, 16, 16, mouseX, mouseY, new String[]{ BobMathUtil.getShortNumber(rod.power) + " / " + BobMathUtil.getShortNumber(rod.maxPower) + "HE" } ); + } + String func = "Function: "; switch(rod.function) { @@ -155,6 +160,10 @@ public class GUIRBMKControlAuto extends GuiInfoContainer { int f = rod.function.ordinal(); drawTexturedModalRect(guiLeft + 59, guiTop + 27, 184, f * 19, 26, 19); + if(rod.isPowered()) { + drawTexturedModalRect(guiLeft + 136, guiTop + 21, 210, rod.hasPower ? 16 : 0, 16, 16); + } + for(int i = 0; i < 4; i++) { this.fields[i].drawTextBox(); } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 6552c5e58..3347f14e2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3142,6 +3142,21 @@ public class ModItems { rbmk_pellet_zfb_am_mix = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - HEP-241#MEA").setUnlocalizedName("rbmk_pellet_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_am_mix"); rbmk_pellet_drx = (ItemRBMKPellet) new ItemRBMKPellet(EnumChatFormatting.OBFUSCATED + "can't you hear, can't you hear the thunder?").setUnlocalizedName("rbmk_pellet_drx").setTextureName(RefStrings.MODID + ":rbmk_pellet_drx"); + int tintUranium = 0x868D82; + int tintNeptunium = 0x757E73; + int tintPlutonium = 0x656E6B; + int tintAmericium = 0xA88A8F; + int tintThorium = 0x665448; + int tintZirconium = 0xAAA36A; + int tintSchrabidium = 0x2D9A94; + int tintPolonium = 0x563A26; + int tintRadium = 0xB3B6AD; + int tintAustralium = 0xFFEE00; + int tintFlashgold = 0xDC9613; + int tintFlashlead = 0x7B7B87; + int tintBalefire = 0xB2FF1B; + int tintDRX = 0xD77276; + rbmk_fuel_empty = new Item().setUnlocalizedName("rbmk_fuel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_fuel_empty"); rbmk_fuel_ueu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ueu) .setYield(100000000D) @@ -3150,7 +3165,7 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) .setHeat(0.65) //0.5 is too much of a nerf in heat; pu239 buildup justifies it being on par with MEU ig .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu"); + .setTint(tintUranium).setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu"); rbmk_fuel_meu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_meu) .setYield(100000000D) .setStats(20) @@ -3158,20 +3173,20 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) .setHeat(0.65) //0.75 was a bit too much... .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu"); + .setTint(tintUranium).setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu"); rbmk_fuel_heu233 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu233) .setYield(100000000D) .setStats(27.5D) .setFunction(EnumBurnFunc.LINEAR) .setHeat(1.25D) .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_heu233").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu233"); + .setTint(tintUranium).setUnlocalizedName("rbmk_fuel_heu233").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu233"); rbmk_fuel_heu235 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu235) .setYield(100000000D) .setStats(50) //Consistency with HEN; its critical mass is too high to justify a linear function .setFunction(EnumBurnFunc.SQUARE_ROOT) .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_heu235").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu235"); + .setTint(tintUranium).setUnlocalizedName("rbmk_fuel_heu235").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu235"); rbmk_fuel_thmeu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_thmeu) .setYield(100000000D) .setStats(20) @@ -3179,7 +3194,7 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.BOOSTED_SLOPE) .setHeat(0.65D) //Consistency with MEU .setMeltingPoint(3350) - .setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu"); + .setTint(tintThorium).setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu"); rbmk_fuel_lep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lep) .setYield(100000000D) .setStats(35) @@ -3187,27 +3202,27 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) .setHeat(0.75D) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); + .setTint(tintPlutonium).setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); rbmk_fuel_mep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mep) .setYield(100000000D) .setStats(35) .setFunction(EnumBurnFunc.SQUARE_ROOT) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); + .setTint(tintPlutonium).setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); rbmk_fuel_hep239 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep239) .setYield(100000000D) .setStats(30) .setFunction(EnumBurnFunc.LINEAR) .setHeat(1.25D) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_hep").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep"); + .setTint(tintPlutonium).setUnlocalizedName("rbmk_fuel_hep").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep"); rbmk_fuel_hep241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep241) .setYield(100000000D) .setStats(40) .setFunction(EnumBurnFunc.LINEAR) .setHeat(1.75D) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_hep241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep241"); + .setTint(tintPlutonium).setUnlocalizedName("rbmk_fuel_hep241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep241"); rbmk_fuel_lea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lea) .setYield(100000000D) .setStats(60, 10) @@ -3215,14 +3230,14 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) .setHeat(1.5D) .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_lea").setTextureName(RefStrings.MODID + ":rbmk_fuel_lea"); + .setTint(tintAmericium).setUnlocalizedName("rbmk_fuel_lea").setTextureName(RefStrings.MODID + ":rbmk_fuel_lea"); rbmk_fuel_mea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mea) .setYield(100000000D) .setStats(35D, 20) .setFunction(EnumBurnFunc.ARCH) .setHeat(1.75D) .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_mea").setTextureName(RefStrings.MODID + ":rbmk_fuel_mea"); + .setTint(tintAmericium).setUnlocalizedName("rbmk_fuel_mea").setTextureName(RefStrings.MODID + ":rbmk_fuel_mea"); rbmk_fuel_hea241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea241) .setYield(100000000D) .setStats(65, 15) @@ -3230,14 +3245,14 @@ public class ModItems { .setHeat(1.85D) .setMeltingPoint(2386) .setNeutronTypes(NType.FAST, NType.FAST) - .setUnlocalizedName("rbmk_fuel_hea241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea241"); + .setTint(tintAmericium).setUnlocalizedName("rbmk_fuel_hea241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea241"); rbmk_fuel_hea242 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea242) .setYield(100000000D) .setStats(45) .setFunction(EnumBurnFunc.LINEAR) .setHeat(2D) .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_hea242").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea242"); + .setTint(tintAmericium).setUnlocalizedName("rbmk_fuel_hea242").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea242"); rbmk_fuel_men = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_men) .setYield(100000000D) .setStats(30) @@ -3246,21 +3261,21 @@ public class ModItems { .setHeat(0.75) .setMeltingPoint(2800) .setNeutronTypes(NType.ANY, NType.FAST) //Build-up of Pu-239 leads to both speeds of neutrons grooving - .setUnlocalizedName("rbmk_fuel_men").setTextureName(RefStrings.MODID + ":rbmk_fuel_men"); + .setTint(tintNeptunium).setUnlocalizedName("rbmk_fuel_men").setTextureName(RefStrings.MODID + ":rbmk_fuel_men"); rbmk_fuel_hen = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hen) .setYield(100000000D) .setStats(40) .setFunction(EnumBurnFunc.SQUARE_ROOT) .setMeltingPoint(2800) .setNeutronTypes(NType.FAST, NType.FAST) - .setUnlocalizedName("rbmk_fuel_hen").setTextureName(RefStrings.MODID + ":rbmk_fuel_hen"); + .setTint(tintNeptunium).setUnlocalizedName("rbmk_fuel_hen").setTextureName(RefStrings.MODID + ":rbmk_fuel_hen"); rbmk_fuel_mox = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mox) .setYield(100000000D) .setStats(40) .setFunction(EnumBurnFunc.LOG_TEN) .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) .setMeltingPoint(2815) - .setUnlocalizedName("rbmk_fuel_mox").setTextureName(RefStrings.MODID + ":rbmk_fuel_mox"); + .setTint(tintUranium).setUnlocalizedName("rbmk_fuel_mox").setTextureName(RefStrings.MODID + ":rbmk_fuel_mox"); rbmk_fuel_les = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_les) .setYield(100000000D) .setStats(50) @@ -3268,14 +3283,14 @@ public class ModItems { .setHeat(1.25D) .setMeltingPoint(2500) .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_les").setTextureName(RefStrings.MODID + ":rbmk_fuel_les"); + .setTint(tintSchrabidium).setUnlocalizedName("rbmk_fuel_les").setTextureName(RefStrings.MODID + ":rbmk_fuel_les"); rbmk_fuel_mes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mes) .setYield(100000000D) .setStats(75D) .setFunction(EnumBurnFunc.ARCH) .setHeat(1.5D) .setMeltingPoint(2750) - .setUnlocalizedName("rbmk_fuel_mes").setTextureName(RefStrings.MODID + ":rbmk_fuel_mes"); + .setTint(tintSchrabidium).setUnlocalizedName("rbmk_fuel_mes").setTextureName(RefStrings.MODID + ":rbmk_fuel_mes"); rbmk_fuel_hes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hes) .setYield(100000000D) .setStats(90) @@ -3283,7 +3298,7 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.LINEAR) .setHeat(1.75D) .setMeltingPoint(3000) - .setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes"); + .setTint(tintSchrabidium).setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes"); rbmk_fuel_leaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_leaus) .setYield(100000000D) .setStats(30) @@ -3291,14 +3306,14 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.LINEAR) .setXenon(0.05D, 50D) .setHeat(1.5D) - .setMeltingPoint(7029).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus"); + .setTint(tintAustralium).setMeltingPoint(7029).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus"); rbmk_fuel_heaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heaus) .setYield(100000000D) .setStats(35) .setFunction(EnumBurnFunc.LINEAR) .setXenon(0.05D, 50D) .setHeat(1.5D) - .setMeltingPoint(5211).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus"); + .setTint(tintAustralium).setMeltingPoint(5211).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus"); rbmk_fuel_po210be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_po210be) .setYield(25000000D) .setStats(0D, 50) @@ -3309,7 +3324,7 @@ public class ModItems { .setDiffusion(0.05D) .setMeltingPoint(1287) .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_po210be").setTextureName(RefStrings.MODID + ":rbmk_fuel_po210be"); + .setTint(tintPolonium).setUnlocalizedName("rbmk_fuel_po210be").setTextureName(RefStrings.MODID + ":rbmk_fuel_po210be"); rbmk_fuel_ra226be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ra226be) .setYield(100000000D) .setStats(0D, 20) @@ -3320,7 +3335,7 @@ public class ModItems { .setDiffusion(0.5D) .setMeltingPoint(700) .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_ra226be").setTextureName(RefStrings.MODID + ":rbmk_fuel_ra226be"); + .setTint(tintRadium).setUnlocalizedName("rbmk_fuel_ra226be").setTextureName(RefStrings.MODID + ":rbmk_fuel_ra226be"); rbmk_fuel_pu238be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_pu238be) .setYield(50000000D) .setStats(40, 40) @@ -3329,7 +3344,7 @@ public class ModItems { .setDiffusion(0.05D) .setMeltingPoint(1287) .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); + .setTint(tintPlutonium).setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); rbmk_fuel_balefire_gold = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire_gold) .setYield(100000000D) .setStats(50, 10) @@ -3337,7 +3352,7 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.LINEAR) .setXenon(0.0D, 50D) .setMeltingPoint(2000) - .setUnlocalizedName("rbmk_fuel_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire_gold"); + .setTint(tintFlashgold).setUnlocalizedName("rbmk_fuel_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire_gold"); rbmk_fuel_flashlead = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_flashlead) .setYield(250000000D) .setStats(40, 50) @@ -3345,7 +3360,7 @@ public class ModItems { .setDepletionFunction(EnumDepleteFunc.LINEAR) .setXenon(0.0D, 50D) .setMeltingPoint(2050) - .setUnlocalizedName("rbmk_fuel_flashlead").setTextureName(RefStrings.MODID + ":rbmk_fuel_flashlead"); + .setTint(tintFlashlead).setUnlocalizedName("rbmk_fuel_flashlead").setTextureName(RefStrings.MODID + ":rbmk_fuel_flashlead"); rbmk_fuel_balefire = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire) .setYield(100000000D) .setStats(100, 35) @@ -3353,34 +3368,34 @@ public class ModItems { .setXenon(0.0D, 50D) .setHeat(3D) .setMeltingPoint(3652) - .setUnlocalizedName("rbmk_fuel_balefire").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire"); + .setTint(tintBalefire).setUnlocalizedName("rbmk_fuel_balefire").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire"); rbmk_fuel_zfb_bismuth = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_bismuth) .setYield(50000000D) .setStats(20) .setFunction(EnumBurnFunc.SQUARE_ROOT) .setHeat(1.75D) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_bismuth"); + .setTint(tintZirconium).setUnlocalizedName("rbmk_fuel_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_bismuth"); rbmk_fuel_zfb_pu241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_pu241) .setYield(50000000D) .setStats(20) .setFunction(EnumBurnFunc.SQUARE_ROOT) .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_pu241"); + .setTint(tintZirconium).setUnlocalizedName("rbmk_fuel_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_pu241"); rbmk_fuel_zfb_am_mix = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_am_mix) .setYield(50000000D) .setStats(20) .setFunction(EnumBurnFunc.LINEAR) .setHeat(1.75D) .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_am_mix"); + .setTint(tintZirconium).setUnlocalizedName("rbmk_fuel_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_am_mix"); rbmk_fuel_drx = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_drx) .setYield(10000000D) .setStats(1000, 10) .setFunction(EnumBurnFunc.QUADRATIC) .setHeat(0.1D) .setMeltingPoint(100000) - .setUnlocalizedName("rbmk_fuel_drx").setTextureName(RefStrings.MODID + ":rbmk_fuel_drx"); + .setTint(tintDRX).setUnlocalizedName("rbmk_fuel_drx").setTextureName(RefStrings.MODID + ":rbmk_fuel_drx"); rbmk_fuel_test = (ItemRBMKRod) new ItemRBMKRod("THE VOICES") .setYield(1000000D) .setStats(100) diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 1ab86f42d..adc49e57b 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -36,6 +36,7 @@ public class ItemRBMKRod extends Item { public double diffusion = 0.02D; //the speed at which the core heats the hull public NType nType = NType.SLOW; //neutronType, the most efficient neutron type for fission public NType rType = NType.FAST; //releaseType, the type of neutrons released by this fuel + public int colorTint = 0x304825; /* _____ * ,I I I I, @@ -73,6 +74,11 @@ public class ItemRBMKRod extends Item { this.setMaxStackSize(1); this.setCreativeTab(MainRegistry.controlTab); } + + public ItemRBMKRod setTint(int tint) { + this.colorTint = tint; + return this; + } public ItemRBMKRod setYield(double yield) { this.yield = yield; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index a816eda46..ea38c37bc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -778,11 +778,12 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rbmk_reflector, 1), new Object[] { "GGG", "GRG", "GGG", 'G', OreDictManager.getReflector(), 'R', ModBlocks.rbmk_blank }); if(!GeneralConfig.enable528) { addRecipeAuto(new ItemStack(ModBlocks.rbmk_control, 1), new Object[] { " B ", "GRG", " B ", 'G', GRAPHITE.ingot(), 'B', ModItems.motor, 'R', ModBlocks.rbmk_absorber }); + addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_mod, 1), new Object[] { "BGB", "GRG", "BGB", 'G', GRAPHITE.block(), 'R', ModBlocks.rbmk_control, 'B', ModItems.nugget_bismuth }); + addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_auto, 1), new Object[] { "C", "R", "D", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'R', ModBlocks.rbmk_control, 'D', ModItems.crt_display }); } else { - addRecipeAuto(new ItemStack(ModBlocks.rbmk_control, 1), new Object[] { "CBC", "GRG", "CBC", 'G', GRAPHITE.ingot(), 'B', ModItems.motor, 'R', ModBlocks.rbmk_absorber, 'C', CD.ingot() }); + addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_reasim, 1), new Object[] { " B ", "GRG", " B ", 'G', GRAPHITE.ingot(), 'B', ModItems.motor, 'R', ModBlocks.rbmk_absorber }); + addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_reasim_auto, 1), new Object[] { "C", "R", "D", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'R', ModBlocks.rbmk_control, 'D', ModItems.crt_display }); } - addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_mod, 1), new Object[] { "BGB", "GRG", "BGB", 'G', GRAPHITE.block(), 'R', ModBlocks.rbmk_control, 'B', ModItems.nugget_bismuth }); - addRecipeAuto(new ItemStack(ModBlocks.rbmk_control_auto, 1), new Object[] { "C", "R", "D", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'R', ModBlocks.rbmk_control, 'D', ModItems.crt_display }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_rod_reasim, 1), new Object[] { "ZCZ", "ZRZ", "ZCZ", 'C', STEEL.shell(), 'R', ModBlocks.rbmk_blank, 'Z', ZR.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_rod_reasim_mod, 1), new Object[] { "BGB", "GRG", "BGB", 'G', GRAPHITE.block(), 'R', ModBlocks.rbmk_rod_reasim, 'B', ANY_RESISTANTALLOY.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_outgasser, 1), new Object[] { "GHG", "GRG", "GTG", 'G', ModBlocks.steel_grate, 'H', Blocks.hopper, 'T', ModItems.tank_steel, 'R', ModBlocks.rbmk_blank }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 34e764861..b2332e67f 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -333,6 +333,7 @@ public class ResourceManager { public static final ResourceLocation pheo_blast_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/blast_door.png"); public static IModelCustomNamed pheo_blast_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/blast_door.obj")).asVBO(); public static final ResourceLocation pheo_containment_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/containment_door.png"); + public static final ResourceLocation pheo_containment_door_trefoil_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/containment_door_trefoil.png"); public static IModelCustomNamed pheo_containment_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/containment_door.obj")).asVBO(); public static final ResourceLocation pheo_seal_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/seal_door.png"); public static IModelCustomNamed pheo_seal_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/seal_door.obj")).asVBO(); @@ -344,6 +345,7 @@ public class ResourceManager { public static final ResourceLocation pheo_vehicle_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/vehicle_door.png"); public static IModelCustomNamed pheo_vehicle_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/vehicle_door.obj")).asVBO(); public static final ResourceLocation pheo_water_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/water_door.png"); + public static final ResourceLocation pheo_water_door_clean_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/water_door_clean.png"); public static IModelCustomNamed pheo_water_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/water_door.obj")).asVBO(); public static final ResourceLocation pheo_vault_door_3 = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/vault/vault_door_3.png"); public static final ResourceLocation pheo_vault_door_4 = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/vault/vault_door_4.png"); diff --git a/src/main/java/com/hbm/render/block/RenderRBMKControl.java b/src/main/java/com/hbm/render/block/RenderRBMKControl.java index aac35075b..a9a399b67 100644 --- a/src/main/java/com/hbm/render/block/RenderRBMKControl.java +++ b/src/main/java/com/hbm/render/block/RenderRBMKControl.java @@ -24,7 +24,7 @@ public class RenderRBMKControl implements ISimpleBlockRenderingHandler { GL11.glPushMatrix(); Tessellator tessellator = Tessellator.instance; RBMKBase.renderLid = RBMKBase.LID_NONE; - IIcon iicon = block.getIcon(0, 0); + IIcon iicon = block.getIcon(1, 0); tessellator.setColorOpaque_F(1, 1, 1); if(renderer.hasOverrideBlockTexture()) { diff --git a/src/main/java/com/hbm/render/block/RenderRBMKRod.java b/src/main/java/com/hbm/render/block/RenderRBMKRod.java index be5b71355..d8a3e5403 100644 --- a/src/main/java/com/hbm/render/block/RenderRBMKRod.java +++ b/src/main/java/com/hbm/render/block/RenderRBMKRod.java @@ -40,7 +40,9 @@ public class RenderRBMKRod implements ISimpleBlockRenderingHandler { tessellator.startDrawingQuads(); ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element, "Inner", rod.inner, tessellator, 0, false); ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element, "Cap", iicon, tessellator, 0, false); + tessellator.setColorOpaque_I(0x304825); ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element_rods, "Rods", rod.fuel, tessellator, 0, false); + tessellator.setColorOpaque_I(0xFFFFFF); tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, -0.5, 0, -0.5, sideIcon); tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, -0.5, 0, -0.5, sideIcon); tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, -0.5, 0, -0.5, sideIcon); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java index 6c5f68cc5..cbb097cd7 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java @@ -112,7 +112,7 @@ public class ItemRenderLibraryDoors { } public void renderCommon() { GL11.glRotated(90, 0, 1, 0); - bindTexture(ResourceManager.pheo_water_door_tex); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.WATER_DOOR.getCyclingSkins()); GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.pheo_water_door.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); @@ -164,7 +164,7 @@ public class ItemRenderLibraryDoors { GL11.glScaled(3.8, 3.8, 3.8); } public void renderCommon() { - bindTexture(ResourceManager.pheo_containment_door_tex); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.QE_CONTAINMENT.getCyclingSkins()); GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.pheo_containment_door.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKFuelChannel.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKFuelChannel.java index 1083a178a..2fe7d1608 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKFuelChannel.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKFuelChannel.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod; +import com.hbm.util.ColorUtil; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -20,11 +21,13 @@ public class RenderRBMKFuelChannel extends TileEntitySpecialRenderer { boolean hasRod = false; boolean cherenkov = false; + int color = 0; if(te instanceof TileEntityRBMKRod) { TileEntityRBMKRod rod = (TileEntityRBMKRod) te; if(rod.hasRod) hasRod = true; if(rod.fluxQuantity > 5) cherenkov = true; + color = rod.rodColor; } GL11.glPushMatrix(); @@ -50,12 +53,14 @@ public class RenderRBMKFuelChannel extends TileEntitySpecialRenderer { if(hasRod) { GL11.glPushMatrix(); bindTexture(texture_rods); + GL11.glColor3f(ColorUtil.fr(color), ColorUtil.fg(color), ColorUtil.fb(color)); for(int j = 0; j <= offset; j++) { ResourceManager.rbmk_element_rods_vbo.renderPart("Rods"); GL11.glTranslated(0, 1, 0); } - + + GL11.glColor3f(1F, 1F, 1F); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderContainmentDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderContainmentDoor.java index 7b70b2c57..3844c70ba 100644 --- a/src/main/java/com/hbm/render/tileentity/door/RenderContainmentDoor.java +++ b/src/main/java/com/hbm/render/tileentity/door/RenderContainmentDoor.java @@ -5,6 +5,7 @@ import java.nio.DoubleBuffer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import net.minecraft.client.Minecraft; @@ -16,8 +17,8 @@ public class RenderContainmentDoor implements IRenderDoors { @Override public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { - - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.pheo_containment_door_tex); + + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.QE_CONTAINMENT.getSkinFromIndex(door.getSkinIndex())); double maxRaise = 2.25; double raise = 0; diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderWaterDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderWaterDoor.java index acc849aa1..9cc878c23 100644 --- a/src/main/java/com/hbm/render/tileentity/door/RenderWaterDoor.java +++ b/src/main/java/com/hbm/render/tileentity/door/RenderWaterDoor.java @@ -5,6 +5,7 @@ import java.nio.DoubleBuffer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import net.minecraft.client.Minecraft; @@ -15,8 +16,8 @@ public class RenderWaterDoor implements IRenderDoors { @Override public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { - - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.pheo_water_door_tex); + + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.WATER_DOOR.getSkinFromIndex(door.getSkinIndex())); double maxRot = 120; double rot = 0; diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index a5f24e673..591cc3103 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -418,6 +418,18 @@ public abstract class DoorDecl { return null; } + public ResourceLocation[] skins; + + @SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_containment_door_tex, + ResourceManager.pheo_containment_door_trefoil_tex + }; + return skins; + } + + @Override public int getSkinCount() { return 2; } + @Override public int timeToOpen() { return 160; }; @Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, 0, 0, 3, 3, 1 } }; } @Override public int[] getDimensions() { return new int[] { 2, 0, 0, 0, 1, 1 }; } @@ -457,6 +469,18 @@ public abstract class DoorDecl { return null; } + public ResourceLocation[] skins; + + @SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_water_door_tex, + ResourceManager.pheo_water_door_clean_tex + }; + return skins; + } + + @Override public int getSkinCount() { return 2; } + @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 1, 1); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index e58d00987..b1602f53e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -24,7 +24,7 @@ import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; -import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -36,7 +36,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { +public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiverMK2, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; @@ -267,7 +267,7 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPa private void sendFluid() { for(DirPos pos : getConPos()) { - this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir().getOpposite()); + this.tryProvide(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index 012fecc40..e7bd7bace 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -19,7 +19,7 @@ import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; -import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -30,7 +30,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; -public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { +public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiverMK2, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; @@ -232,7 +232,7 @@ public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase impleme private void sendFluid() { for(DirPos pos : getConPos()) { - this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir().getOpposite()); + this.tryProvide(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java index fbe930c0f..6e2341951 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java @@ -1,8 +1,12 @@ package com.hbm.tileentity.machine.rbmk; +import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; +import com.hbm.interfaces.NotableComments; + +import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -13,19 +17,42 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; +import net.minecraftforge.common.util.ForgeDirection; +@NotableComments @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase implements SimpleComponent, CompatHandler.OCComponent { +public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase implements SimpleComponent, CompatHandler.OCComponent, IEnergyReceiverMK2 { @SideOnly(Side.CLIENT) public double lastLevel; public double level; public static final double speed = 0.00277D; // it takes around 18 seconds for the thing to fully extend public double targetLevel; + + public boolean hasPower = false;; + public long power; + public static final long consumption = 5_000; + public static final long maxPower = consumption * 10; // enough buffer for half a second of movement public TileEntityRBMKControl() { super(0); } + + public boolean isPowered() { + return this.getBlockType() == ModBlocks.rbmk_control_reasim || this.getBlockType() == ModBlocks.rbmk_control_reasim_auto; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return isPowered() ? this.maxPower : 0; } + + @Override public boolean canConnect(ForgeDirection dir) { + return isPowered() ? dir == ForgeDirection.DOWN : false; + } + + @Override public ConnectionPriority getPriority() { + return ConnectionPriority.LOW; // high would make more sense, but i am a sadistic asshole + } @Override public boolean isLidRemovable() { @@ -39,15 +66,30 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im this.lastLevel = this.level; } else { - - if(level < targetLevel) { - level += speed * RBMKDials.getControlSpeed(worldObj); - if(level > targetLevel) level = targetLevel; + + this.hasPower = true; + + if(this.isPowered()) { + this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, ForgeDirection.DOWN); + if(this.power < consumption) this.hasPower = false; } - if(level > targetLevel) { - level -= speed * RBMKDials.getControlSpeed(worldObj); - if(level < targetLevel) level = targetLevel; + this.lastLevel = this.level; + + if(this.hasPower) { + if(level < targetLevel) { + level += speed * RBMKDials.getControlSpeed(worldObj); + if(level > targetLevel) level = targetLevel; + } + + if(level > targetLevel) { + level -= speed * RBMKDials.getControlSpeed(worldObj); + if(level < targetLevel) level = targetLevel; + } + + if(this.isPowered() && level != lastLevel) { + this.power -= this.consumption; + } } } @@ -88,6 +130,8 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im super.serialize(buf); buf.writeDouble(this.level); buf.writeDouble(this.targetLevel); + buf.writeLong(this.power); + buf.writeBoolean(this.hasPower); } @Override @@ -95,6 +139,8 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im super.deserialize(buf); this.level = buf.readDouble(); this.targetLevel = buf.readDouble(); + this.power = buf.readLong(); + this.hasPower = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 8dc07b42d..ca7814eda 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -53,6 +53,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public double lastFluxRatio; public boolean hasRod; + public int rodColor = 0; // Fuel rod item data client sync private String fuelYield; @@ -95,6 +96,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); + this.rodColor = rod.colorTint; double fluxRatioOut; double fluxQuantityOut; @@ -260,6 +262,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM buf.writeDouble(this.lastFluxQuantity); buf.writeDouble(this.lastFluxRatio); buf.writeBoolean(this.hasRod); + buf.writeInt(this.rodColor); if(this.hasRod) { ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); BufferUtil.writeString(buf, ItemRBMKRod.getYield(slots[0]) + " / " + rod.yield + " (" + (ItemRBMKRod.getEnrichment(slots[0]) * 100) + "%)"); @@ -276,6 +279,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM this.fluxQuantity = buf.readDouble(); this.fluxFastRatio = buf.readDouble(); this.hasRod = buf.readBoolean(); + this.rodColor = buf.readInt(); if(this.hasRod) { fuelYield = BufferUtil.readString(buf); fuelXenon = BufferUtil.readString(buf); diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_side.png deleted file mode 100644 index e53a1eae893492947382c5d565f24c4ed0cebd89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfgTe~DWM4f_PsE4 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_auto_glass_top.png deleted file mode 100644 index 9b2d75a18fd8cb6682a78b297a438e459bc43dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZVGpJ9p`kZUArE4}}@ac1ynd&AnVcVpHyUGsj}) z2l_0A=h9ZhWt;bz8^`dUyR)Fp)yB_Mq+w3Ei;d;`_)Zra27Sv&qpv0B&N2dB#^CAd K=d#Wzp$PzaL`y;d diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_side.png deleted file mode 100644 index e53a1eae893492947382c5d565f24c4ed0cebd89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfgTe~DWM4f_PsE4 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_glass_top.png deleted file mode 100644 index 9b2d75a18fd8cb6682a78b297a438e459bc43dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZVGpJ9p`kZUArE4}}@ac1ynd&AnVcVpHyUGsj}) z2l_0A=h9ZhWt;bz8^`dUyR)Fp)yB_Mq+w3Ei;d;`_)Zra27Sv&qpv0B&N2dB#^CAd K=d#Wzp$PzaL`y;d diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_side.png deleted file mode 100644 index e53a1eae893492947382c5d565f24c4ed0cebd89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfgTe~DWM4f_PsE4 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_mod_glass_top.png deleted file mode 100644 index 9b2d75a18fd8cb6682a78b297a438e459bc43dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZVGpJ9p`kZUArE4}}@ac1ynd&AnVcVpHyUGsj}) z2l_0A=h9ZhWt;bz8^`dUyR)Fp)yB_Mq+w3Ei;d;`_)Zra27Sv&qpv0B&N2dB#^CAd K=d#Wzp$PzaL`y;d diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_bottom.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..113e82ac89a075104c6011210cd78ce31600e4a8 GIT binary patch literal 558 zcmV+}0@3}6P)l5GTQ4c>sk z6GIjtVkGr@PwIaLj#?I&6!fGEZdILo<>A*u@!s=MZHF!M*_{9N8#`LI+btqO*L4_U z2qCcB?QqV~_dVn(=Nusf6rgQenx;WS$Tf^@~q%dwWUFndfI)IazD#`p!9;>(AFL=8FpP@$nH=B?Rh} z7~lAW5V-kr!`0Q*X$}rPul}qs#vmei4^K}P@83>1)VLct8_#ggF$}{SgTqS37*a}f zUB~x}Z`JEk3i1!Ih@h&cE~qN1O5gWvHXE$9jN@1Z4=x#FD5a2dCZ%)~5E0t8MMSv2 zzbD4Xe!s_i&tkD4#(3OBgcxIWtO4qj`Fvh;-nMQ1^WLMXHCW#JQvv7P2?OU`b>MwY wN-2a82qB#2z*<{V_P(5RoS&c9oP5;(3$%Ada|60j#Q*>R07*qoM6N<$f_XLe`Tzg` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_pipe_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_pipe_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ff22fe3bf5943bf494cc8b8d41d2b2e87f2c46d9 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-vL%GMdR&L2iP#^qqw~nBKZC{POQhfS{bs6NVF(^BI(yc86!CMe7Gn z3EFjb)vc?>^OHVzP4zEti<;l?ZvBF{Yin$c|JiK%{Ql$f2f~&+7(|aao;OqATn)5| N!PC{xWt~$(69DveJ5T@s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_side.png new file mode 100644 index 0000000000000000000000000000000000000000..395db6d38ade21c1c34edc9b9d9550e11b967e19 GIT binary patch literal 425 zcmV;a0apHrP)fH9_mB0@@u%jH4{ z0q;G>;}L5u03yP6v!#>*fK^b1rfCAeIaj+`Yaj5G(p^B+^j%7+u38cAeZ{q@1;{y9 zk}(Dmsg|`Civ`A*%I!v&cWOt`2I{QEfZGz4tlQ2x6GG_7A%rTt`MIeMU2ErXICO48 z2&~s@#&PWM*ZphVg=;_Ff4_G`y@QwC%Y4#%Dgevn5`fRYpTI57>-9=X3GY4QI8sW% zIfrwOryoyM$hEVJ2+lb~gcxJZTC;D{>2{#=tX8WBt8j}D?#BbO7?ohH#ac_wxg%?} z4z%gR9Zb_y=btaElv3kW2VIOY#+rG1NFfA7gi=Zs?qXE%e|InpLx=C5_qD-45~bIb TipH~{00000NkvXXu0mjfgdD*e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_auto_top.png new file mode 100644 index 0000000000000000000000000000000000000000..498a1c7135393b3041b8639b42ba1384d73b9b4d GIT binary patch literal 417 zcmV;S0bc%zP)+slOCL*yYD@?DgaT0IfC53^PMSc637sOw)vjU}oR>pG_h{ zjImSp7={56q1M`aI)KyLf^2iO*3JxIUDy7d093Uj`hcqb`gh=3>-SBr*DL4q`Ke5* z%HePz=ltJ#djI>*+wtvbgZtoBJ>`$wb*{AnAR?^mN-2eDn#eh0W~7w5e5%Urc6;2w z_m44>QX>?BNW2y$-OI zrM0$e@Em}dp{o1!{2=~rN00000 LNkvXXu0mjfJUPOQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_bottom.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..113e82ac89a075104c6011210cd78ce31600e4a8 GIT binary patch literal 558 zcmV+}0@3}6P)l5GTQ4c>sk z6GIjtVkGr@PwIaLj#?I&6!fGEZdILo<>A*u@!s=MZHF!M*_{9N8#`LI+btqO*L4_U z2qCcB?QqV~_dVn(=Nusf6rgQenx;WS$Tf^@~q%dwWUFndfI)IazD#`p!9;>(AFL=8FpP@$nH=B?Rh} z7~lAW5V-kr!`0Q*X$}rPul}qs#vmei4^K}P@83>1)VLct8_#ggF$}{SgTqS37*a}f zUB~x}Z`JEk3i1!Ih@h&cE~qN1O5gWvHXE$9jN@1Z4=x#FD5a2dCZ%)~5E0t8MMSv2 zzbD4Xe!s_i&tkD4#(3OBgcxIWtO4qj`Fvh;-nMQ1^WLMXHCW#JQvv7P2?OU`b>MwY wN-2a82qB#2z*<{V_P(5RoS&c9oP5;(3$%Ada|60j#Q*>R07*qoM6N<$f_XLe`Tzg` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_pipe_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_pipe_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ff22fe3bf5943bf494cc8b8d41d2b2e87f2c46d9 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-vL%GMdR&L2iP#^qqw~nBKZC{POQhfS{bs6NVF(^BI(yc86!CMe7Gn z3EFjb)vc?>^OHVzP4zEti<;l?ZvBF{Yin$c|JiK%{Ql$f2f~&+7(|aao;OqATn)5| N!PC{xWt~$(69DveJ5T@s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_side.png new file mode 100644 index 0000000000000000000000000000000000000000..395db6d38ade21c1c34edc9b9d9550e11b967e19 GIT binary patch literal 425 zcmV;a0apHrP)fH9_mB0@@u%jH4{ z0q;G>;}L5u03yP6v!#>*fK^b1rfCAeIaj+`Yaj5G(p^B+^j%7+u38cAeZ{q@1;{y9 zk}(Dmsg|`Civ`A*%I!v&cWOt`2I{QEfZGz4tlQ2x6GG_7A%rTt`MIeMU2ErXICO48 z2&~s@#&PWM*ZphVg=;_Ff4_G`y@QwC%Y4#%Dgevn5`fRYpTI57>-9=X3GY4QI8sW% zIfrwOryoyM$hEVJ2+lb~gcxJZTC;D{>2{#=tX8WBt8j}D?#BbO7?ohH#ac_wxg%?} z4z%gR9Zb_y=btaElv3kW2VIOY#+rG1NFfA7gi=Zs?qXE%e|InpLx=C5_qD-45~bIb TipH~{00000NkvXXu0mjfgdD*e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_control_reasim_top.png new file mode 100644 index 0000000000000000000000000000000000000000..498a1c7135393b3041b8639b42ba1384d73b9b4d GIT binary patch literal 417 zcmV;S0bc%zP)+slOCL*yYD@?DgaT0IfC53^PMSc637sOw)vjU}oR>pG_h{ zjImSp7={56q1M`aI)KyLf^2iO*3JxIUDy7d093Uj`hcqb`gh=3>-SBr*DL4q`Ke5* z%HePz=ltJ#djI>*+wtvbgZtoBJ>`$wb*{AnAR?^mN-2eDn#eh0W~7w5e5%Urc6;2w z_m44>QX>?BNW2y$-OI zrM0$e@Em}dp{o1!{2=~rN00000 LNkvXXu0mjfJUPOQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_fuel.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_fuel.png index 404fd2f863e5987ce799481761c7a3e76bc180d0..843b190a0a8376e53cb4c2efc971d853aa3ad6d0 100644 GIT binary patch delta 188 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 diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_control_auto.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_control_auto.png index 67c57eb6e1e47cd104ae0942e10fef4c52c27200..09b1275015bba7315c10ada99caa83fe696782fa 100644 GIT binary patch literal 4205 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 YOa!fd`6%oTb~Bx+(OJW?Q!aP@3#J3#TmS$7 literal 3689 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 diff --git a/src/main/resources/assets/hbm/textures/models/pheodoors/containment_door_trefoil.png b/src/main/resources/assets/hbm/textures/models/pheodoors/containment_door_trefoil.png new file mode 100644 index 0000000000000000000000000000000000000000..3fcd30a8bf0cdc9fd503bf79acc1e999d659b350 GIT binary patch literal 10553 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 drHy_aQBY4u&{3# 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 T!)5`W00000NkvXXu0mjf$qJ&s literal 0 HcmV?d00001