From 6b381821b881df96bc5950651cb577d193085cf1 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 14 Aug 2023 16:40:14 +0200 Subject: [PATCH 1/3] FENSU and DFC fixes --- .../machine/TileEntityCoreEmitter.java | 3 ++ .../storage/TileEntityMachineFENSU.java | 26 ++++++++++++++++++ .../gui/processing/gui_catalytic_reformer.png | Bin 5357 -> 5356 bytes .../hbm/textures/gui/reactors/gui_pwr.png | Bin 0 -> 5843 bytes 4 files changed, 29 insertions(+) create mode 100644 src/main/resources/assets/hbm/textures/gui/reactors/gui_pwr.png diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 95b972949..3f0f6bba4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -43,6 +43,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne public boolean isOn; public FluidTank tank; public long prev; + public static long maxJoules = Long.MAX_VALUE / 100_000; public static final int range = 50; @@ -98,6 +99,8 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); for(int i = 1; i <= range; i++) { + if(out > maxJoules) out = maxJoules; + beam = i; int x = xCoord + dir.offsetX * i; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java index b936d41b8..eea2287d6 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java @@ -146,4 +146,30 @@ public class TileEntityMachineFENSU extends TileEntityMachineBattery { public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public long transferPower(long power) { + + long overshoot = 0; + + // if power exceeds our transfer limit, truncate + if(power > maxTransfer) { + overshoot += power - maxTransfer; + power = maxTransfer; + } + + // this check is in essence the same as the default implementation, but re-arranged to never overflow the int64 range + // if the remaining power exceeds the power cap, truncate again + long freespace = this.getMaxPower() - this.getPower(); + + if(freespace < power) { + overshoot += power - freespace; + power = freespace; + } + + // what remains is sure to not exceed the transfer limit and the power cap (and therefore the int64 range) + this.setPower(this.getPower() + power); + + return overshoot; + } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_catalytic_reformer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_catalytic_reformer.png index 27b5d21fd3b8d4301307a7b7994b6e6a11551891..077d004fd381c2d6147f8d9563c16b672e1bf44c 100644 GIT binary patch literal 5356 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 F{|~=%;=%v` literal 5357 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 Date: Mon, 14 Aug 2023 20:11:26 +0200 Subject: [PATCH 2/3] block drop fix for fallout effects --- changelog | 2 +- src/main/java/com/hbm/entity/effect/EntityFalloutRain.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 29e0ddd73..61558946a 100644 --- a/changelog +++ b/changelog @@ -27,7 +27,7 @@ * Removed the special nuclear meteorite ## Fixed -* Fixed thermos craching config hitting before the config is saved, resulting in an empty config the first time the server is launched +* Fixed thermos crashing config hitting before the config is saved, resulting in an empty config the first time the server is launched * Fixed heating oven not visually connecting to exhaust pipes * Fixed loot blocks not correctly rendering items that require multiple render passes * Fixed special meteorites spawning in worldgen diff --git a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java index 079e2ab2c..51ee981cb 100644 --- a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java +++ b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java @@ -179,6 +179,7 @@ public class EntityFalloutRain extends Entity { hardness = worldObj.getBlock(x, y + i, z).getBlockHardness(worldObj, x, y + i, z); if(hardness <= Blocks.stonebrick.getExplosionResistance(null) && hardness >= 0) { EntityFallingBlock entityfallingblock = new EntityFallingBlock(worldObj, x + 0.5D, y + 0.5D + i, z + 0.5D, worldObj.getBlock(x, y + i, z), worldObj.getBlockMetadata(x, y + i, z)); + entityfallingblock.field_145813_c = false; //turn off block drops because block dropping was coded by a mule with dementia worldObj.spawnEntityInWorld(entityfallingblock); } } From 3c6e7920b5d8d70e07d11472eaad91b9944072e7 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 15 Aug 2023 20:42:48 +0200 Subject: [PATCH 3/3] PWR preparation --- src/main/java/com/hbm/blocks/ModBlocks.java | 34 ++++ .../hbm/blocks/machine/BlockHadronCoil.java | 2 +- .../java/com/hbm/blocks/machine/BlockPWR.java | 52 ++++++ .../blocks/machine/MachinePWRController.java | 157 ++++++++++++++++++ .../com/hbm/render/block/ct/CTContext.java | 2 +- .../com/hbm/render/block/ct/IBlockCT.java | 3 +- .../hbm/render/block/ct/RenderBlocksCT.java | 53 ++++-- .../assets/hbm/textures/blocks/pwr_block.png | Bin 0 -> 333 bytes .../hbm/textures/blocks/pwr_block_ct.png | Bin 0 -> 842 bytes .../hbm/textures/blocks/pwr_block_ct_alt.png | Bin 0 -> 861 bytes .../assets/hbm/textures/blocks/pwr_casing.png | Bin 0 -> 589 bytes .../hbm/textures/blocks/pwr_casing_blank.png | Bin 0 -> 542 bytes .../hbm/textures/blocks/pwr_casing_port.png | Bin 0 -> 285 bytes .../textures/blocks/pwr_casing_port_ct.png | Bin 0 -> 898 bytes .../hbm/textures/blocks/pwr_channel_side.png | Bin 0 -> 171 bytes .../hbm/textures/blocks/pwr_channel_top.png | Bin 0 -> 176 bytes .../hbm/textures/blocks/pwr_concrete_flat.png | Bin 0 -> 520 bytes .../hbm/textures/blocks/pwr_control_side.png | Bin 0 -> 233 bytes .../hbm/textures/blocks/pwr_control_top.png | Bin 0 -> 259 bytes .../hbm/textures/blocks/pwr_controller.png | Bin 0 -> 550 bytes .../hbm/textures/blocks/pwr_fuel_side.png | Bin 0 -> 211 bytes .../hbm/textures/blocks/pwr_fuel_top.png | Bin 0 -> 253 bytes .../assets/hbm/textures/blocks/pwr_heatex.png | Bin 0 -> 373 bytes .../textures/blocks/pwr_neutron_source.png | Bin 0 -> 564 bytes .../assets/hbm/textures/blocks/pwr_port.png | Bin 0 -> 583 bytes .../hbm/textures/blocks/pwr_reflector.png | Bin 0 -> 490 bytes 26 files changed, 287 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/BlockPWR.java create mode 100644 src/main/java/com/hbm/blocks/machine/MachinePWRController.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_block.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_block_ct.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_block_ct_alt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_casing.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_casing_blank.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_casing_port.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_casing_port_ct.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_channel_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_channel_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_concrete_flat.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_control_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_control_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_controller.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_fuel_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_fuel_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_heatex.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_neutron_source.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_port.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pwr_reflector.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index fe480dde1..f5b447bcd 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -875,6 +875,17 @@ public class ModBlocks { public static Block cm_circuit; public static Block cm_port; public static Block custom_machine; + + public static Block pwr_fuel; + public static Block pwr_control; + public static Block pwr_channel; + public static Block pwr_heatex; + public static Block pwr_neutron_source; + public static Block pwr_reflector; + public static Block pwr_casing; + public static Block pwr_controller; + public static Block pwr_block; + public static Block pwr_port; public static Block reactor_element; public static Block reactor_control; @@ -2036,6 +2047,17 @@ public class ModBlocks { cm_port = new BlockCMPort(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_port").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_port"); custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setLightLevel(1F).setHardness(5.0F).setResistance(10.0F); + pwr_fuel = new BlockPillar(Material.iron, RefStrings.MODID + ":pwr_fuel_top").setBlockName("pwr_fuel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_fuel_side"); + pwr_control = new BlockPillar(Material.iron, RefStrings.MODID + ":pwr_control_top").setBlockName("pwr_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_control_side"); + pwr_channel = new BlockPillar(Material.iron, RefStrings.MODID + ":pwr_channel_top").setBlockName("pwr_channel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_channel_side"); + pwr_heatex = new BlockGeneric(Material.iron).setBlockName("pwr_heatex").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_heatex"); + pwr_neutron_source = new BlockGeneric(Material.iron).setBlockName("pwr_neutron_source").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_neutron_source"); + pwr_reflector = new BlockGeneric(Material.iron).setBlockName("pwr_reflector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_reflector"); + pwr_casing = new BlockGeneric(Material.iron).setBlockName("pwr_casing").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing"); + pwr_port = new BlockGeneric(Material.iron).setBlockName("pwr_port").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_port"); + pwr_controller = new MachinePWRController(Material.iron).setBlockName("pwr_controller").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing_blank"); + pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_block"); + reactor_element = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_element_top", RefStrings.MODID + ":reactor_element_base").setBlockName("reactor_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_element_side"); reactor_control = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_control_top").setBlockName("reactor_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_control_side"); reactor_hatch = new ReactorHatch(Material.iron).setBlockName("reactor_hatch").setHardness(5.0F).setResistance(1000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_concrete"); @@ -3366,6 +3388,18 @@ public class ModBlocks { register(cm_circuit); register(cm_port); + //PWR + GameRegistry.registerBlock(pwr_fuel, pwr_fuel.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_control, pwr_control.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_channel, pwr_channel.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_heatex, pwr_heatex.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_neutron_source, pwr_neutron_source.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_reflector, pwr_reflector.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_casing, pwr_casing.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_port, pwr_port.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_controller, pwr_controller.getUnlocalizedName()); + GameRegistry.registerBlock(pwr_block, pwr_block.getUnlocalizedName()); + //Multiblock Generators GameRegistry.registerBlock(reactor_element, reactor_element.getUnlocalizedName()); GameRegistry.registerBlock(reactor_control, reactor_control.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java index 20bd9f35a..ae323e1bf 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java @@ -47,7 +47,7 @@ public class BlockHadronCoil extends Block implements IBlockCT, ITooltipProvider } @Override - public boolean canConnect(IBlockAccess world, int x, int y, int z, IBlockCT block) { + public boolean canConnect(IBlockAccess world, int x, int y, int z, Block block) { return block instanceof BlockHadronCoil; } diff --git a/src/main/java/com/hbm/blocks/machine/BlockPWR.java b/src/main/java/com/hbm/blocks/machine/BlockPWR.java new file mode 100644 index 000000000..865cff4c6 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/BlockPWR.java @@ -0,0 +1,52 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.ct.CT; +import com.hbm.render.block.ct.CTStitchReceiver; +import com.hbm.render.block.ct.IBlockCT; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +public class BlockPWR extends Block implements IBlockCT { + + @SideOnly(Side.CLIENT) protected IIcon iconPort; + + public BlockPWR(Material mat) { + super(mat); + } + + @Override + public int getRenderType() { + return CT.renderID; + } + + @SideOnly(Side.CLIENT) public CTStitchReceiver rec; + @SideOnly(Side.CLIENT) public CTStitchReceiver recPort; + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconPort = reg.registerIcon(RefStrings.MODID + ":pwr_casing_port"); + this.rec = IBlockCT.primeReceiver(reg, this.blockIcon.getIconName(), this.blockIcon); + this.recPort = IBlockCT.primeReceiver(reg, this.iconPort.getIconName(), this.iconPort); + } + + @Override + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + if(meta == 1) return recPort.fragCache; + return rec.fragCache; + } + + @Override + public boolean canConnect(IBlockAccess world, int x, int y, int z, Block block) { + return block == ModBlocks.pwr_block || block == ModBlocks.pwr_controller; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java new file mode 100644 index 000000000..9eedb3d45 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java @@ -0,0 +1,157 @@ +package com.hbm.blocks.machine; + +import java.util.HashMap; +import java.util.Map.Entry; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.util.fauxpointtwelve.BlockPos; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachinePWRController extends BlockContainer { + + @SideOnly(Side.CLIENT) + private IIcon iconFront; + + public MachinePWRController(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":pwr_controller"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + + if(world.isRemote) { + return true; + } else if(!player.isSneaking()) { + + assemble(world, x, y, z); + + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } else { + return false; + } + } + + private static HashMap assembly = new HashMap(); + private static HashMap fuelRods = new HashMap(); + private static boolean errored; + private static final int maxSize = 1024; + + public void assemble(World world, int x, int y, int z) { + assembly.clear(); + assembly.put(new BlockPos(x, y, z), this); + + ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)).getOpposite(); + x += dir.offsetX; + z += dir.offsetZ; + + errored = false; + floodFill(world, x, y, z); + + if(fuelRods.size() == 0) errored = true; + + if(!errored) { + for(Entry entry : assembly.entrySet()) { + + Block block = entry.getValue(); + + if(block != ModBlocks.pwr_controller) { + + if(block == ModBlocks.pwr_port) { + world.setBlock(entry.getKey().getX(), entry.getKey().getY(), entry.getKey().getZ(), ModBlocks.pwr_block, 1, 3); + } else { + world.setBlock(entry.getKey().getX(), entry.getKey().getY(), entry.getKey().getZ(), ModBlocks.pwr_block, 0, 3); + } + } + } + } + assembly.clear(); + } + + private void floodFill(World world, int x, int y, int z) { + + BlockPos pos = new BlockPos(x, y, z); + + if(assembly.containsKey(pos)) return; + if(assembly.size() >= maxSize) { + errored = true; + return; + } + + Block block = world.getBlock(x, y, z); + + if(isValidCasing(block)) { + assembly.put(pos, block); + return; + } + + if(isValidCore(block)) { + assembly.put(pos, block); + if(block == ModBlocks.pwr_fuel) fuelRods.put(pos, block); + floodFill(world, x + 1, y, z); + floodFill(world, x - 1, y, z); + floodFill(world, x, y + 1, z); + floodFill(world, x, y - 1, z); + floodFill(world, x, y, z + 1); + floodFill(world, x, y, z - 1); + return; + } + + errored = true; + } + + private boolean isValidCore(Block block) { + if(block == ModBlocks.pwr_fuel || block == ModBlocks.pwr_control || block == ModBlocks.pwr_channel || block == ModBlocks.pwr_heatex || block == ModBlocks.pwr_neutron_source) return true; + return false; + } + + private boolean isValidCasing(Block block) { + if(block == ModBlocks.pwr_casing || block == ModBlocks.pwr_reflector || block == ModBlocks.pwr_port) return true; + return false; + } +} diff --git a/src/main/java/com/hbm/render/block/ct/CTContext.java b/src/main/java/com/hbm/render/block/ct/CTContext.java index 30e1e9126..d028d2933 100644 --- a/src/main/java/com/hbm/render/block/ct/CTContext.java +++ b/src/main/java/com/hbm/render/block/ct/CTContext.java @@ -80,7 +80,7 @@ public class CTContext { int[] coord = dirs[j]; Block neighbor = world.getBlock(x + coord[0], y + coord[1], z + coord[2]); - if(neighbor instanceof IBlockCT && ((IBlockCT) neighbor).canConnect(world, x + coord[0], y + coord[1], z + coord[2], (IBlockCT)block)) { + if(((IBlockCT) block).canConnect(world, x + coord[0], y + coord[1], z + coord[2], neighbor)) { cons[j] = true; } } diff --git a/src/main/java/com/hbm/render/block/ct/IBlockCT.java b/src/main/java/com/hbm/render/block/ct/IBlockCT.java index 66bd967c0..c672784c0 100644 --- a/src/main/java/com/hbm/render/block/ct/IBlockCT.java +++ b/src/main/java/com/hbm/render/block/ct/IBlockCT.java @@ -1,5 +1,6 @@ package com.hbm.render.block.ct; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -8,7 +9,7 @@ public interface IBlockCT { public IIcon[] getFragments(IBlockAccess world, int x, int y, int z); - public default boolean canConnect(IBlockAccess world, int x, int y, int z, IBlockCT block) { + public default boolean canConnect(IBlockAccess world, int x, int y, int z, Block block) { return this == block; } diff --git a/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java b/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java index e59c4a6b5..bbd2655ee 100644 --- a/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java +++ b/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java @@ -37,7 +37,7 @@ public class RenderBlocksCT extends RenderBlocks { this.blockAccess = acc; } - private void initSideInfo() { + private void initSideInfo(int side) { if(!this.enableAO) return; @@ -49,15 +49,42 @@ public class RenderBlocksCT extends RenderBlocks { * it's only the color in ONE PARTICULAR SIDE. well thanks for that i think that's rather poggers, lex. */ - float red = (colorRedTopLeft + colorRedTopRight + colorRedBottomLeft + colorRedBottomRight) / 4F; + /*float red = (colorRedTopLeft + colorRedTopRight + colorRedBottomLeft + colorRedBottomRight) / 4F; float green = (colorGreenTopLeft + colorGreenTopRight + colorGreenBottomLeft + colorGreenBottomRight) / 4F; float blue = (colorBlueTopLeft + colorBlueTopRight + colorBlueBottomLeft + colorBlueBottomRight) / 4F; - int light = (brightnessTopLeft + brightnessTopRight + brightnessBottomLeft + brightnessBottomRight) / 4; + int light = (brightnessTopLeft + brightnessTopRight + brightnessBottomLeft + brightnessBottomRight) / 4;*/ - this.tl = new VertInfo(red, green, blue, light); - this.tr = new VertInfo(red, green, blue, light); - this.bl = new VertInfo(red, green, blue, light); - this.br = new VertInfo(red, green, blue, light); + if(side == ForgeDirection.SOUTH.ordinal()) { + this.tl = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.tr = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.bl = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.br = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } else if(side == ForgeDirection.NORTH.ordinal()) { + this.tr = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.br = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.tl = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.bl = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } else if(side == ForgeDirection.EAST.ordinal()) { + this.bl = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.tl = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.br = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.tr = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } else if(side == ForgeDirection.WEST.ordinal()) { + this.tr = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.br = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.tl = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.bl = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } else if(side == ForgeDirection.UP.ordinal()) { + this.br = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.bl = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.tr = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.tl = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } else { + this.tl = new VertInfo(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft, brightnessTopLeft); + this.tr = new VertInfo(colorRedTopRight, colorGreenTopRight, colorBlueTopRight, brightnessTopRight); + this.bl = new VertInfo(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft, brightnessBottomLeft); + this.br = new VertInfo(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight, brightnessBottomRight); + } this.tc = VertInfo.avg(tl, tr); this.bc = VertInfo.avg(bl, br); @@ -82,7 +109,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.EAST.ordinal()); CTFace face = CTContext.faces[ForgeDirection.EAST.ordinal()]; /// ORDER: LEXICAL /// @@ -99,7 +126,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.WEST.ordinal()); CTFace face = CTContext.faces[ForgeDirection.WEST.ordinal()]; /// ORDER: LEXICAL /// @@ -116,7 +143,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.UP.ordinal()); CTFace face = CTContext.faces[ForgeDirection.UP.ordinal()]; /// ORDER: LEXICAL /// @@ -133,7 +160,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.DOWN.ordinal()); CTFace face = CTContext.faces[ForgeDirection.DOWN.ordinal()]; /// ORDER: LEXICAL /// @@ -150,7 +177,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.SOUTH.ordinal()); CTFace face = CTContext.faces[ForgeDirection.SOUTH.ordinal()]; /// ORDER: LEXICAL /// @@ -167,7 +194,7 @@ public class RenderBlocksCT extends RenderBlocks { @Override public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) { - initSideInfo(); + initSideInfo(ForgeDirection.NORTH.ordinal()); CTFace face = CTContext.faces[ForgeDirection.NORTH.ordinal()]; /// ORDER: LEXICAL /// diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_block.png b/src/main/resources/assets/hbm/textures/blocks/pwr_block.png new file mode 100644 index 0000000000000000000000000000000000000000..8483b28147d16cd2da5931dae485943b6ab759fb GIT binary patch literal 333 zcmV-T0kZyyP)3!cu_!e*aYSZnygeyaLhd&3_?X*IjD$Ho01TpsJKoXqtxO z@kj^(5y8w@F5iD#B)5PVBdUss(DyyF*^E*OIcJ=6BQ+y{h~T}a)=G?#zVC6)5klZ_ zINbLDpp=4{F`Z6HDWR%_5HK?)lgVQR=P_!n%;$4dm0=jjIg@jK42Ut3Qo?&r2m$Xs zz@HwBMmQT+Yh@S)PNx$ha*2luoO77j#msBzDW&@g*6a1CV6k``o&5@E+xDsF{L*Iv f(Cv2nbThygff#NoKJtHT00000NkvXXu0mjfJe!Oe literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_block_ct.png b/src/main/resources/assets/hbm/textures/blocks/pwr_block_ct.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b37f330b7044b1bf3fad743534d78aee9c77bf GIT binary patch literal 842 zcmV-Q1GW5#P)iXLDt(gXBvxkDCR zbdjPNXenC~DRLGa5te1k$;k5nK?}W){PB@`{E5$>|4RHD-uuDZ7=tl}Q_<&aw_D1x z%+GSUoaFEC?+5uB;N835h%w@vBgRPEwrH(!&JjW&r9?`J5CYzNlu`iv{8^5KefaQx zl0Oa&5JJFOi}#+UY4XRquJa&TYowGo=jfS!rH8TG?I!t?0<_k7Wm;>r)(9aGLQqu| zMNwoxN{J8x?>#A{@qicjQNH&+E9_U+zl);4T8mN&DP=CBQi>Sk$pJ6%$05DROe$QgD$mJG7Af=>dPQ@jDBmf}B$nEWI29;8DU59gy{eF)S0&6XGU1t&J zDsYJ(ZGkZcYb_}yVvNKXNhxu2b3;{CXsz>iV+>u_GfG&N;fSW3^hL zwWe)by!ZL(f3b5h#g7CSV`$r!loCoQoO4uFg;FXXpkAO5A`d<_`4m4A;Js(R-=mbG zZQFcs0NS=C#)y;>V+>krx~@ZOeey&D7x|MFSS%LA7_-WhQr_po(p6Q3wRX^~j^h$P z5&+~f^$Pn^HBFQExH;qLfyc+kVg7Qt zWV2c49?&!mTI+nDH%)`JcH{@@y5{-$1#9hyhx2~mpGND7-RC`EQ*4*ZGr!}6~nJ{(Kn_3|3CHv{k&HZaCdi?2YibkD9e(607sEl U2*M={rT_o{07*qoM6N<$f{P!LLI3~& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_block_ct_alt.png b/src/main/resources/assets/hbm/textures/blocks/pwr_block_ct_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b7fd272332c79f8ef1d75a7e8aaa3fb3e41b74 GIT binary patch literal 861 zcmV-j1ETziP)fatO+(-9?afL2#l_XZc^N`L2mvW2D5bF3Y~Y*&0Hl-%oO4D90p5EEApig| zMjYD|{@93s)*9Y>SZnEL-}f-aAcO!ZB{=6W#?Y(AY`5E;#19BaDFJ|9CZ&Xw5{xl0 z#?ZDcg%SWb=U|M%dp}BG3O_i{7$b)JFAE`{sw!x$A%pgD%esB`!U{80nI+kd~_d3_l=H!dSwZ zQi3rC)>^FBYk2SBoCD_^F-D}6uv{)j!@r+~&+vnY^?eWL9CFSOLckb%W13O^uF*u@x;bEYtt zWm7^}RTYJ@?|UM0Y*Y9FffD`@0=3EhPS9FY?-vK_^%_d4gT1kDQ}_eI-g_EA*4jZj zIOnMA8qPUbYq4A|5B`r`ehNPzaDDxK)X`VXT1(4le{(9O21Wby^aR;7%~=WjtsdBJ zw;zJ!+ywqc5A5H0b^=p+;N|7z@ciTB1G=uGqA58n``lU!t@S_;l+CtUtp<4Db3Jf( z_u~LRTMx{|&(;HT@w4^7T>NZ3P;}u}@w4^7T>NZ3Fc&{t56s4Iw>KvT%Vu+V^8c~D zz5ON}+#aUGq?TG(6ih+-UD?_RD|FIq@ n_nw8o{rx>T{1-jYG!6a$>@cUcq0VNO00000NkvXXu0mjf()ESJ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_casing.png b/src/main/resources/assets/hbm/textures/blocks/pwr_casing.png new file mode 100644 index 0000000000000000000000000000000000000000..23f51e5033d450524fa2a65522a60955b20ed6c0 GIT binary patch literal 589 zcmV-T0z}+cjMYUtrSeAtl5+H=2 z^xnC+c#DWo$~rYLGem@(4}=hi@lmu!&YAsw&$`ZL)qn_?RmPBc2GD!s_A<%o<80v9#_l*`) zm<@2hKS4yPwNPuNR@)p=Qi>BGr9`cT-aD#FjETeHHzGnx2~}YX--6@B7-_9B#>}6Z z898S}lu`;gXLh?6j4@c(mDV~Ss4A+{iTRX%WU$-q=)KWeWr{jI7g46ol`#f6XF`aS zvK|>sL4@n;Z(LvBY=IfL4@y~yG2%Y9$&uUJd+zSO{|j(Tn5xoR0|u&-s)(>G3nI|k zOzgVmV~~39oSnU9Sr*&}wLS`#oHhu)X7)tuc|E$3bA8s6 bpYHzvZlG&(a_NQV00000NkvXXu0mjfMi>mc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_casing_blank.png b/src/main/resources/assets/hbm/textures/blocks/pwr_casing_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8c7f6b4d7b88cae08c36fe195f952da444ad68 GIT binary patch literal 542 zcmV+(0^$9MP)|E3`Cy|bkCohBGTMv4v_nAW)x+UGz|tj3;O>*k>UkN zfXd~nLf+qh1Xr2aKYJ;KQVRd8`9eGz3&CnCsZ3n`_9yDwCom<_gVBc%ceDJgSK%~!USGcgt-83w^u}z-W$Dldbi6FrIfq?N-6Z-m~*14 zzk=iBoEc*fvGS*8My(YQrL{(_m3@C9A~?^JF(x3WDyqwgHOhQ4 z*!P_|2V-=WsQ&PK*}O7RYbB*jYv+@}6%8VmO)D^gd(hfR&KdW(I%jG<9$I|?SXSP3 z7-Il|>Y^$lY}G1wpP1Q$*4Mhb gQEUJ5ratcf0>-RoS!6FK(f|Me07*qoM6N<$f(NPf%K!iX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_casing_port.png b/src/main/resources/assets/hbm/textures/blocks/pwr_casing_port.png new file mode 100644 index 0000000000000000000000000000000000000000..809c564c2c78010b9b225097231e7299e790f669 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfpA8fi^=HlDX1`Vcr4PAeV@i7J-B7YtrxU z{ye?bV!l3qnFce5Vvg3k-~U)|FrQp@aQ}ow8kcV7?3?+#GOC+{!SI;K^wgi%UNAER zTvun<^PM3gn=#||>-X9|S516hEm>vp{F2LRhWECLENzJur)w`4&iipK^~#H*{ti8Y z*}AK`4B3)-R?VuJk$sW*`JML8`bq_*EpJ5yJ(ch0mAjGrh3uR#AXc)I$ztaD0e0suSua$W!c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_casing_port_ct.png b/src/main/resources/assets/hbm/textures/blocks/pwr_casing_port_ct.png new file mode 100644 index 0000000000000000000000000000000000000000..52fb4583a768368053dcf069e5150ede685ed0f5 GIT binary patch literal 898 zcmV-|1AY97P)NCOPCx7cK{qD3Nig{(v9|^ZwyKZ{B( z(OR<&blf?$yTAX-|2{r` zMGyp7YqxIL#ZQuPQ-G9`EX%xz^Ya-1i^T$f$z%e+<>g1Dl+>JEXyZ3B0AQ`<=;&yz zNG>ieNYm#cOOk~7e2&%{A%qvvhF$!I0IfA)7~-7sXaA`WsKqJ>51WRNKq7iVLqQXib!isRaG1u9JGpP<2M9otvNhA#9E6n2CX%h zmmkqu`;>k9^qU{6VHlFY2Dc-yp`Jyb#5-BBlp8El`TrP>C2qDB) z0bTq}_#&*T3g;Y3DXOYM2!YlbYb{br27`ew(k#o?M()~)I`|C%#u%)%lx68twE9j6 z!_fDBy}@ue?5y@Se&Y&mZ|`@`_WC4{?u=Q*moI;`@*AUgI-Ry|_)^qwRcQKw&8(fB zouTS+xi5ULA4rnq*^um8!1wrp)o1QqK$jo5y1H7AkK>r}IPrsJvG~(3u69NJyY>TF zmT_})M;L~k{8c~j?%iaK-`fxL^8^2t-`fxL<@fdjefeTGJ9kO) z140Ojq99HG_Q9)v)#|Z&eEiC%@$={3iQ||)eDUGKukCM_7vk>jrqvIO$3L&d?{yMh zUtjb7{V!BiMGyo&3$-7pujqdr#qgZ+vMhgVo7z{$yp-|!`VAWc*L Y0sX+_2L6zb2LJ#707*qoM6N<$f-rrood5s; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_channel_side.png b/src/main/resources/assets/hbm/textures/blocks/pwr_channel_side.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3b557a2c7956852233b8be8523f40e7d3b7e1d GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf>%@!#`Zsudl(_oq+D-S*@1-ZZ5 z&Mqe`i(fBUHA8Zhmu73Udfgk@Ji+t8qFpPIx6m;OW&ymip{b;e} z+B!@1Y+Wx+hKial4o%f>_hv}O$tU;RK2x!J>!ZRB!#D;dr*o2_M<4$``2T@2zubiH WWvety*82giWbkzLb6Mw<&;$SyH$EBw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_concrete_flat.png b/src/main/resources/assets/hbm/textures/blocks/pwr_concrete_flat.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd3c4ba5d34cd04e847c1cc2a95da359f8ffc16 GIT binary patch literal 520 zcmV+j0{8uiP)2CFks{073`>z>z};gb)xBM1B?(3aZL=UG(0`IXm6+JlXf%wTlR<>V}&c z+FE1I$=lnT51JWc406t#=ZT1rQsTNU2bpssB7_(tA%tHst+jYO9vsI(2!WImYb|1o zj4^!4T8nT;a?_e~l5?h%!t3>-wMMNKRb`C9oRjDC=~3!+UDR4xYhh;OoH>pIGjjv) z1tLPunK6d^K!wdR>0$3aTT z%VuWioYQIET@VofN-5sFJC(1mFE7&=<2%Ot!CK2{-k;@`ux*=5xvtBB^rqi?C&uW8 z-8555p1rC9@Or(7F;Yq)wAQ>prIi2Vs4DxuQ){J^!t?q3b^jM7ctF!=Xl`);0000< KMNUMnLSTY=E$`|8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_control_side.png b/src/main/resources/assets/hbm/textures/blocks/pwr_control_side.png new file mode 100644 index 0000000000000000000000000000000000000000..b36c421a2c7b3cf246b8a254ed7353f45984fda9 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf9UFLh)gTe~DWM4fEgM@d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_control_top.png b/src/main/resources/assets/hbm/textures/blocks/pwr_control_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ae636a02b56367f51d9a1f3f85874a5e98eaed GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf565Gy2o6z?H{D%l-K5QxCl$6^DGm%&a!E?-4Y3j z9}m(K)wNC+DJlI}wk~_Upx~oa%dNH{dIF*=w7P7VjUUgREh^f(H6w~U`}__0K0SdV zXBR%#XIA{oE=O3M@;W#cJqk#LbMY0A4Ey-rZ~vzYQls&SC${|P+V?W=wn>X~ zREC6JJ#yxQ@2q8U$!SOC|FiU*^gwpcum5~?kND<&3Q^tFxbw(Epf4CaUHx3vIVCg! E0MKV+iU0rr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_controller.png b/src/main/resources/assets/hbm/textures/blocks/pwr_controller.png new file mode 100644 index 0000000000000000000000000000000000000000..822cb4d266c6f82a9e1c477d78068c144e86ef63 GIT binary patch literal 550 zcmV+>0@?kEP)276-l+r)9h#(?7gu5OG zu)Y0~QVJqMDTNRM)>`_$C&q}XQc5A`M2rz*EKs?;{MiIjO3df;C3!$q>AH@b6J00d z9I>`TRRNexo{@7RrPKthwZs@XK0bQT?tSd-z2W@)lv*n`rKV)9U5nft2UH6{6EMaw z47Y0wcz;8!rU?L)k{OR5uPp!;)!Zr(!MQg5|AYN=swyePwW-c^h`3gZ2r&jGlL`C# zZvnWvx?nUKv$?s+VsVZ4o){C>Lf3VK5U91~&!v>`-ZLIQ;_U1@s)~qkbF<+3`Ufc` zYOSa$#;^=rzxuKj5k{jCrDQ&SdI!Ms4+j98oO~sv#B6p*trhP*ufH4-!mx5+rqkUz znLI&NQ7x!eoO6_-EFFwD=TDx>onavIbjfzAmb1a5Cb+l7mZ o`D$4AVT?gU@IL<4<5%y$0sJK;nbTOo0{{R307*qoM6N<$g0;-|TmS$7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_fuel_side.png b/src/main/resources/assets/hbm/textures/blocks/pwr_fuel_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1f22996bb5d37c3bb30cb8d7908c1fd34d9e26c1 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfrem>+k^eSejoN<4Yg@;zMk}wS48}MV3nbHIQ#Y>@s*Q56g7Rna8jwORy;#N z;1la4#hZ!YHlB}+=N2d5-KM)N#`96l&V{f21q4@Uxv+#rChT83u}HOZoqggC`wy~T z(|V^oS5Z{5mq>2;E~k0k(AEH-1EKS`um(&Y{B!+)*Jk9l#Gkz6lXJGFBJm1pTX1B&t;ucLK6Vk$X_o2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_heatex.png b/src/main/resources/assets/hbm/textures/blocks/pwr_heatex.png new file mode 100644 index 0000000000000000000000000000000000000000..f579c8a45451d77ac9a0fe69f3e2bc594e752864 GIT binary patch literal 373 zcmV-*0gC>KP)F>Vw=5JlhbX+z|MLvT0;M5JT{a0yG62oV=R+`^GTB0(fb zSO(TRvsKlfU{|&Xm|&tVb-gO7s-C{Sf9=Xb62^EKfS+Hk`Ed1#fw_3|lK(M%)L{4h zGm@w*DvONb?#C^YU@o)9^o%49fy>8tKxMMu?OBFt5^GG)NGb+#h<~6zzh=&wNSigL zk1X;KEcXks1fz<|K}InNK&&xceF6ytwuvPfRb&Kb5(3tkzWa8=@7p`(-ORiXVo5TK zszDjbW{uIS=g*urVH3j`c-ll7CP4%0cs0_e;Plr7y==xQnFhf_qlOrQ-UN@e%)@lS zlP0t#(!0x#^d?@s-6)bd?qIV>594hW$-soRi*()_hV3FXiL$qgG}oX@t0Mgcv@$n4 T{_8}|00000NkvXXu0mjfp!%P4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_neutron_source.png b/src/main/resources/assets/hbm/textures/blocks/pwr_neutron_source.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1d78027976f3907a660ae9276d81e31d075bdf GIT binary patch literal 564 zcmV-40?Yl0P)Y=Fo97}7u|LL zTy#$Zv6D)7SE}lM=iEBw>dWVpS_yYDAxR2_)xnC4L``vXA_FohB7{4o6e5!55xhG+ zLCvVO0#HQ&Fn1z?hyb9JLPnrwhzJi4e`(><#M?K=wARQ>M1)cb!!QsLlu`g#tyYv$ z=)JSs-4mI#t{pc6;Qhx>s2gsMx$$a#PydR!^Zmy)A5PmMrL|hAt>Nyd8@t^ts`_kn z?Wj%P+wBdPuTRMcYHc*;M?`RQRF%8C+i6o*#y+B^tk;|Au&%V$CO=4oQi$0sb6YAN z9j-Y%I%2)quwHLCKf73n%xv<8g6s_f76R?hu~ikf{ox}rcS%i=oZFO{3&9@ysSoB( z*G^ZZ_s%$u48wqkOeSU~ZvJ28r`UTsGo!2G?z9LeBM=eHbusMx>;gB#+%dC-PHoy) zYo)bD%S_Y^Go!jM6~A47eQe>LWG0IU%#6&Wjk6w~FUfX$L+`p6)@STTSrdurRJ4(a zyE6;}8yPvid`adDdhZ+@oKS0>gEN`!v!u3alZ415BKZ01H?20zr)%x*0JPQ+5vs@% zE;mEw;5C5z`#%&BYOV7E$9-C~PbffmkR+M8B=a8w`wIve2v`&V0000dqfP7d3<~x3aBbKH{VeWTwZ=5r9@E_blnzf9jYE< z3UY?~`wgnf`S}M_6$4<5K{XJ9j-8J%rl2Saw%cEb2q~p$^bi6uCUVYLRYg^~y822= ziQC&B)1JHi51BO0Cq#t4e;pX8Dk4JHZ7GTZfW=}CzG)+TQRn&D&UDs4qHF2=k5<(#7yocCz9mmHr z`o5pKEtku`AnuIjTsbKt^Z6pz^;>ezsCwG=WlBD@_RiL`*%7LP8=s$F1{FZKyZbph z>?77%VoZcE6zKaN5h3TyX7fM@fz#8I1C;C?W{e?(0A!3Qh%q7}lx2wsgfKYv^|jkG zh%s_@_MWmVNh#yK0tsu~1Wg2ThPr--wQl4Uh7}$jT2yr+dl({ubB?a_2RYsJ{~Jqx VLcv4mF&+Q_002ovPDHLkV1h(l1A71f literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pwr_reflector.png b/src/main/resources/assets/hbm/textures/blocks/pwr_reflector.png new file mode 100644 index 0000000000000000000000000000000000000000..c139a402ea33722cae5db29bd18aab8c22640e17 GIT binary patch literal 490 zcmV~=dhGXO*cGsDaf5!@XSK}6_JDFt`O%-C+X z1QB7k+Yw_#M94XlbEcF6fU4r|+-^7Aoe;v%=y*I5RF#wx*XwoYUTbAM9y1z^FtZ;8 zbIwdA6E2qvP1B&?$2y%(tX33fl`&&^}fPZ%GF+hxwTI*fJ zS}OpH#e%kNe~^BM4~GLG1Y(S+h>%hurSz}{r4*W`xqqQI#s6qfYaPs{P1D>Tst;?> zyEDdk*C2#|sy?hi*LB0{)y#%9KB_^j6%nD7g1o=K`+mRY>+6g8d`{Ce0K;bb)8js5 zudlCse0&hxo$+|gbULN$Isj5inAs2_GaEt_LZIi=S_yA&Z=BC(RF#}F?miIvLcP&) g&eU2dr3_j41uqSi!J1Qc{r~^~07*qoM6N<$f>}${+W-In literal 0 HcmV?d00001