From 5cc6621b946f0721567c1ef61b0a6c533f63003a Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 29 Mar 2023 22:59:24 +0200 Subject: [PATCH] conveyor splitter --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/network/CraneSplitter.java | 143 +++++++++++++++ .../com/hbm/items/machine/ItemWatzPellet.java | 3 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 1 + .../com/hbm/render/block/RenderSplitter.java | 87 +++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../network/TileEntityCraneSplitter.java | 31 ++++ .../assets/hbm/models/blocks/splitter.obj | 172 ++++++++++++++++++ .../textures/blocks/crane_splitter_belt.png | Bin 0 -> 3669 bytes .../blocks/crane_splitter_belt.png.mcmeta | 3 + 11 files changed, 444 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/blocks/network/CraneSplitter.java create mode 100644 src/main/java/com/hbm/render/block/RenderSplitter.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java create mode 100644 src/main/resources/assets/hbm/models/blocks/splitter.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png.mcmeta diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 214fd06f4..3d48508ec 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -778,6 +778,7 @@ public class ModBlocks { public static Block crane_router; public static Block crane_boxer; public static Block crane_unboxer; + public static Block crane_splitter; public static Block fan; @@ -1902,6 +1903,7 @@ public class ModBlocks { crane_router = new CraneRouter().setBlockName("crane_router").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_boxer = new CraneBoxer().setBlockName("crane_boxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_unboxer = new CraneUnboxer().setBlockName("crane_unboxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fan = new MachineFan().setBlockName("fan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -3101,6 +3103,7 @@ public class ModBlocks { GameRegistry.registerBlock(conveyor_triple, conveyor_triple.getUnlocalizedName()); GameRegistry.registerBlock(conveyor_chute, conveyor_chute.getUnlocalizedName()); GameRegistry.registerBlock(conveyor_lift, conveyor_lift.getUnlocalizedName()); + GameRegistry.registerBlock(crane_splitter, crane_splitter.getUnlocalizedName()); GameRegistry.registerBlock(fan, fan.getUnlocalizedName()); GameRegistry.registerBlock(chain, chain.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/network/CraneSplitter.java b/src/main/java/com/hbm/blocks/network/CraneSplitter.java new file mode 100644 index 000000000..e0abc2450 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/CraneSplitter.java @@ -0,0 +1,143 @@ +package com.hbm.blocks.network; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.entity.item.EntityMovingItem; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneSplitter; + +import api.hbm.conveyor.IConveyorBelt; +import api.hbm.conveyor.IConveyorItem; +import api.hbm.conveyor.IConveyorPackage; +import api.hbm.conveyor.IEnterableBlock; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnterableBlock { + + @SideOnly(Side.CLIENT) public IIcon iconTopLeft; + @SideOnly(Side.CLIENT) public IIcon iconTopRight; + @SideOnly(Side.CLIENT) public IIcon iconFrontLeft; + @SideOnly(Side.CLIENT) public IIcon iconFrontRight; + @SideOnly(Side.CLIENT) public IIcon iconBottom; + @SideOnly(Side.CLIENT) public IIcon iconBelt; + @SideOnly(Side.CLIENT) public IIcon iconInner; + + public CraneSplitter() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityCraneSplitter(); + } + + @Override + public int[] getDimensions() { + return new int[] {0, 0, 0, 0, 0, 1}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconBelt = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_belt"); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override public boolean canItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { return getTravelDirection(world, x, y, z, null) == dir; } + @Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return false; } + @Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { } + + @Override + public void onItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { + int[] core = this.findCore(world, x, y, z); + if(core == null) return; + x = core[0]; + y = core[1]; + z = core[2]; + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityCraneSplitter)) return; + TileEntityCraneSplitter splitter = (TileEntityCraneSplitter) tile; + boolean pos = splitter.getPosition(); + ItemStack stack = entity.getItemStack(); + ForgeDirection rot = ForgeDirection.getOrientation(splitter.getBlockMetadata() - offset).getRotation(ForgeDirection.DOWN); + + if(stack.stackSize % 2 == 0) { + stack.stackSize /= 2; + spawnMovingItem(world, x, y, z, stack.copy()); + spawnMovingItem(world, x + rot.offsetX, y, z + rot.offsetZ, stack.copy()); + } else { + int baseSize = stack.stackSize /= 2; + stack.stackSize = baseSize + (pos ? 0 : 1); + spawnMovingItem(world, x, y, z, stack.copy()); + stack.stackSize = baseSize + (pos ? 1 : 0); + spawnMovingItem(world, x + rot.offsetX, y, z + rot.offsetZ, stack.copy()); + splitter.setPosition(!pos); + } + } + + private void spawnMovingItem(World world, int x, int y, int z, ItemStack stack) { + if(stack.stackSize <= 0) return; + EntityMovingItem moving = new EntityMovingItem(world); + Vec3 pos = Vec3.createVectorHelper(x + 0.5, y + 0.5, z + 0.5); + Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, pos); + moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); + moving.setItemStack(stack); + world.spawnEntityInWorld(moving); + } + + @Override + public boolean canItemStay(World world, int x, int y, int z, Vec3 itemPos) { + return true; + } + + @Override + public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) { + ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos); + Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, itemPos); + Vec3 dest = Vec3.createVectorHelper(snap.xCoord - dir.offsetX * speed, snap.yCoord - dir.offsetY * speed, snap.zCoord - dir.offsetZ * speed); + Vec3 motion = Vec3.createVectorHelper((dest.xCoord - itemPos.xCoord), (dest.yCoord - itemPos.yCoord), (dest.zCoord - itemPos.zCoord)); + double len = motion.lengthVector(); + Vec3 ret = Vec3.createVectorHelper(itemPos.xCoord + motion.xCoord / len * speed, itemPos.yCoord + motion.yCoord / len * speed, itemPos.zCoord + motion.zCoord / len * speed); + return ret; + } + + @Override + public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) { + ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos); + itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1); + itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1); + double posX = x + 0.5; + double posZ = z + 0.5; + if(dir.offsetX != 0) posX = itemPos.xCoord; + if(dir.offsetZ != 0) posZ = itemPos.zCoord; + return Vec3.createVectorHelper(posX, y + 0.25, posZ); + } + + public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { + int meta = world.getBlockMetadata(x, y, z); + if(meta >= 12) return ForgeDirection.getOrientation(meta - offset); + return ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP); + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index c45a53954..d56bfa6e9 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -145,7 +145,8 @@ public class ItemWatzPellet extends ItemEnumMulti { } public static double getEnrichment(ItemStack stack) { - return getYield(stack) / ((ItemRBMKRod) stack.getItem()).yield; + EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + return getYield(stack) / num.yield; } public static double getYield(ItemStack stack) { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index d58e6c015..6c4ea730a 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -752,6 +752,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderReeds()); RenderingRegistry.registerBlockHandler(new RenderRTTY()); RenderingRegistry.registerBlockHandler(new RenderDiFurnaceExtension()); + RenderingRegistry.registerBlockHandler(new RenderSplitter()); RenderingRegistry.registerBlockHandler(new RenderFoundryBasin()); RenderingRegistry.registerBlockHandler(new RenderFoundryMold()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 2acd7e2fd..88ff8c69f 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1306,6 +1306,7 @@ public class ResourceManager { public static final IModelCustom cable_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/cable_neo.obj")); public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj")); public static final IModelCustom difurnace_extension = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/difurnace_extension.obj")); + public static final IModelCustom splitter = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/splitter.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/RenderSplitter.java b/src/main/java/com/hbm/render/block/RenderSplitter.java new file mode 100644 index 000000000..3b85f3e18 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderSplitter.java @@ -0,0 +1,87 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.network.CraneSplitter; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderSplitter implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + tessellator.setColorOpaque_F(1, 1, 1); + + GL11.glScaled(0.625, 0.625, 0.625); + GL11.glRotated(-90, 0, 1, 0); + GL11.glTranslatef(0F, -0.5F, 0.5F); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.splitter, ModBlocks.block_steel.getIcon(0, 0), tessellator, 0, false); + tessellator.draw(); + GL11.glTranslatef(0F, 0F, -1F); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.splitter, ModBlocks.block_steel.getIcon(0, 0), tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + + int meta = world.getBlockMetadata(x, y, z); + float rotation = 0; + if(meta == 12 || meta == 4) rotation = 90F / 180F * (float) Math.PI; + if(meta == 13 || meta == 5) rotation = 270F / 180F * (float) Math.PI; + if(meta == 14 || meta == 3) rotation = 180F / 180F * (float)Math.PI; + + boolean isLeft = meta >= 12; + + CraneSplitter splitter = (CraneSplitter) block; + IIcon conveyor = splitter.iconBelt; + + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Top", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Bottom", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + if(isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Left", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + if(!isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Right", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Back", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Front", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Inner", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerLeft", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerRight", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerTop", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerBottom", conveyor, tessellator, rotation, true); + + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return CraneSplitter.renderID; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 19088d153..b4e7437c3 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -350,6 +350,7 @@ public class TileMappings { put(TileEntityCraneBoxer.class, "tileentity_boxer"); put(TileEntityCraneUnboxer.class, "tileentity_unboxer"); put(TileEntityCraneRouter.class, "tileentity_router"); + put(TileEntityCraneSplitter.class, "tileentity_splitter"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java new file mode 100644 index 000000000..76f110241 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java @@ -0,0 +1,31 @@ +package com.hbm.tileentity.network; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityCraneSplitter extends TileEntity { + + /* false: left belt is preferred, true: right belt is preferred */ + private boolean position; + + public void setPosition(boolean pos) { + this.position = pos; + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + + public boolean getPosition() { + return this.position; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.position = nbt.getBoolean("pos"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setBoolean("pos", this.position); + } +} diff --git a/src/main/resources/assets/hbm/models/blocks/splitter.obj b/src/main/resources/assets/hbm/models/blocks/splitter.obj new file mode 100644 index 000000000..611da2f75 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/splitter.obj @@ -0,0 +1,172 @@ +# Blender v2.79 (sub 0) OBJ File: 'splitter.blend' +# www.blender.org +o Inner +v 0.000000 0.250000 -0.375000 +v 0.000000 0.250000 0.375000 +v 0.000000 0.875000 -0.375000 +v 0.000000 0.875000 0.375000 +vt 0.875000 0.875000 +vt 0.125000 0.250000 +vt 0.875000 0.250000 +vt 0.125000 0.875000 +vn -1.0000 0.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 InnerBottom +v -0.500000 0.250000 0.375000 +v -0.500000 0.250000 -0.375000 +v 0.000000 0.250000 -0.375000 +v 0.000000 0.250000 0.375000 +vt 0.875000 0.000000 +vt 0.125000 0.500000 +vt 0.125000 0.000000 +vt 0.875000 0.500000 +vn 0.0000 1.0000 0.0000 +s off +f 5/5/2 7/6/2 6/7/2 +f 5/5/2 8/8/2 7/6/2 +o InnerLeft +v -0.500000 0.250000 0.375000 +v -0.500000 0.875000 0.375000 +v 0.000000 0.250000 0.375000 +v 0.000000 0.875000 0.375000 +vt 1.000000 0.875000 +vt 0.500000 0.250000 +vt 1.000000 0.250000 +vt 0.500000 0.875000 +vn 0.0000 0.0000 -1.0000 +s off +f 10/9/3 11/10/3 9/11/3 +f 10/9/3 12/12/3 11/10/3 +o InnerTop +v -0.500000 0.875000 0.375000 +v -0.500000 0.875000 -0.375000 +v 0.000000 0.875000 -0.375000 +v 0.000000 0.875000 0.375000 +vt 0.125000 1.000000 +vt 0.875000 0.500000 +vt 0.875000 1.000000 +vt 0.125000 0.500000 +vn 0.0000 -1.0000 0.0000 +s off +f 14/13/4 16/14/4 13/15/4 +f 14/13/4 15/16/4 16/14/4 +o InnerRight +v -0.500000 0.250000 -0.375000 +v -0.500000 0.875000 -0.375000 +v 0.000000 0.250000 -0.375000 +v 0.000000 0.875000 -0.375000 +vt 0.000000 0.250000 +vt 0.500000 0.875000 +vt 0.000000 0.875000 +vt 0.500000 0.250000 +vn 0.0000 0.0000 1.0000 +s off +f 17/17/5 20/18/5 18/19/5 +f 17/17/5 19/20/5 20/18/5 +o Top +v -0.500000 1.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 0.875000 0.500000 +v 0.500000 0.875000 -0.500000 +v 0.000000 1.000000 0.500000 +v 0.000000 1.000000 -0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.000000 +vn 0.2425 0.9701 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 23/21/6 26/22/6 25/23/6 +f 25/23/7 21/24/7 22/25/7 +f 23/21/6 24/26/6 26/22/6 +f 25/23/7 26/22/7 21/24/7 +o Right +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 0.875000 -0.500000 +v 0.000000 1.000000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.500000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 0.000000 +vn 0.0000 0.0000 -1.0000 +s off +f 27/27/8 29/28/8 31/29/8 +f 30/30/8 28/31/8 31/29/8 +f 28/31/8 27/27/8 31/29/8 +o Left +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 0.875000 0.500000 +v 0.000000 1.000000 0.500000 +vt 1.000000 0.000000 +vt 1.000000 0.875000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.0000 0.0000 1.0000 +s off +f 33/32/9 35/33/9 36/34/9 +f 34/35/9 32/36/9 36/34/9 +f 32/36/9 33/32/9 36/34/9 +o Back +v 0.500000 0.000000 0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 0.875000 0.500000 +v 0.500000 0.875000 -0.500000 +vt 1.000000 0.000000 +vt 0.000000 0.875000 +vt 0.000000 0.000000 +vt 1.000000 0.875000 +vn 1.0000 0.0000 0.0000 +s off +f 38/37/10 39/38/10 37/39/10 +f 38/37/10 40/40/10 39/38/10 +o Bottom +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vn 0.0000 -1.0000 0.0000 +s off +f 43/41/11 42/42/11 41/43/11 +f 43/41/11 44/44/11 42/42/11 +o Front +v -0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v -0.500000 0.250000 0.375000 +v -0.500000 0.250000 -0.375000 +v -0.500000 0.875000 0.375000 +v -0.500000 0.875000 -0.375000 +vt 0.000000 1.000000 +vt 0.125000 0.250000 +vt 0.125000 0.875000 +vt 0.875000 0.250000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.875000 0.875000 +vn -1.0000 0.0000 0.0000 +s off +f 47/45/12 50/46/12 52/47/12 +f 49/48/12 46/49/12 45/50/12 +f 48/51/12 49/48/12 45/50/12 +f 47/45/12 51/52/12 48/51/12 +f 47/45/12 46/49/12 50/46/12 +f 49/48/12 50/46/12 46/49/12 +f 48/51/12 51/52/12 49/48/12 +f 47/45/12 52/47/12 51/52/12 diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe2070788c793536e5cf6331ad6a7275c507d7 GIT binary patch literal 3669 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 gn2xwZ9r*|B?j|cNk;4pJ8bKgUHC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png.mcmeta new file mode 100644 index 000000000..df9cfce6e --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_belt.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": { } +}