From aad9fadda3f9d9821d94fdaf3e9d51a41e95e974 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 2 Jan 2024 23:43:28 +0100 Subject: [PATCH] getting railed --- src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../blocks/machine/MachineAutocrafter.java | 40 +++-- .../com/hbm/blocks/machine/MachineFunnel.java | 138 ++++++++++++++++++ .../{IRenderRail.java => IRenderBlock.java} | 2 +- .../com/hbm/blocks/rail/RailNarrowCurve.java | 2 +- .../hbm/blocks/rail/RailNarrowStraight.java | 2 +- .../hbm/blocks/rail/RailStandardBuffer.java | 2 +- .../hbm/blocks/rail/RailStandardCurve.java | 2 +- .../blocks/rail/RailStandardCurveWide.java | 2 +- .../com/hbm/blocks/rail/RailStandardRamp.java | 2 +- .../hbm/blocks/rail/RailStandardStraight.java | 2 +- .../rail/RailStandardStraightShort.java | 2 +- .../hbm/blocks/rail/RailStandardSwitch.java | 2 +- .../rail/RailStandardSwitchFlipped.java | 2 +- .../com/hbm/inventory/OreDictManager.java | 2 +- .../inventory/container/ContainerFunnel.java | 64 ++++++++ .../java/com/hbm/inventory/gui/GUIFunnel.java | 42 ++++++ .../java/com/hbm/main/CraftingManager.java | 1 + .../java/com/hbm/main/ResourceManager.java | 1 + .../java/com/hbm/render/block/RenderRail.java | 6 +- .../java/com/hbm/tileentity/TileMappings.java | 3 +- .../machine/TileEntityMachineAutocrafter.java | 4 + .../machine/TileEntityMachineFunnel.java | 118 +++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 3 + .../assets/hbm/models/blocks/funnel.obj | 90 ++++++++++++ .../hbm/textures/blocks/machine_funnel.png | Bin 0 -> 263 bytes .../textures/blocks/machine_funnel_bottom.png | Bin 0 -> 304 bytes .../textures/blocks/machine_funnel_side.png | Bin 0 -> 305 bytes .../textures/blocks/machine_funnel_top.png | Bin 0 -> 316 bytes .../textures/gui/processing/gui_funnel.png | Bin 0 -> 1164 bytes 31 files changed, 505 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineFunnel.java rename src/main/java/com/hbm/blocks/rail/{IRenderRail.java => IRenderBlock.java} (95%) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerFunnel.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIFunnel.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java create mode 100644 src/main/resources/assets/hbm/models/blocks/funnel.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_top.png create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_funnel.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 26203971a..f67d7a6f0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1105,8 +1105,9 @@ public class ModBlocks { public static Block machine_waste_drum; public static Block machine_storage_drum; - + public static Block machine_autocrafter; + public static Block machine_funnel; public static Block anvil_iron; public static Block anvil_lead; @@ -2344,6 +2345,7 @@ public class ModBlocks { machine_electrolyser = new MachineElectrolyser().setBlockName("machine_electrolyser").setHardness(10.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); machine_autocrafter = new MachineAutocrafter().setBlockName("machine_autocrafter").setHardness(10.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab); + machine_funnel = new MachineFunnel().setBlockName("machine_funnel").setHardness(10.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab); anvil_iron = new NTMAnvil(Material.iron, 1).setBlockName("anvil_iron").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_iron"); anvil_lead = new NTMAnvil(Material.iron, 1).setBlockName("anvil_lead").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_lead"); @@ -3122,7 +3124,8 @@ public class ModBlocks { GameRegistry.registerBlock(boat, boat.getUnlocalizedName()); //Machines - GameRegistry.registerBlock(machine_autocrafter, ItemBlockBase.class, machine_autocrafter.getUnlocalizedName()); + register(machine_autocrafter); + register(machine_funnel); GameRegistry.registerBlock(anvil_iron, ItemBlockBase.class, anvil_iron.getUnlocalizedName()); GameRegistry.registerBlock(anvil_lead, ItemBlockBase.class, anvil_lead.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/MachineAutocrafter.java b/src/main/java/com/hbm/blocks/machine/MachineAutocrafter.java index f4fabf399..1c922fab5 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineAutocrafter.java +++ b/src/main/java/com/hbm/blocks/machine/MachineAutocrafter.java @@ -24,10 +24,8 @@ import net.minecraft.world.World; public class MachineAutocrafter extends BlockContainer { - @SideOnly(Side.CLIENT) - private IIcon iconTop; - @SideOnly(Side.CLIENT) - private IIcon iconBottom; + @SideOnly(Side.CLIENT) private IIcon iconTop; + @SideOnly(Side.CLIENT) private IIcon iconBottom; public MachineAutocrafter() { super(Material.iron); @@ -67,48 +65,48 @@ public class MachineAutocrafter extends BlockContainer { } } - private final Random field_149933_a = new Random(); + private final Random rand = new Random(); @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { - ISidedInventory tileentityfurnace = (ISidedInventory) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + ISidedInventory tile = (ISidedInventory) world.getTileEntity(x, y, z); - if(tileentityfurnace != null) { + if(tile != null) { - for(int i1 = 10; i1 < tileentityfurnace.getSizeInventory(); ++i1) { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); + for(int i1 = 10; i1 < tile.getSizeInventory(); ++i1) { + ItemStack itemstack = tile.getStackInSlot(i1); if(itemstack != null) { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f = this.rand.nextFloat() * 0.8F + 0.1F; + float f1 = this.rand.nextFloat() * 0.8F + 0.1F; + float f2 = this.rand.nextFloat() * 0.8F + 0.1F; while(itemstack.stackSize > 0) { - int j1 = this.field_149933_a.nextInt(21) + 10; + int j1 = this.rand.nextInt(21) + 10; if(j1 > itemstack.stackSize) { j1 = itemstack.stackSize; } itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); if(itemstack.hasTagCompound()) { entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); } float f3 = 0.05F; - entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); + entityitem.motionX = (float) this.rand.nextGaussian() * f3; + entityitem.motionY = (float) this.rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) this.rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); } } } - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); + world.func_147453_f(x, y, z, block); } - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + super.breakBlock(world, x, y, z, block, meta); } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineFunnel.java b/src/main/java/com/hbm/blocks/machine/MachineFunnel.java new file mode 100644 index 000000000..7506e2218 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineFunnel.java @@ -0,0 +1,138 @@ +package com.hbm.blocks.machine; + +import java.util.List; +import java.util.Random; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.rail.IRenderBlock; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; +import com.hbm.tileentity.machine.TileEntityMachineFunnel; + +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.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class MachineFunnel extends BlockContainer implements ITooltipProvider, IRenderBlock { + + @SideOnly(Side.CLIENT) private IIcon iconTop; + @SideOnly(Side.CLIENT) private IIcon iconBottom; + + public MachineFunnel() { + super(Material.iron); + } + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_funnel_top"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_funnel_side"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":machine_funnel_bottom"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityMachineFunnel(); + } + + @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()) { + TileEntity entity = world.getTileEntity(x, y, z); + if(entity instanceof TileEntityMachineFunnel) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + } + return true; + } else { + return false; + } + } + + private final Random rand = new Random(); + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + ISidedInventory tile = (ISidedInventory) world.getTileEntity(x, y, z); + if(tile != null) { + for(int i1 = 0; i1 < tile.getSizeInventory(); ++i1) { + ItemStack itemstack = tile.getStackInSlot(i1); + if(itemstack != null) { + float f = this.rand.nextFloat() * 0.8F + 0.1F; + float f1 = this.rand.nextFloat() * 0.8F + 0.1F; + float f2 = this.rand.nextFloat() * 0.8F + 0.1F; + while(itemstack.stackSize > 0) { + int j1 = this.rand.nextInt(21) + 10; + if(j1 > itemstack.stackSize) j1 = itemstack.stackSize; + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + if(itemstack.hasTagCompound()) entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + float f3 = 0.05F; + entityitem.motionX = (float) this.rand.nextGaussian() * f3; + entityitem.motionY = (float) this.rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) this.rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + world.func_147453_f(x, y, z, block); + } + super.breakBlock(world, x, y, z, block, meta); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } + + @Override + @SideOnly(Side.CLIENT) + public void renderInventory(Tessellator tessellator, Block block, int metadata) { + GL11.glTranslatef(0F, -0.5F, 0F); + tessellator.startDrawingQuads(); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Top", block.getIcon(1, 0), tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Bottom", block.getIcon(0, 0), tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Side", block.getIcon(2, 0), tessellator, 0, false); + tessellator.draw(); + } + + @Override + @SideOnly(Side.CLIENT) + public void renderWorld(Tessellator tessellator, Block block, int meta, IBlockAccess world, int x, int y, int z) { + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Top", block.getIcon(1, 0), tessellator, 0, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Bottom", block.getIcon(0, 0), tessellator, 0, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.funnel, "Side", block.getIcon(2, 0), tessellator, 0, true); + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + } +} diff --git a/src/main/java/com/hbm/blocks/rail/IRenderRail.java b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java similarity index 95% rename from src/main/java/com/hbm/blocks/rail/IRenderRail.java rename to src/main/java/com/hbm/blocks/rail/IRenderBlock.java index 4b3cf8346..7cf90e9fd 100644 --- a/src/main/java/com/hbm/blocks/rail/IRenderRail.java +++ b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java @@ -7,7 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; -public interface IRenderRail { +public interface IRenderBlock { public static int renderID = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/blocks/rail/RailNarrowCurve.java b/src/main/java/com/hbm/blocks/rail/RailNarrowCurve.java index ecf690121..861bda8c0 100644 --- a/src/main/java/com/hbm/blocks/rail/RailNarrowCurve.java +++ b/src/main/java/com/hbm/blocks/rail/RailNarrowCurve.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailNarrowCurve extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailNarrowCurve extends BlockDummyable implements IRailNTM, IRenderBlock { public RailNarrowCurve() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailNarrowStraight.java b/src/main/java/com/hbm/blocks/rail/RailNarrowStraight.java index 4b84f25c2..45bf500c8 100644 --- a/src/main/java/com/hbm/blocks/rail/RailNarrowStraight.java +++ b/src/main/java/com/hbm/blocks/rail/RailNarrowStraight.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailNarrowStraight extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailNarrowStraight extends BlockDummyable implements IRailNTM, IRenderBlock { public RailNarrowStraight() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java b/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java index 20e345172..07e07c6b2 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java @@ -21,7 +21,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardBuffer extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardBuffer extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardBuffer() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardCurve.java b/src/main/java/com/hbm/blocks/rail/RailStandardCurve.java index a8e69b8a8..e4e394469 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardCurve.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardCurve.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardCurve() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardCurveWide.java b/src/main/java/com/hbm/blocks/rail/RailStandardCurveWide.java index 3935cf5c6..221832df8 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardCurveWide.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardCurveWide.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardCurveWide extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardCurveWide extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardCurveWide() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardRamp.java b/src/main/java/com/hbm/blocks/rail/RailStandardRamp.java index c9a1e6010..aab9ed31d 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardRamp.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardRamp.java @@ -23,7 +23,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardRamp extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardRamp extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardRamp() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardStraight.java b/src/main/java/com/hbm/blocks/rail/RailStandardStraight.java index f448d7881..3fc0ff745 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardStraight.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardStraight.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardStraight extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardStraight extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardStraight() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardStraightShort.java b/src/main/java/com/hbm/blocks/rail/RailStandardStraightShort.java index 02aca06f3..44ed16f6a 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardStraightShort.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardStraightShort.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardStraightShort extends BlockDummyable implements IRailNTM, IRenderRail { +public class RailStandardStraightShort extends BlockDummyable implements IRailNTM, IRenderBlock { public RailStandardStraightShort() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardSwitch.java b/src/main/java/com/hbm/blocks/rail/RailStandardSwitch.java index f08785d44..d35adb57d 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardSwitch.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardSwitch.java @@ -28,7 +28,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardSwitch extends BlockRailWaypointSystem implements IRenderRail { +public class RailStandardSwitch extends BlockRailWaypointSystem implements IRenderBlock { @SideOnly(Side.CLIENT) private IIcon iconSign; diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardSwitchFlipped.java b/src/main/java/com/hbm/blocks/rail/RailStandardSwitchFlipped.java index 58b280786..25cc227e1 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardSwitchFlipped.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardSwitchFlipped.java @@ -25,7 +25,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class RailStandardSwitchFlipped extends BlockRailWaypointSystem implements IRenderRail { +public class RailStandardSwitchFlipped extends BlockRailWaypointSystem implements IRenderBlock { @SideOnly(Side.CLIENT) private IIcon iconSign; diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 211c4cab1..8b7589e11 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -362,7 +362,7 @@ public class OreDictManager { TCALLOY .ingot(ingot_tcalloy) .dust(powder_tcalloy) .block(block_tcalloy); CDALLOY .ingot(ingot_cdalloy) .block(block_cdalloy); PB .nugget(nugget_lead) .ingot(ingot_lead) .dust(powder_lead) .plate(plate_lead) .block(block_lead) .ore(ore_lead, ore_meteor_lead); - BI .nugget(nugget_bismuth) .billet(billet_bismuth) .ingot(ingot_bismuth) .dust(powder_bismuth); + BI .nugget(nugget_bismuth) .billet(billet_bismuth) .ingot(ingot_bismuth) .dust(powder_bismuth) .block(block_bismuth); AS .nugget(nugget_arsenic) .ingot(ingot_arsenic); CA .ingot(ingot_calcium) .dust(powder_calcium); CD .ingot(ingot_cadmium) .dust(powder_cadmium) .block(block_cadmium); diff --git a/src/main/java/com/hbm/inventory/container/ContainerFunnel.java b/src/main/java/com/hbm/inventory/container/ContainerFunnel.java new file mode 100644 index 000000000..5cfb3bcfb --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerFunnel.java @@ -0,0 +1,64 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.tileentity.machine.TileEntityMachineFunnel; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerFunnel extends Container { + + private TileEntityMachineFunnel funnel; + + public ContainerFunnel(InventoryPlayer playerInv, TileEntityMachineFunnel tile) { + funnel = tile; + + for(int i = 0; i < 9; i++) this.addSlotToContainer(new Slot(tile, i, 8 + 18 * i, 18)); + for(int i = 0; i < 9; i++) this.addSlotToContainer(new SlotCraftingOutput(playerInv.player, tile, i + 9, 8 + 18 * i, 54)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 86 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(playerInv, i, 8 + i * 18, 144)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return funnel.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(index); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(index <= 17) { + if(!this.mergeItemStack(var5, 18, this.inventorySlots.size(), true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, 9, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFunnel.java b/src/main/java/com/hbm/inventory/gui/GUIFunnel.java new file mode 100644 index 000000000..1ee5069b3 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIFunnel.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerFunnel; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineFunnel; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIFunnel extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_funnel.png"); + private TileEntityMachineFunnel funnel; + + public GUIFunnel(InventoryPlayer invPlayer, TileEntityMachineFunnel tedf) { + super(new ContainerFunnel(invPlayer, tedf)); + funnel = tedf; + + this.xSize = 176; + this.ySize = 168; + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.funnel.hasCustomInventoryName() ? this.funnel.getInventoryName() : I18n.format(this.funnel.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 9203ee542..176368f1b 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -312,6 +312,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 2), new Object[] { "PCP", "PMP", "PPP", 'P', ANY_RESISTANTALLOY.ingot(), 'C', ModItems.circuit_gold, 'M', new ItemStack(ModBlocks.mass_storage, 1, 1) }); addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 3), new Object[] { "PPP", "PIP", "PPP", 'P', KEY_PLANKS, 'I', IRON.plate() }); addRecipeAuto(new ItemStack(ModBlocks.machine_autocrafter, 1), new Object[] { "SCS", "MWM", "SCS", 'S', STEEL.plate(), 'C', ModItems.circuit_copper, 'M', ModItems.motor, 'W', Blocks.crafting_table }); + addRecipeAuto(new ItemStack(ModBlocks.machine_funnel, 1), new Object[] { "S S", "SRS", " S ", 'S', STEEL.ingot(), 'R', REDSTONE.dust() }); addRecipeAuto(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', PB.ingot(), 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty }); addRecipeAuto(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', IRON.ingot(), 'R', Blocks.furnace, 'B', IRON.block(), 'P', Blocks.piston }); addRecipeAuto(new ItemStack(ModBlocks.machine_siren, 1), new Object[] { "SIS", "ICI", "SRS", 'S', STEEL.plate(), 'I', ANY_RUBBER.ingot(), 'C', ModItems.circuit_copper, 'R', REDSTONE.dust() }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index d72e0509a..e25c691c7 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1472,6 +1472,7 @@ public class ResourceManager { public static final IModelCustom rail_standard_switch = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_switch.obj")); public static final IModelCustom rail_standard_switch_flipped = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_switch_flipped.obj")); public static final IModelCustom capacitor = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/capacitor.obj")); + public static final IModelCustom funnel = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/funnel.obj")); public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj")); public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderRail.java b/src/main/java/com/hbm/render/block/RenderRail.java index a9460d17a..ab366486b 100644 --- a/src/main/java/com/hbm/render/block/RenderRail.java +++ b/src/main/java/com/hbm/render/block/RenderRail.java @@ -2,7 +2,7 @@ package com.hbm.render.block; import org.lwjgl.opengl.GL11; -import com.hbm.blocks.rail.IRenderRail; +import com.hbm.blocks.rail.IRenderBlock; import com.hbm.blocks.rail.RailStandardStraight; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -17,7 +17,7 @@ public class RenderRail implements ISimpleBlockRenderingHandler { public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { GL11.glPushMatrix(); Tessellator tessellator = Tessellator.instance; - IRenderRail rail = (IRenderRail) block; + IRenderBlock rail = (IRenderBlock) block; rail.renderInventory(tessellator, block, metadata); GL11.glPopMatrix(); } @@ -28,7 +28,7 @@ public class RenderRail implements ISimpleBlockRenderingHandler { tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); tessellator.setColorOpaque_F(1, 1, 1); int meta = world.getBlockMetadata(x, y, z); - IRenderRail rail = (IRenderRail) block; + IRenderBlock rail = (IRenderBlock) block; rail.renderWorld(tessellator, block, meta, world, x, y, z); return true; } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index d51bdab4b..1eef03148 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -297,8 +297,9 @@ public class TileMappings { put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet"); put(TileEntityFoundrySlagtap.class, "tileentity_foundry_slagtap"); put(TileEntitySlag.class, "tileentity_foundry_slag"); - + put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); + put(TileEntityMachineFunnel.class, "tileentity_funnel"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); put(TileEntityMachineRadiolysis.class, "tileentity_radiolysis"); put(TileEntityUVLamp.class, "tileentity_uv_lamp"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index 6b964c3a0..b93815fdb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -369,6 +369,10 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen } } + public void clear() { + for(int i = 0; i < this.getSizeInventory(); i++) this.setInventorySlotContents(i, null); + } + public static class ContainerBlank extends Container { @Override public void onCraftMatrixChanged(IInventory inventory) { } @Override public boolean canInteractWith(EntityPlayer player) { return false; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java new file mode 100644 index 000000000..ee40ccf8f --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java @@ -0,0 +1,118 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.container.ContainerFunnel; +import com.hbm.inventory.gui.GUIFunnel; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCraftingAuto; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +public class TileEntityMachineFunnel extends TileEntityMachineBase implements IGUIProvider { + + public TileEntityMachineFunnel() { + super(18); + } + + @Override + public String getName() { + return "container.machineFunnel"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(int i = 0; i < 9; i++) { + + if(slots[i] != null) { + int stacksize = 9; + ItemStack compressed = slots[i].stackSize < 9 ? null : this.getFrom9(slots[i]); + if(compressed == null) { + compressed = slots[i].stackSize < 4 ? null : this.getFrom4(slots[i]); + stacksize = 4; + } + + if(compressed != null && slots[i].stackSize >= stacksize) { + if(slots[i + 9] == null) { + slots[i + 9] = compressed.copy(); + this.decrStackSize(i, stacksize); + } else if(slots[i + 9].getItem() == compressed.getItem() && slots[i + 9].getItemDamage() == compressed.getItemDamage() && slots[i + 9].stackSize + compressed.stackSize <= compressed.getMaxStackSize()) { + slots[i + 9].stackSize += compressed.stackSize; + this.decrStackSize(i, stacksize); + } + } + } + } + } + } + + public int[] topAccess = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; + public int[] bottomAccess = new int[] { 9, 10, 11, 12, 13, 14, 15, 16, 17 }; + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return side == 0 ? bottomAccess : topAccess; + } + + @Override + public boolean canExtractItem(int i, ItemStack stack, int j) { + if(j == 0) return i > 8; + return j != 1 && i < 9; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot > 8) return false; + return this.getFrom9(stack) != null || this.getFrom4(stack) != null; + } + + protected InventoryCraftingAuto craftingInventory = new InventoryCraftingAuto(3, 3); + + public ItemStack getFrom4(ItemStack ingredient) { + this.craftingInventory.clear(); + this.craftingInventory.setInventorySlotContents(0, ingredient.copy()); + this.craftingInventory.setInventorySlotContents(1, ingredient.copy()); + this.craftingInventory.setInventorySlotContents(3, ingredient.copy()); + this.craftingInventory.setInventorySlotContents(4, ingredient.copy()); + return getMatch(this.craftingInventory); + } + + public ItemStack getFrom9(ItemStack ingredient) { + this.craftingInventory.clear(); + for(int i = 0; i < 9; i++) this.craftingInventory.setInventorySlotContents(i, ingredient.copy()); + return getMatch(this.craftingInventory); + } + + public ItemStack getMatch(InventoryCrafting grid) { + for(Object o : CraftingManager.getInstance().getRecipeList()) { + IRecipe recipe = (IRecipe) o; + + if(recipe.matches(grid, worldObj)) { + return recipe.getCraftingResult(grid); + } + } + return null; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerFunnel(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIFunnel(player.inventory, this); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index a07ccfd74..b5ce978b9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -352,6 +352,7 @@ container.machineDiesel=Dieselgenerator container.machineElectricBoiler=Elektrischer Ölwärmer container.machineElectrolyser=Electrolysegerät container.machineFEL=FEL +container.machineFunnel=Kombinationstrichter container.machineITER=Kernfusionsreaktor container.machineLargeTurbine=Industrielle Dampfturbine container.machineLiquefactor=Verflüssiger @@ -4129,6 +4130,8 @@ tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Kraftfeldgenerator tile.machine_fracking_tower.name=Hydraulischer Frackingturm tile.machine_fraction_tower.name=Fraktionierungsturm +tile.machine_funnel.name=Kombinationstrichter +tile.machine_funnel.desc=Verbindet Items in einem 2x2 oder 3x3 Craftingfeld$Oben: Input$Unten: Output$Seite: Output für Item-Eingang tile.machine_gascent.name=Gaszentrifuge tile.machine_generator.name=Atomreaktor (Alt) tile.machine_geo.name=Geothermiegenerator diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f9681a2c0..845be3e2f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -711,6 +711,7 @@ container.machineDiesel=Diesel Generator container.machineElectricBoiler=Electric Oil Heater container.machineElectrolyser=Electrolysis Machine container.machineFEL=FEL +container.machineFunnel=Combinator Funnel container.machineITER=Fusion Reactor container.machineLargeTurbine=Industrial Steam Turbine container.machineLiquefactor=Liquefactor @@ -5125,6 +5126,8 @@ tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Forcefield Emitter tile.machine_fraction_tower.name=Fractioning Tower tile.machine_fracking_tower.name=Hydraulic Fracking Tower +tile.machine_funnel.name=Combinator Funnel +tile.machine_funnel.desc=Automatically compresses items in a 2x2 or 3x3 crafting grid$Top: Input$Bottom: Output$Side: Output for clearing incredients tile.machine_gascent.name=Gas Centrifuge tile.machine_generator.name=Nuclear Reactor (Old) tile.machine_geo.name=Geothermal Electric Generator diff --git a/src/main/resources/assets/hbm/models/blocks/funnel.obj b/src/main/resources/assets/hbm/models/blocks/funnel.obj new file mode 100644 index 000000000..c166fd7a3 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/funnel.obj @@ -0,0 +1,90 @@ +# Blender v2.79 (sub 0) OBJ File: 'funnel.blend' +# www.blender.org +o Bottom +v -0.250000 0.000000 0.250000 +v -0.250000 0.000000 -0.250000 +v 0.250000 0.000000 0.250000 +v 0.250000 0.000000 -0.250000 +vt 0.750000 0.750000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vn 0.0000 -1.0000 0.0000 +s off +f 4/1/1 1/2/1 2/3/1 +f 4/1/1 3/4/1 1/2/1 +o Top +v -0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v 0.500000 1.000000 -0.500000 +vt 1.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 0.000000 +vt -0.000000 1.000000 +vn 0.0000 1.0000 0.0000 +s off +f 6/5/2 7/6/2 8/7/2 +f 6/5/2 5/8/2 7/6/2 +o Side +v -0.250000 0.000000 0.250000 +v -0.500000 1.000000 0.500000 +v -0.250000 0.000000 -0.250000 +v -0.500000 1.000000 -0.500000 +v 0.250000 0.000000 0.250000 +v 0.500000 1.000000 0.500000 +v 0.250000 0.000000 -0.250000 +v 0.500000 1.000000 -0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.250000 0.000000 +vt 0.750000 -0.000000 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000097 0.999903 +vt 0.000097 0.999903 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.4472 0.8944 +vn 0.8944 -0.4472 0.0000 +vn 0.0000 -0.4472 -0.8944 +vn -0.8944 -0.4472 0.0000 +s off +f 10/9/3 18/10/3 17/11/3 +f 12/12/4 19/13/4 18/14/4 +f 16/15/5 20/16/5 19/17/5 +f 14/18/6 17/19/6 20/20/6 +f 20/20/7 9/21/7 13/22/7 +f 19/17/8 13/23/8 15/24/8 +f 18/14/9 15/25/9 11/26/9 +f 17/11/10 11/27/10 9/28/10 +f 10/9/3 12/29/3 18/10/3 +f 12/12/4 16/30/4 19/13/4 +f 16/15/5 14/31/5 20/16/5 +f 14/18/6 10/32/6 17/19/6 +f 20/20/7 17/19/7 9/21/7 +f 19/17/8 20/16/8 13/23/8 +f 18/14/9 19/13/9 15/25/9 +f 17/11/10 18/10/10 11/27/10 diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_funnel.png b/src/main/resources/assets/hbm/textures/blocks/machine_funnel.png new file mode 100644 index 0000000000000000000000000000000000000000..40cdfa516c7041a10647f36c393a1774c102d917 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfggteYXJKO^_G?^V^fPe7kAc)I$z JtaD0e0sxv4WDEcR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_funnel_bottom.png b/src/main/resources/assets/hbm/textures/blocks/machine_funnel_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffb54e3dff9f8811bfa67ddbb4b345a39ac4a72 GIT binary patch literal 304 zcmV-00nh%4P)z9wA7Nq-ks{CSP=z`n>Cl_N z_TBlM$23hZV+{X5MCgn$EXx9b_nvVavu|BX^%x`8TDEQDsT+DwlfCyha*Pq+BTzb* z8??v(U2;o9>$=jqiHI=IGa&@}zW)knM`H}faa0AIa~C;;@D(WY1DxlX{SU(ckddz& z=&Tyv`&&JcQ-th@HIWvw2>PlTWvp6+4!~MVDU>p|oHKz$w$>sdIOnQl5xH%VMTjw8 z@2m$kq52AXHQg+0CHWF4U216cI}u^u_a^ZdM1(iymAi|S+N@3h0000=4qxRibQjh@3bV;3|NGylxkjkxQs%RBvo- zKl=mAaU5UHIsRiJ!seXgx-N3g#25j{IrpX*<iuo zV7I6#Y+v8z)>(sXw0@Rb-@)%}8yiK0l+v_WL>{?sWUBm(e?Iu600000NkvXXu0mjf DE|`9> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_funnel_top.png b/src/main/resources/assets/hbm/textures/blocks/machine_funnel_top.png new file mode 100644 index 0000000000000000000000000000000000000000..151899a23bf0a2f49c0f1006f5d33579af29003c GIT binary patch literal 316 zcmV-C0mJ@@P)J#NJy5QM*2uR};I2cdK83%K)L-TMsgeFZ>5)JYLR%nRh_ zO@(%MMl*Mq=6$b~dP)hcHOF!AxHtBF2VmqV=M2EQ zuB4OzJ_YV%?>*l8p>1m|`@XX*%a_32Hb4lWOBRuDk!l2`6yEzves*E4C4_*8pp+uU z2*A`E?nM~In(h()17pnC!C%lsC@Xmd6M)vbDfS|bV%9B`BM}io2wj4RG_zHpL@1|Q z277oGt`3}Yoac$P_SaK(&b0zDMvO5{;~B=7`tyy0oHN&T4T(P?=gbFr+kTy|9?jhV O0000M=zsob$X)!h=FfkltVQAuHU=e2EP-77AVNjUC z;9vlk*n948+V#@a`3rJyOC7)1H}|OZ^wX(d`R>o=b+~$*d4t>i@1}i=Wv#o*YrIPB z^%zk#<1`f_VOA~YaC_U;?|)xOZ%l4a&RUfecJ$UIU6wd-lOjf|7s3gv#BV1Q}M~Z|1*Py?0d$XEpzVeYZiTFZ*=Yzc5aw|lOd$mh9Ub)ZTw@4TN^i59AEmfE`|vy*a-L>7|=Q2 zY#O%Zu73afs(I3JzT;1P9Q=;YY`9&>iN|Ni5tZ}p@qyUuYxgxO*WKSUxA<+0-t?>1 zHTh-?p`|O{cW$4&^KtU4-$a`RiS`XQKQr`wv;A0RRDQ!hIP|iKZ)j+}?4AcM3fAs7 zepV@6FyILdE!`Wp+U_6U<_W@$Z)EC@cRKw3D2FTcU=M~l94XH~Sib>kE#uq&*k!?A z3&9iT9+uDH*dqU)k)%L812*DtU79~jlX8*Lg)&4Wq}^vJ(b_Oq`Avb%)rb~1MuPTU#2rDZ#?T3t=|AL-qY33 JWt~$(69D_sk5d2u literal 0 HcmV?d00001