From 3c6e7920b5d8d70e07d11472eaad91b9944072e7 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 15 Aug 2023 20:42:48 +0200 Subject: [PATCH] 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