From 35c9833e694d8526c1400b774ad6b51e2f136805 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 27 Sep 2022 23:22:27 +0200 Subject: [PATCH] fixed pouring, rendering for foundry outlet --- .../hbm/blocks/machine/FoundryChannel.java | 10 +- .../com/hbm/blocks/machine/FoundryOutlet.java | 23 ++- .../java/com/hbm/main/CraftingManager.java | 1 + .../hbm/render/block/RenderBlocksFixed.java | 15 ++ .../com/hbm/render/block/RenderOutlet.java | 142 ++++++++++++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityFoundryChannel.java | 8 +- .../machine/TileEntityFoundryOutlet.java | 30 +++- src/main/java/com/hbm/util/CrucibleUtil.java | 5 +- .../textures/blocks/foundry_outlet_bottom.png | Bin 0 -> 515 bytes .../textures/blocks/foundry_outlet_front.png | Bin 0 -> 192 bytes .../textures/blocks/foundry_outlet_inner.png | Bin 0 -> 329 bytes .../textures/blocks/foundry_outlet_side.png | Bin 0 -> 340 bytes .../textures/blocks/foundry_outlet_top.png | Bin 0 -> 410 bytes 14 files changed, 221 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/hbm/render/block/RenderBlocksFixed.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_outlet_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_outlet_front.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_outlet_inner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_outlet_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_outlet_top.png diff --git a/src/main/java/com/hbm/blocks/machine/FoundryChannel.java b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java index 615d9d54a..5a5626420 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryChannel.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java @@ -97,22 +97,22 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor @Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { - return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); } @Override public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { - return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).pour(world, x, y, z, dX, dY, dZ, side, stack); + return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).pour(world, x, y, z, dX, dY, dZ, side, stack); } @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { - return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack); + return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack); } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { - return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack); + return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack); } public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { @@ -122,7 +122,7 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor Block b = world.getBlock(x + dir.offsetX, y, z + dir.offsetZ); - return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold; + return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold || b == ModBlocks.foundry_outlet; } public static int renderID = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java index 82b0698cf..f92e5817f 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java @@ -11,8 +11,11 @@ import cpw.mods.fml.relauncher.SideOnly; 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.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -23,6 +26,7 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor { @SideOnly(Side.CLIENT) public IIcon iconSide; @SideOnly(Side.CLIENT) public IIcon iconBottom; @SideOnly(Side.CLIENT) public IIcon iconInner; + @SideOnly(Side.CLIENT) public IIcon iconFront; public FoundryOutlet() { super(Material.rock); @@ -32,16 +36,27 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor { @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_top"); - this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_side"); - this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_bottom"); - this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_inner"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_outlet_top"); + this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_outlet_side"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_outlet_bottom"); + this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_outlet_inner"); + this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":foundry_outlet_front"); } @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { return true; } + + @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 TileEntity createNewTileEntity(World world, int meta) { diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 7e55fcfc0..1c55dc46f 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -955,6 +955,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.foundry_basin), new Object[] { "B B", "B B", "BSB", 'B', ModItems.ingot_firebrick, 'S', Blocks.stone_slab }); addRecipeAuto(new ItemStack(ModBlocks.foundry_mold), new Object[] { "B B", "BSB", 'B', ModItems.ingot_firebrick, 'S', Blocks.stone_slab }); addRecipeAuto(new ItemStack(ModBlocks.foundry_channel, 4), new Object[] { "B B", " S ", 'B', ModItems.ingot_firebrick, 'S', Blocks.stone_slab }); + addShapelessAuto(new ItemStack(ModBlocks.foundry_outlet), new Object[] { ModBlocks.foundry_channel, STEEL.plate() }); addRecipeAuto(new ItemStack(ModItems.mold_base), new Object[] { " B ", "BIB", " B ", 'B', ModItems.ingot_firebrick, 'I', IRON.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.brick_fire), new Object[] { "BB", "BB", 'B', ModItems.ingot_firebrick }); addShapelessAuto(new ItemStack(ModItems.ingot_firebrick, 4), new Object[] { ModBlocks.brick_fire }); diff --git a/src/main/java/com/hbm/render/block/RenderBlocksFixed.java b/src/main/java/com/hbm/render/block/RenderBlocksFixed.java new file mode 100644 index 000000000..6194a36c6 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderBlocksFixed.java @@ -0,0 +1,15 @@ +package com.hbm.render.block; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; + +public class RenderBlocksFixed extends RenderBlocks { + + public RenderBlocksFixed() { + super(); + } + + public RenderBlocksFixed(IBlockAccess world) { + super(world); + } +} diff --git a/src/main/java/com/hbm/render/block/RenderOutlet.java b/src/main/java/com/hbm/render/block/RenderOutlet.java index b7ded4b0c..b60c1f477 100644 --- a/src/main/java/com/hbm/render/block/RenderOutlet.java +++ b/src/main/java/com/hbm/render/block/RenderOutlet.java @@ -1,21 +1,163 @@ package com.hbm.render.block; +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.machine.FoundryChannel; import com.hbm.blocks.machine.FoundryOutlet; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; +import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; public class RenderOutlet implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + double bot = 0.0D; + double top = 0.5D; + double x = 0; + double y = 0; + double z = 0; + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + FoundryOutlet outlet = (FoundryOutlet) block; + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + + renderer.setRenderBounds(0.3125D, bot, 0D, 0.6875D, top, 0.375D); + + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, outlet.iconTop); + renderer.renderFaceYPos(block, x, y - 0.375D, z, outlet.iconBottom); + + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, outlet.iconBottom); + + tessellator.setNormal(1F, 0F, 0F); + renderer.field_152631_f = true; + renderer.renderFaceXPos(block, x, y, z, outlet.iconSide); + renderer.renderFaceXPos(block, x - 0.3125D, y, z, outlet.iconInner); + renderer.field_152631_f = false; + + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, outlet.iconSide); + renderer.renderFaceXNeg(block, x + 0.3125D, y, z, outlet.iconInner); + + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, outlet.iconFront); + + tessellator.draw(); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + int colorMult = block.colorMultiplier(world, x, y, z); + float r = (float) (colorMult >> 16 & 255) / 255.0F; + float g = (float) (colorMult >> 8 & 255) / 255.0F; + float b = (float) (colorMult & 255) / 255.0F; + + float mulBottom = 0.5F; + float mulTop = 1.0F; + float mulZ = 0.8F; + float mulX = 0.6F; + + double bot = 0.0D; + double top = 0.5D; + + if(EntityRenderer.anaglyphEnable) { + float aR = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float aG = (r * 30.0F + g * 70.0F) / 100.0F; + float aB = (r * 30.0F + b * 70.0F) / 100.0F; + r = aR; + g = aG; + b = aB; + } + + FoundryOutlet outlet = (FoundryOutlet) block; + int meta = world.getBlockMetadata(x, y, z); + + int brightness = block.getMixedBrightnessForBlock(world, x, y, z); + tessellator.setBrightness(brightness); + + if(meta == 4) { + renderer.setRenderBounds(0.625D, bot, 0.3125D, 1D, top, 0.6875D); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, outlet.iconTop); + renderer.renderFaceYPos(block, x, y - 0.375D, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZPos(block, x, y, z, outlet.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.3125D, outlet.iconInner); + renderer.field_152631_f = true; + renderer.renderFaceZNeg(block, x, y, z, outlet.iconSide); + renderer.renderFaceZNeg(block, x, y, z + 0.3125D, outlet.iconInner); + renderer.field_152631_f = false; + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, outlet.iconFront); + } + + if(meta == 5) { + renderer.setRenderBounds(0D, bot, 0.3125D, 0.375D, top, 0.6875D); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, outlet.iconTop); + renderer.renderFaceYPos(block, x, y - 0.375D, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZPos(block, x, y, z, outlet.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.3125D, outlet.iconInner); + renderer.field_152631_f = true; + renderer.renderFaceZNeg(block, x, y, z, outlet.iconSide); + renderer.renderFaceZNeg(block, x, y, z + 0.3125D, outlet.iconInner); + renderer.field_152631_f = false; + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXPos(block, x, y, z, outlet.iconFront); + } + + if(meta == 2) { + renderer.setRenderBounds(0.3125D, bot, 0.625D, 0.6875D, top, 1D); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, outlet.iconTop); + renderer.renderFaceYPos(block, x, y - 0.375D, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.field_152631_f = true; + renderer.renderFaceXPos(block, x, y, z, outlet.iconSide); + renderer.renderFaceXPos(block, x - 0.3125D, y, z, outlet.iconInner); + renderer.field_152631_f = false; + renderer.renderFaceXNeg(block, x, y, z, outlet.iconSide); + renderer.renderFaceXNeg(block, x + 0.3125D, y, z, outlet.iconInner); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, outlet.iconFront); + } + + if(meta == 3) { + renderer.setRenderBounds(0.3125D, bot, 0D, 0.6875D, top, 0.375D); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, outlet.iconTop); + renderer.renderFaceYPos(block, x, y - 0.375D, z, outlet.iconBottom); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.field_152631_f = true; + renderer.renderFaceXPos(block, x, y, z, outlet.iconSide); + renderer.renderFaceXPos(block, x - 0.3125D, y, z, outlet.iconInner); + renderer.field_152631_f = false; + renderer.renderFaceXNeg(block, x, y, z, outlet.iconSide); + renderer.renderFaceXNeg(block, x + 0.3125D, y, z, outlet.iconInner); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZPos(block, x, y, z, outlet.iconFront); + } + return true; } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 4bf7992a5..4144bc497 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -255,6 +255,7 @@ public class TileMappings { put(TileEntityFoundryMold.class, "tileentity_foundry_mold"); put(TileEntityFoundryBasin.class, "tileentity_foundry_basin"); put(TileEntityFoundryChannel.class, "tileentity_foundry_channel"); + put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java index 87af1488f..80e9a26b7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java @@ -15,6 +15,8 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFoundryChannel extends TileEntityFoundryBase { + public int nextUpdate; + @Override public void updateEntity() { @@ -24,7 +26,11 @@ public class TileEntityFoundryChannel extends TileEntityFoundryBase { this.amount = 0; } - if(worldObj.rand.nextInt(10) == 0 && this.amount > 0 && this.type != null) { + nextUpdate--; + + if(nextUpdate <= 0 && this.amount > 0 && this.type != null) { + + nextUpdate = worldObj.rand.nextInt(6) + 10; List ints = new ArrayList() {{ add(2); add(3); add(4); add(5); }}; Collections.shuffle(ints); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index f1e906650..6c5d54052 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -1,8 +1,11 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -10,15 +13,36 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase { @Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return stack; } - + @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { - return this.standardCheck(world, x, y, z, side, stack); + + Vec3 start = Vec3.createVectorHelper(x + 0.5, y - 0.125, z + 0.5); + Vec3 end = Vec3.createVectorHelper(x + 0.5, y + 0.125 - 4, z + 0.5); + + MovingObjectPosition[] mop = new MovingObjectPosition[1]; + ICrucibleAcceptor acc = CrucibleUtil.getPouringTarget(world, start, end, mop); + + if(acc == null) { + return false; + } + + return acc.canAcceptPartialPour(world, mop[0].blockX, mop[0].blockY, mop[0].blockZ, mop[0].hitVec.xCoord, mop[0].hitVec.yCoord, mop[0].hitVec.zCoord, ForgeDirection.UP, stack); } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { - return standardAdd(world, x, y, z, side, stack); + + Vec3 start = Vec3.createVectorHelper(x + 0.5, y - 0.125, z + 0.5); + Vec3 end = Vec3.createVectorHelper(x + 0.5, y + 0.125 - 4, z + 0.5); + + MovingObjectPosition[] mop = new MovingObjectPosition[1]; + ICrucibleAcceptor acc = CrucibleUtil.getPouringTarget(world, start, end, mop); + + if(acc == null) + return stack; + + return acc.pour(world, mop[0].blockX, mop[0].blockY, mop[0].blockZ, mop[0].hitVec.xCoord, mop[0].hitVec.yCoord, mop[0].hitVec.zCoord, ForgeDirection.UP, stack); } @Override diff --git a/src/main/java/com/hbm/util/CrucibleUtil.java b/src/main/java/com/hbm/util/CrucibleUtil.java index 7b79b5908..e5d06cdbd 100644 --- a/src/main/java/com/hbm/util/CrucibleUtil.java +++ b/src/main/java/com/hbm/util/CrucibleUtil.java @@ -66,9 +66,12 @@ public class CrucibleUtil { for(MaterialStack stack : stacks) { - MaterialStack left = tryPourStack(world, acc, mop, stack, impactPosHolder); + int amountToPour = Math.min(stack.amount, quanta); + MaterialStack toPour = new MaterialStack(stack.material, amountToPour); + MaterialStack left = tryPourStack(world, acc, mop, toPour, impactPosHolder); if(left != null) { + stack.amount -= (amountToPour - left.amount); return new MaterialStack(stack.material, stack.amount - left.amount); } } diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_bottom.png b/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..53406350fa015e77948f54ae5f07880b0c7b6a65 GIT binary patch literal 515 zcmV+e0{s1nP)B@dw6ZoCj;E>jGz$c{)GJf^Sd&W z@IX}f`FUezjNTce0}zoEMP*S{EO$hNW=6|MB7&@ zNsEZRX-0Uk?#BRgEqZH2CZ>vtpshWR0h*cZ1K*uZ6*B_?LU>;nV~nS%s2~U)v1K4U z2>*AEOvdQ6)-Y8>jRMnQV);46WMP$-j!_4;CTpY(BA~qs|$`@T#(TJd`IA5=g zq`Q!JvpE-t?EPAZ$YxW8d^|AQl(Gt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_front.png b/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_front.png new file mode 100644 index 0000000000000000000000000000000000000000..98bb463c75278fe9347fd92894dd469869a41b7e GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfC}49e2^N5$La8DIi4rM^ zpFQ&^0z|BUhEv_<{@|Z~K<@9Z$~O0mQqAN0j?1$a6=l_BrbjKCe&D2Sm@U`5Yzr5s z4dc3E(+>btuZuMR<2=x$#B?&|VK!&A%RJ3LIG>EjzTmiN00ZFpZHbqH0&;tET|9!S zGD;NsVV`WOcm#D-;SreXujw9vh)|jBQ+;q$6;s8`KmZqZT}Mjk@L2^x7~ByN^t%xe zJmO2rkD+ZE+?~N4k09rsh#=K9DuTK@01-hc1v4We5QNH%C-_#nFThV4Tt>YNdRC~ z0000a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_top.png b/src/main/resources/assets/hbm/textures/blocks/foundry_outlet_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8438991842fe2bec38ee431cd0fabacd8b210689 GIT binary patch literal 410 zcmV;L0cHM)P)xY-W}QGF#xb2Xg|G!2?S#!Dj+R-w1Y;q z#50}Zk+CK@ynxKlKJc73a?j+^KaqB4FN9E!RI~- z*(Bk_AQzKqTL3!43FI-2G70^&Za|TUFY@sSQi4PHH!<~le;iaF&Hw-a07*qoM6N<$ Eg8vn$JOBUy literal 0 HcmV?d00001