From dd40334a61b043334c9d0255fdd08de4fb476fa0 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 29 Nov 2019 10:06:03 +0100 Subject: [PATCH] PC swap - Started work on Belt Tunnels and Crafters --- .../java/com/simibubi/create/AllBlocks.java | 10 +- .../com/simibubi/create/AllTileEntities.java | 11 +- .../com/simibubi/create/CreateConfig.java | 1 + .../crafter/MechanicalCrafterBlock.java | 61 ++++ .../crafter/MechanicalCrafterTileEntity.java | 12 + .../MechanicalCrafterTileEntityRenderer.java | 35 ++ .../contraptions/relays/belt/BeltBlock.java | 17 +- .../relays/belt/BeltSupportBlock.java | 35 -- .../relays/belt/BeltTunnelBlock.java | 147 +++++++++ .../relays/belt/BeltTunnelTileEntity.java | 30 ++ .../belt/BeltTunnelTileEntityRenderer.java | 55 ++++ .../create/blockstates/belt_support.json | 5 - .../create/blockstates/belt_tunnel.json | 16 + .../resources/assets/create/lang/en_us.json | 3 +- .../block/belt/diagonal_casing_top.json | 1 - .../create/models/block/belt_support.json | 36 -- .../block/belt_tunnel/belttunnel_flap.json | 73 +++++ .../models/block/belt_tunnel/cross.json | 187 +++++++++++ .../create/models/block/belt_tunnel/item.json | 307 ++++++++++++++++++ .../models/block/belt_tunnel/straight.json | 153 +++++++++ .../models/block/belt_tunnel/t_left.json | 173 ++++++++++ .../models/block/belt_tunnel/t_right.json | 173 ++++++++++ .../models/block/belt_tunnel/window.json | 153 +++++++++ .../create/models/item/belt_support.json | 15 - .../create/models/item/belt_tunnel.json | 3 + .../create/textures/block/belttunnel.png | Bin 0 -> 1530 bytes .../textures/block/windowed_belttunnel.png | Bin 0 -> 1399 bytes 27 files changed, 1613 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntityRenderer.java delete mode 100644 src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltSupportBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntityRenderer.java delete mode 100644 src/main/resources/assets/create/blockstates/belt_support.json create mode 100644 src/main/resources/assets/create/blockstates/belt_tunnel.json delete mode 100644 src/main/resources/assets/create/models/block/belt_support.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/belttunnel_flap.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/cross.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/item.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/straight.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/t_left.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/t_right.json create mode 100644 src/main/resources/assets/create/models/block/belt_tunnel/window.json delete mode 100644 src/main/resources/assets/create/models/item/belt_support.json create mode 100644 src/main/resources/assets/create/models/item/belt_tunnel.json create mode 100644 src/main/resources/assets/create/textures/block/belttunnel.png create mode 100644 src/main/resources/assets/create/textures/block/windowed_belttunnel.png diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 6ef95116a..28d8db153 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -30,6 +30,7 @@ import com.simibubi.create.modules.contraptions.receivers.constructs.RotationCha import com.simibubi.create.modules.contraptions.receivers.constructs.TranslationChassisBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.mounted.CartAssemblerBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.mounted.CartAssemblerBlock.MinecartAnchorBlock; +import com.simibubi.create.modules.contraptions.receivers.crafter.MechanicalCrafterBlock; import com.simibubi.create.modules.contraptions.redstone.ContactBlock; import com.simibubi.create.modules.contraptions.relays.ClutchBlock; import com.simibubi.create.modules.contraptions.relays.CogWheelBlock; @@ -40,7 +41,7 @@ import com.simibubi.create.modules.contraptions.relays.GearshiftBlock; import com.simibubi.create.modules.contraptions.relays.ShaftBlock; import com.simibubi.create.modules.contraptions.relays.ShaftHalfBlock; import com.simibubi.create.modules.contraptions.relays.belt.BeltBlock; -import com.simibubi.create.modules.contraptions.relays.belt.BeltSupportBlock; +import com.simibubi.create.modules.contraptions.relays.belt.BeltTunnelBlock; import com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockBlock; import com.simibubi.create.modules.curiosities.symmetry.block.CrossPlaneSymmetryBlock; import com.simibubi.create.modules.curiosities.symmetry.block.PlaneSymmetryBlock; @@ -106,7 +107,6 @@ public enum AllBlocks { GEARSHIFT(new GearshiftBlock()), GEARBOX(new GearboxBlock()), BELT(new BeltBlock()), - BELT_SUPPORT(new BeltSupportBlock()), BELT_PULLEY(new RenderUtilityAxisBlock()), BELT_ANIMATION(new RenderUtilityBlock()), MOTOR(new MotorBlock()), @@ -124,7 +124,9 @@ public enum AllBlocks { MECHANICAL_MIXER_POLE(new RenderUtilityBlock()), MECHANICAL_MIXER_HEAD(new RenderUtilityBlock()), BASIN(new BasinBlock()), - + MECHANICAL_CRAFTER(new MechanicalCrafterBlock()), + MECHANICAL_CRAFTER_LID(new MechanicalCrafterBlock.Lid()), + MECHANICAL_PISTON(new MechanicalPistonBlock(false)), STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)), MECHANICAL_PISTON_HEAD(new MechanicalPistonHeadBlock()), @@ -150,6 +152,8 @@ public enum AllBlocks { EXTRACTOR(new ExtractorBlock()), LINKED_EXTRACTOR(new LinkedExtractorBlock()), BELT_FUNNEL(new BeltFunnelBlock()), + BELT_TUNNEL(new BeltTunnelBlock()), + BELT_TUNNEL_FLAP(new RenderUtilityBlock()), ENTITY_DETECTOR(new EntityDetectorBlock()), PULSE_REPEATER(new PulseRepeaterBlock()), FLEXPEATER(new FlexpeaterBlock()), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 81c136b9b..2c1466442 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -29,6 +29,7 @@ import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalB import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntityRenderer; +import com.simibubi.create.modules.contraptions.receivers.crafter.MechanicalCrafterTileEntity; import com.simibubi.create.modules.contraptions.relays.ClutchTileEntity; import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntity; import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntityRenderer; @@ -39,6 +40,8 @@ import com.simibubi.create.modules.contraptions.relays.ShaftTileEntity; import com.simibubi.create.modules.contraptions.relays.SplitShaftTileEntityRenderer; import com.simibubi.create.modules.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.modules.contraptions.relays.belt.BeltTileEntityRenderer; +import com.simibubi.create.modules.contraptions.relays.belt.BeltTunnelTileEntity; +import com.simibubi.create.modules.contraptions.relays.belt.BeltTunnelTileEntityRenderer; import com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockTileEntity; import com.simibubi.create.modules.logistics.block.LinkedTileEntityRenderer; import com.simibubi.create.modules.logistics.block.RedstoneBridgeTileEntity; @@ -96,9 +99,13 @@ public enum AllTileEntities { CLUTCH(ClutchTileEntity::new, AllBlocks.CLUTCH), GEARSHIFT(GearshiftTileEntity::new, AllBlocks.GEARSHIFT), BELT(BeltTileEntity::new, AllBlocks.BELT), + BELT_TUNNEL(BeltTunnelTileEntity::new, AllBlocks.BELT_TUNNEL), MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON), MECHANICAL_BEARING(MechanicalBearingTileEntity::new, AllBlocks.MECHANICAL_BEARING), - CHASSIS(ChassisTileEntity::new, AllBlocks.ROTATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS, + CHASSIS( + ChassisTileEntity::new, + AllBlocks.ROTATION_CHASSIS, + AllBlocks.TRANSLATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS_SECONDARY), DRILL(DrillTileEntity::new, AllBlocks.DRILL), SAW(SawTileEntity::new, AllBlocks.SAW), @@ -109,6 +116,7 @@ public enum AllTileEntities { MECHANICAL_PRESS(MechanicalPressTileEntity::new, AllBlocks.MECHANICAL_PRESS), MECHANICAL_MIXER(MechanicalMixerTileEntity::new, AllBlocks.MECHANICAL_MIXER), BASIN(BasinTileEntity::new, AllBlocks.BASIN), + MECHANICAL_CRAFTER(MechanicalCrafterTileEntity::new, AllBlocks.MECHANICAL_CRAFTER), // Logistics REDSTONE_BRIDGE(RedstoneBridgeTileEntity::new, AllBlocks.REDSTONE_BRIDGE), @@ -182,6 +190,7 @@ public enum AllTileEntities { bind(LinkedExtractorTileEntity.class, new LinkedExtractorTileEntityRenderer()); bind(ExtractorTileEntity.class, new ExtractorTileEntityRenderer()); bind(BeltFunnelTileEntity.class, new BeltFunnelTileEntityRenderer()); + bind(BeltTunnelTileEntity.class, new BeltTunnelTileEntityRenderer()); bind(EntityDetectorTileEntity.class, new EntityDetectorTileEntityRenderer()); bind(MechanicalPressTileEntity.class, new MechanicalPressTileEntityRenderer()); bind(FlexpeaterTileEntity.class, new FlexpeaterTileEntityRenderer()); diff --git a/src/main/java/com/simibubi/create/CreateConfig.java b/src/main/java/com/simibubi/create/CreateConfig.java index 8d6cb1ed7..8879ee984 100644 --- a/src/main/java/com/simibubi/create/CreateConfig.java +++ b/src/main/java/com/simibubi/create/CreateConfig.java @@ -436,6 +436,7 @@ public class CreateConfig { case ENCASED_FAN: case MECHANICAL_MIXER: case MECHANICAL_BEARING: + case MECHANICAL_CRAFTER: return 8; case WATER_WHEEL: diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterBlock.java new file mode 100644 index 000000000..7b80382d6 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterBlock.java @@ -0,0 +1,61 @@ +package com.simibubi.create.modules.contraptions.receivers.crafter; + +import com.simibubi.create.foundation.block.IWithTileEntity; +import com.simibubi.create.foundation.block.RenderUtilityBlock; +import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +public class MechanicalCrafterBlock extends DirectionalKineticBlock + implements IWithTileEntity { + + public static final DirectionProperty OUTPUT = BlockStateProperties.HORIZONTAL_FACING; + + public MechanicalCrafterBlock() { + super(Properties.from(Blocks.GOLD_BLOCK)); + } + + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(OUTPUT)); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new MechanicalCrafterTileEntity(); + } + + @Override + protected boolean hasStaticPart() { + return true; + } + + @Override + public boolean hasCogsTowards(World world, BlockPos pos, BlockState state, Direction face) { + return state.get(FACING).getAxis() != face.getAxis(); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(FACING).getAxis(); + } + + public static class Lid extends RenderUtilityBlock { + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(BlockStateProperties.FACING)); + } + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntity.java new file mode 100644 index 000000000..52551f624 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntity.java @@ -0,0 +1,12 @@ +package com.simibubi.create.modules.contraptions.receivers.crafter; + +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; + +public class MechanicalCrafterTileEntity extends KineticTileEntity { + + public MechanicalCrafterTileEntity() { + super(AllTileEntities.MECHANICAL_CRAFTER.type); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntityRenderer.java new file mode 100644 index 000000000..d1a41da88 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/crafter/MechanicalCrafterTileEntityRenderer.java @@ -0,0 +1,35 @@ +package com.simibubi.create.modules.contraptions.receivers.crafter; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.TessellatorHelper; +import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.state.properties.BlockStateProperties; + +public class MechanicalCrafterTileEntityRenderer extends TileEntityRenderer { + + @Override + public void render(MechanicalCrafterTileEntity tileEntityIn, double x, double y, double z, float partialTicks, + int destroyStage) { + super.render(tileEntityIn, x, y, z, partialTicks, destroyStage); + + TessellatorHelper.prepareFastRender(); + TessellatorHelper.begin(DefaultVertexFormats.BLOCK); + renderTileEntityFast(tileEntityIn, x, y, z, partialTicks, destroyStage, Tessellator.getInstance().getBuffer()); + TessellatorHelper.draw(); + } + + @Override + public void renderTileEntityFast(MechanicalCrafterTileEntity te, double x, double y, double z, float partialTicks, + int destroyStage, BufferBuilder buffer) { + BlockState renderedState = AllBlocks.SHAFTLESS_COGWHEEL.get().getDefaultState().with(BlockStateProperties.AXIS, + te.getBlockState().get(BlockStateProperties.FACING).getAxis()); + KineticTileEntityRenderer.renderRotatingKineticBlock(te, getWorld(), renderedState, x, y, z, buffer); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java index f08081956..20ae90803 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java @@ -90,7 +90,7 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt public boolean isFlammable(BlockState state, IBlockReader world, BlockPos pos, Direction face) { return false; } - + @Override public void onLanded(IBlockReader worldIn, Entity entityIn) { super.onLanded(worldIn, entityIn); @@ -150,6 +150,7 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt @Override public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + updateNeighbouringTunnel(worldIn, pos, state); withTileEntityDo(worldIn, pos, te -> { te.attachmentTracker.findAttachments(te); }); @@ -235,7 +236,7 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt if (state.get(CASING)) { if (world.isRemote) return ActionResultType.SUCCESS; - world.setBlockState(context.getPos(), state.with(CASING, false), 2); + world.setBlockState(context.getPos(), state.with(CASING, false), 3); if (!player.isCreative()) player.inventory.placeItemBackInInventory(world, new ItemStack(AllBlocks.LOGISTICAL_CASING.block)); return ActionResultType.SUCCESS; @@ -325,7 +326,9 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt return; if (state.getBlock() == newState.getBlock()) return; + updateNeighbouringTunnel(worldIn, pos, state); + // Destroy chain boolean endWasDestroyed = state.get(PART) == Part.END; TileEntity tileEntity = worldIn.getTileEntity(pos); if (tileEntity == null) @@ -387,6 +390,16 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt } + private void updateNeighbouringTunnel(World world, BlockPos pos, BlockState beltState) { + boolean isEnd = beltState.get(PART) != Part.END; + if (isEnd && beltState.get(PART) != Part.START) + return; + int offset = isEnd ? -1 : 1; + BlockPos tunnelPos = pos.offset(beltState.get(HORIZONTAL_FACING), offset).up(); + if (AllBlocks.BELT_TUNNEL.typeOf(world.getBlockState(tunnelPos))) + BeltTunnelBlock.updateTunnel(world, tunnelPos); + } + public enum Slope implements IStringSerializable { HORIZONTAL, UPWARD, DOWNWARD, VERTICAL; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltSupportBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltSupportBlock.java deleted file mode 100644 index 447fdd373..000000000 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltSupportBlock.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.simibubi.create.modules.contraptions.relays.belt; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; -import net.minecraft.world.IBlockReader; - -public class BeltSupportBlock extends Block { - - public static final VoxelShape SHAPE = makeCuboidShape(0, 0, 0, 16, 27, 16); - - public BeltSupportBlock() { - super(Properties.from(Blocks.ANDESITE)); - } - - @Override - public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return SHAPE; - } - - @Override - public VoxelShape getRenderShape(BlockState state, IBlockReader worldIn, BlockPos pos) { - return VoxelShapes.fullCube(); - } - - @Override - public VoxelShape getRaytraceShape(BlockState state, IBlockReader worldIn, BlockPos pos) { - return getRenderShape(state, worldIn, pos); - } - -} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelBlock.java new file mode 100644 index 000000000..6c4aff83f --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelBlock.java @@ -0,0 +1,147 @@ +package com.simibubi.create.modules.contraptions.relays.belt; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.modules.contraptions.relays.belt.BeltBlock.Slope; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.IProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public class BeltTunnelBlock extends Block { + + public static final IProperty SHAPE = EnumProperty.create("shape", Shape.class); + public static final IProperty HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; + + public BeltTunnelBlock() { + super(Properties.from(Blocks.GOLD_BLOCK)); + setDefaultState(getDefaultState().with(SHAPE, Shape.STRAIGHT)); + } + + public enum Shape implements IStringSerializable { + STRAIGHT, WINDOW, T_LEFT, T_RIGHT, CROSS; + + @Override + public String getName() { + return Lang.asId(name()); + } + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new BeltTunnelTileEntity(); + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + BlockState blockState = worldIn.getBlockState(pos.down()); + if (!AllBlocks.BELT.typeOf(blockState)) + return false; + if (blockState.get(BeltBlock.SLOPE) != Slope.HORIZONTAL) + return false; + if (!blockState.get(BeltBlock.CASING)) + return false; + return true; + } + + @Override + public boolean canRenderInLayer(BlockState state, BlockRenderLayer layer) { + if (state.get(SHAPE) == Shape.WINDOW) + return layer == BlockRenderLayer.CUTOUT_MIPPED; + return super.canRenderInLayer(state, layer); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return getTunnelState(context.getWorld(), context.getPos()); + } + + @Override + public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, + BlockPos currentPos, BlockPos facingPos) { + return getTunnelState(worldIn, currentPos); + } + + public static void updateTunnel(World world, BlockPos pos) { + BlockState tunnel = world.getBlockState(pos); + BlockState newTunnel = getTunnelState(world, pos); + if (tunnel != newTunnel) + world.setBlockState(pos, newTunnel, 3); + } + + private static BlockState getTunnelState(IBlockReader reader, BlockPos pos) { + BlockState state = AllBlocks.BELT_TUNNEL.get().getDefaultState(); + + BlockState belt = reader.getBlockState(pos.down()); + if (AllBlocks.BELT.typeOf(belt)) + state = state.with(HORIZONTAL_AXIS, belt.get(BeltBlock.HORIZONTAL_FACING).getAxis()); + Axis axis = state.get(HORIZONTAL_AXIS); + + // T and Cross + Direction left = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis).rotateY(); + BlockState leftState = reader.getBlockState(pos.offset(left).down()); + boolean onLeft = AllBlocks.BELT.typeOf(leftState) + && leftState.get(BeltBlock.HORIZONTAL_FACING).getAxis() != axis; + BlockState rightState = reader.getBlockState(pos.offset(left.getOpposite()).down()); + boolean onRight = AllBlocks.BELT.typeOf(rightState) + && rightState.get(BeltBlock.HORIZONTAL_FACING).getAxis() != axis; + + if (onLeft && onRight) + state = state.with(SHAPE, Shape.CROSS); + else if (onLeft) + state = state.with(SHAPE, Shape.T_LEFT); + else if (onRight) + state = state.with(SHAPE, Shape.T_RIGHT); + + if (state.get(SHAPE) == Shape.STRAIGHT) { + Direction fw = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + if (AllBlocks.BELT_TUNNEL.typeOf(reader.getBlockState(pos.offset(fw))) + && AllBlocks.BELT_TUNNEL.typeOf(reader.getBlockState(pos.offset(fw.getOpposite())))) + state = state.with(SHAPE, Shape.WINDOW); + } + + return state; + } + + @Override + public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isRemote) + return; + + if (fromPos.equals(pos.down())) { + if (!isValidPosition(state, worldIn, pos)) { + worldIn.destroyBlock(pos, true); + return; + } + } + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(HORIZONTAL_AXIS, SHAPE); + super.fillStateContainer(builder); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntity.java new file mode 100644 index 000000000..6c3e91d3f --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntity.java @@ -0,0 +1,30 @@ +package com.simibubi.create.modules.contraptions.relays.belt; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.SyncedTileEntity; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; + +public class BeltTunnelTileEntity extends SyncedTileEntity { + + public BeltTunnelTileEntity() { + super(AllTileEntities.BELT_TUNNEL.type); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + + if (AllBlocks.BELT.typeOf(world.getBlockState(pos.down()))) { + TileEntity teBelow = world.getTileEntity(pos.down()); + if (teBelow != null) + return teBelow.getCapability(cap, Direction.UP); + } + + return super.getCapability(cap, side); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntityRenderer.java new file mode 100644 index 000000000..4ae9a3d86 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTunnelTileEntityRenderer.java @@ -0,0 +1,55 @@ +package com.simibubi.create.modules.contraptions.relays.belt; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.utility.SuperByteBuffer; +import com.simibubi.create.modules.contraptions.relays.belt.BeltTunnelBlock.Shape; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.model.animation.TileEntityRendererFast; + +public class BeltTunnelTileEntityRenderer extends TileEntityRendererFast { + + @Override + public void renderTileEntityFast(BeltTunnelTileEntity te, double x, double y, double z, float partialTicks, + int destroyStage, BufferBuilder buffer) { + BlockState flapState = AllBlocks.BELT_TUNNEL_FLAP.get().getDefaultState(); + BlockState tunnelState = te.getBlockState(); + SuperByteBuffer flapBuffer = CreateClient.bufferCache.renderGenericBlockModel(flapState); + BlockPos pos = te.getPos(); + World world = getWorld(); + + for (Direction direction : Direction.values()) { + // TODO: move flap presence to TE + if (direction.getAxis().isVertical()) + continue; + if (AllBlocks.BELT_TUNNEL.typeOf(world.getBlockState(pos.offset(direction)))) + continue; + if (direction.getAxis() != tunnelState.get(BlockStateProperties.HORIZONTAL_AXIS)) { + boolean positive = direction.getAxisDirection() == AxisDirection.POSITIVE; + Shape shape = tunnelState.get(BeltTunnelBlock.SHAPE); + if (shape == Shape.STRAIGHT || shape == Shape.WINDOW) + continue; + if (positive && shape == Shape.T_LEFT) + continue; + if (!positive && shape == Shape.T_RIGHT) + continue; + } + + // get flap angle + + flapBuffer.rotateCentered(Axis.Y, (float) (direction.getHorizontalAngle() / 180f * Math.PI)); + flapBuffer.translate(x, y, z); + flapBuffer.light(te.getBlockState().getPackedLightmapCoords(world, pos)).renderInto(buffer); + } + + } + +} diff --git a/src/main/resources/assets/create/blockstates/belt_support.json b/src/main/resources/assets/create/blockstates/belt_support.json deleted file mode 100644 index 7d6ec4d90..000000000 --- a/src/main/resources/assets/create/blockstates/belt_support.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "create:block/belt_support" } - } -} diff --git a/src/main/resources/assets/create/blockstates/belt_tunnel.json b/src/main/resources/assets/create/blockstates/belt_tunnel.json new file mode 100644 index 000000000..25965e395 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/belt_tunnel.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "variants": { + "shape": { + "straight": { "model": "create:block/belt_tunnel/straight" }, + "window": { "model": "create:block/belt_tunnel/window" }, + "t_left": { "model": "create:block/belt_tunnel/t_left" }, + "t_right": { "model": "create:block/belt_tunnel/t_right" }, + "cross": { "model": "create:block/belt_tunnel/cross" } + }, + "axis": { + "x": { }, + "z": { "y": 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 2daf1499c..f17f472a2 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -68,7 +68,6 @@ "block.create.harvester": "Mechanical Harvester", "block.create.saw": "Mechanical Saw", "block.create.water_wheel": "Water Wheel", - "block.create.belt_support": "Belt Support", "block.create.mechanical_press": "Mechanical Press", "block.create.mechanical_mixer": "Mechanical Mixer", "block.create.basin": "Basin", @@ -96,9 +95,11 @@ "block.create.logistical_index": "Logistical Index", "block.create.logisticians_table": "Logisticians Table", "block.create.package_funnel": "Package Funnel", + "block.create.belt_tunnel": "Conveyor Tunnel", "block.create.tiled_glass": "Tiled Glass", "block.create.tiled_glass_pane": "Tiled Glass Pane", + "block.create.framed_glass": "Framed Glass", "block.create.window_in_a_block": "Block with Glass Pane", "block.create.andesite_bricks": "Andesite Bricks", diff --git a/src/main/resources/assets/create/models/block/belt/diagonal_casing_top.json b/src/main/resources/assets/create/models/block/belt/diagonal_casing_top.json index 563fa1f8e..c8dd0452c 100644 --- a/src/main/resources/assets/create/models/block/belt/diagonal_casing_top.json +++ b/src/main/resources/assets/create/models/block/belt/diagonal_casing_top.json @@ -62,7 +62,6 @@ "faces": { "north": {"uv": [0, 6, 16, 11], "texture": "#2"}, "east": {"uv": [4, 5.9, 10, 11], "texture": "#2"}, - "south": {"uv": [0, 0, 16, 5], "texture": "#missing"}, "west": {"uv": [4, 5.9, 10, 11], "texture": "#2"}, "up": {"uv": [0, 2, 16, 8], "texture": "#2"}, "down": {"uv": [4, 0, 10, 16], "rotation": 90, "texture": "#2"} diff --git a/src/main/resources/assets/create/models/block/belt_support.json b/src/main/resources/assets/create/models/block/belt_support.json deleted file mode 100644 index 5b9d7e2a5..000000000 --- a/src/main/resources/assets/create/models/block/belt_support.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/block", - "textures": { - "brass_casing_side": "create:block/brass_casing_side", - "brass_casing": "create:block/brass_casing", - "belt_support_side": "create:block/brass_casing_side", - "particle": "create:block/brass_casing_side" - }, - "elements": [ - { - "name": "Cube", - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "north": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 16 ] }, - "east": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 16 ] }, - "south": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 16 ] }, - "west": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 16 ] }, - "down": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] } - } - }, - { - "name": "Cube", - "from": [ -0.03125, 16, -0.03125 ], - "to": [ 16.03125, 27, 16.03125 ], - "faces": { - "north": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 11 ] }, - "east": { "texture": "#belt_support_side", "uv": [ 0, 0, 16, 11 ] }, - "south": { "texture": "#brass_casing_side", "uv": [ 0, 0, 16, 11 ] }, - "west": { "texture": "#belt_support_side", "uv": [ 0, 0, 16, 11 ] }, - "up": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/belttunnel_flap.json b/src/main/resources/assets/create/models/block/belt_tunnel/belttunnel_flap.json new file mode 100644 index 000000000..a0a7e7bda --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/belttunnel_flap.json @@ -0,0 +1,73 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "F1", + "from": [14.5, -2.5, 2], + "to": [15.5, 8.5, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F2", + "from": [14.5, -2.5, 5], + "to": [15.5, 8.5, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F3", + "from": [14.5, -2.5, 8], + "to": [15.5, 8.5, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F4", + "from": [14.5, -2.5, 11], + "to": [15.5, 8.5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Flap", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/cross.json b/src/main/resources/assets/create/models/block/belt_tunnel/cross.json new file mode 100644 index 000000000..695d6fab5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/cross.json @@ -0,0 +1,187 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "east": {"uv": [16, 0, 10, 1], "texture": "#0"}, + "west": {"uv": [16, 0, 10, 1], "texture": "#0"}, + "up": {"uv": [1, 15, 7, 9], "rotation": 270, "texture": "#0"}, + "down": {"uv": [7, 9, 1, 15], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontRight", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "texture": "#0"} + } + }, + { + "name": "BackRight", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -5, 15], + "to": [1, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "south": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9.5, 15, 9, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [15, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "south": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [15, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "south": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -5, 0], + "to": [1, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "south": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9.5, 15, 9, 16], "texture": "#0"} + } + }, + { + "name": "FrontLeft", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontTop", + "from": [0, 8, 0], + "to": [16, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"}, + "east": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "south": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "west": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "up": {"uv": [7, 16, 8, 8], "rotation": 270, "texture": "#0"}, + "down": {"uv": [16, 2.5, 8, 3.5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [0, 8, 2], + "to": [2, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 24]}, + "faces": { + "north": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "east": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "south": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [15, 2.5, 9, 6.5], "texture": "#0"}, + "up": {"uv": [1, 8, 0, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 6.5, 16, 5.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [14, 8, 2], + "to": [16, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 24]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "east": {"uv": [9, 2.5, 15, 6.5], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 8, 1, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [0, 8, 14], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "east": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "south": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"}, + "west": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "up": {"uv": [0, 16, 1, 8], "rotation": 270, "texture": "#0"}, + "down": {"uv": [16, 5.5, 8, 6.5], "rotation": 180, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "belttunnel", + "origin": [8, 8, 8], + "children": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/item.json b/src/main/resources/assets/create/models/block/belt_tunnel/item.json new file mode 100644 index 000000000..d25e2ab05 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/item.json @@ -0,0 +1,307 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "LeftWall", + "from": [2, -3, 0], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10, 1, 16, 2], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, -24, 8]}, + "faces": { + "north": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "south": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "up": {"uv": [1, 9, 7, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [1, 9, 7, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "RightWall", + "from": [2, -3, 14], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10, 1, 16, 2], "texture": "#0"} + } + }, + { + "name": "LeftRail", + "from": [0, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#0"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#0"} + } + }, + { + "name": "RightRail", + "from": [0, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 23]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#0"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#0"} + } + }, + { + "name": "FrontRight", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackRight", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontLeft", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "FrontTop", + "from": [0, 8, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "west": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "up": {"uv": [7, 8, 8, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 2.5, 16, 3.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [14, 8, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "east": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 8, 1, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F1", + "from": [14.5, -2.5, 2], + "to": [15.5, 8.5, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F2", + "from": [0.5, -2.5, 2], + "to": [1.5, 8.5, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [-38.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F2", + "from": [14.5, -2.5, 5], + "to": [15.5, 8.5, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F3", + "from": [0.5, -2.5, 5], + "to": [1.5, 8.5, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [-38.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F3", + "from": [14.5, -2.5, 8], + "to": [15.5, 8.5, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F4", + "from": [0.5, -2.5, 8], + "to": [1.5, 8.5, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [-38.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F4", + "from": [14.5, -2.5, 11], + "to": [15.5, 8.5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "F5", + "from": [0.5, -2.5, 11], + "to": [1.5, 8.5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-38.5, -7.5, 8]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 9], "texture": "#0"}, + "east": {"uv": [1, 4, 2.5, 9], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 9], "texture": "#0"}, + "west": {"uv": [1, 4, 2.5, 9], "texture": "#0"}, + "up": {"uv": [1, 4, 2.5, 4.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 4, 2.5, 4.5], "rotation": 270, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3.25, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "head": { + "rotation": [0, 90, 0] + }, + "fixed": { + "rotation": [0, 90, 0], + "translation": [0, 1.5, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + }, + { + "name": "Flap", + "origin": [8, 8, 8], + "children": [11, 12, 13, 14, 15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/straight.json b/src/main/resources/assets/create/models/block/belt_tunnel/straight.json new file mode 100644 index 000000000..95c507dfc --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/straight.json @@ -0,0 +1,153 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "LeftWall", + "from": [2, -3, 0], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10, 1, 16, 2], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, -24, 8]}, + "faces": { + "north": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "south": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "up": {"uv": [1, 9, 7, 15], "rotation": 180, "texture": "#0"}, + "down": {"uv": [1, 9, 7, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "RightWall", + "from": [2, -3, 14], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10, 1, 16, 2], "texture": "#0"} + } + }, + { + "name": "LeftRail", + "from": [0, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#0"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#0"} + } + }, + { + "name": "RightRail", + "from": [0, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 23]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#0"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#0"} + } + }, + { + "name": "FrontRight", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackRight", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontLeft", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "FrontTop", + "from": [0, 8, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "west": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "up": {"uv": [7, 8, 8, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 2.5, 16, 3.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [14, 8, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "east": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 8, 1, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 270, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/t_left.json b/src/main/resources/assets/create/models/block/belt_tunnel/t_left.json new file mode 100644 index 000000000..5b112fff0 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/t_left.json @@ -0,0 +1,173 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "south": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "up": {"uv": [1, 9, 7, 15], "texture": "#0"}, + "down": {"uv": [1, 9, 7, 15], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "RightWall", + "from": [2, -3, 0], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10, 1, 16, 2], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "RightRail", + "from": [0, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "east": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#0"}, + "west": {"uv": [9, 13, 9.5, 14], "texture": "#0"}, + "up": {"uv": [8, 7, 16, 7.5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontRight", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackRight", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -5, 15], + "to": [1, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "east": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [15, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "east": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, + "west": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontLeft", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} + } + }, + { + "name": "FrontTop", + "from": [14, 8, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "east": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [7, 8, 8, 16], "texture": "#0"}, + "down": {"uv": [8, 2.5, 16, 3.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [2, 8, 14], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, -24, 8]}, + "faces": { + "north": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "east": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "south": {"uv": [9, 2.5, 15, 6.5], "texture": "#0"}, + "west": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 8, 1, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [0, 8, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "south": {"uv": [9, 8, 10, 12], "texture": "#0"}, + "west": {"uv": [8, 2.5, 16, 6.5], "texture": "#0"}, + "up": {"uv": [0, 8, 1, 16], "texture": "#0"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 90, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "belttunnel", + "origin": [8, 8, 8], + "children": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/t_right.json b/src/main/resources/assets/create/models/block/belt_tunnel/t_right.json new file mode 100644 index 000000000..9a5551de1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/t_right.json @@ -0,0 +1,173 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belttunnel", + "particle": "create:block/belttunnel" + }, + "elements": [ + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [16, 0, 10, 1], "texture": "#0"}, + "south": {"uv": [16, 0, 10, 1], "texture": "#0"}, + "up": {"uv": [1, 15, 7, 9], "texture": "#0"}, + "down": {"uv": [7, 9, 1, 15], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "RightWall", + "from": [2, -3, 14], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [16, 7.5, 10, 16], "texture": "#0"}, + "south": {"uv": [16, 7.5, 10, 16], "texture": "#0"}, + "up": {"uv": [10, 2, 16, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "RightRail", + "from": [0, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [16, 6.5, 8, 7.5], "texture": "#0"}, + "east": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "south": {"uv": [16, 6.5, 8, 7.5], "texture": "#0"}, + "west": {"uv": [9.5, 13, 9, 14], "texture": "#0"}, + "up": {"uv": [8, 7.5, 16, 7], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontRight", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackRight", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [0, -5, 0], + "to": [1, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "east": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "west": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackLeft", + "from": [15, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "east": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, + "west": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "FrontLeft", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, + "south": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10, 10.5, 9, 16], "texture": "#0"} + } + }, + { + "name": "FrontTop", + "from": [14, 8, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "east": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"}, + "south": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "west": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "up": {"uv": [7, 16, 8, 8], "texture": "#0"}, + "down": {"uv": [16, 2.5, 8, 3.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [2, 8, 0], + "to": [14, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [-8, -24, 8]}, + "faces": { + "north": {"uv": [15, 2.5, 9, 6.5], "texture": "#0"}, + "east": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "south": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "west": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "up": {"uv": [1, 8, 0, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 6.5, 16, 5.5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "BackTop", + "from": [0, 8, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 8, 9, 12], "texture": "#0"}, + "east": {"uv": [8, 0, 0, 4], "texture": "#0"}, + "south": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, + "west": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"}, + "up": {"uv": [0, 16, 1, 8], "texture": "#0"}, + "down": {"uv": [16, 5.5, 8, 6.5], "rotation": 90, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "belttunnel", + "origin": [8, 8, 8], + "children": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/window.json b/src/main/resources/assets/create/models/block/belt_tunnel/window.json new file mode 100644 index 000000000..ddb0cfd8c --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_tunnel/window.json @@ -0,0 +1,153 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "6": "create:block/windowed_belttunnel", + "particle": "create:block/windowed_belttunnel" + }, + "elements": [ + { + "name": "LeftWall", + "from": [2, -3, 0], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#6"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#6"}, + "up": {"uv": [10, 1, 16, 2], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "TopPiece", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, -24, 8]}, + "faces": { + "north": {"uv": [10, 0, 16, 1], "texture": "#6"}, + "south": {"uv": [10, 0, 16, 1], "texture": "#6"}, + "up": {"uv": [1, 9, 7, 15], "rotation": 180, "texture": "#6"}, + "down": {"uv": [1, 9, 7, 15], "rotation": 270, "texture": "#6"} + } + }, + { + "name": "RightWall", + "from": [2, -3, 14], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [10, 7.5, 16, 16], "texture": "#6"}, + "south": {"uv": [10, 7.5, 16, 16], "texture": "#6"}, + "up": {"uv": [10, 1, 16, 2], "texture": "#6"} + } + }, + { + "name": "LeftRail", + "from": [0, -5, 0], + "to": [16, -3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#6"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#6"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#6"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#6"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#6"} + } + }, + { + "name": "RightRail", + "from": [0, -5, 15], + "to": [16, -3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 23]}, + "faces": { + "north": {"uv": [8, 6.5, 16, 7.5], "texture": "#6"}, + "east": {"uv": [9, 13, 9.5, 14], "texture": "#6"}, + "south": {"uv": [8, 6.5, 16, 7.5], "texture": "#6"}, + "west": {"uv": [9, 15, 9.5, 16], "texture": "#6"}, + "up": {"uv": [8, 7, 16, 7.5], "texture": "#6"} + } + }, + { + "name": "FrontRight", + "from": [0, -3, 14], + "to": [2, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "BackRight", + "from": [14, -3, 14], + "to": [16, 8, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#6"} + } + }, + { + "name": "BackLeft", + "from": [14, -3, 0], + "to": [16, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "south": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "FrontLeft", + "from": [0, -3, 0], + "to": [2, 8, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "east": {"uv": [9, 10.5, 10, 16], "texture": "#6"}, + "south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#6"}, + "west": {"uv": [9, 10.5, 10, 16], "texture": "#6"} + } + }, + { + "name": "FrontTop", + "from": [0, 8, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#6"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#6"}, + "south": {"uv": [9, 8, 10, 12], "texture": "#6"}, + "west": {"uv": [8, 2.5, 16, 6.5], "texture": "#6"}, + "up": {"uv": [7, 8, 8, 16], "rotation": 180, "texture": "#6"}, + "down": {"uv": [8, 2.5, 16, 3.5], "rotation": 270, "texture": "#6"} + } + }, + { + "name": "BackTop", + "from": [14, 8, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [9, 8, 10, 12], "texture": "#6"}, + "east": {"uv": [8, 2.5, 16, 6.5], "texture": "#6"}, + "south": {"uv": [9, 8, 10, 12], "rotation": 180, "texture": "#6"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#6"}, + "up": {"uv": [0, 8, 1, 16], "rotation": 180, "texture": "#6"}, + "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 270, "texture": "#6"} + } + } + ], + "groups": [ + { + "name": "Cover", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/belt_support.json b/src/main/resources/assets/create/models/item/belt_support.json deleted file mode 100644 index 82774f10e..000000000 --- a/src/main/resources/assets/create/models/item/belt_support.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "parent": "create:block/belt_support", - "display": { - "gui": { - "rotation": [ 30, 225, 0 ], - "translation": [ 0, -2.25, 0], - "scale":[ 0.45, 0.45, 0.45 ] - }, - "fixed": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, -2.75, 0], - "scale":[ 0.5, 0.5, 0.5 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/belt_tunnel.json b/src/main/resources/assets/create/models/item/belt_tunnel.json new file mode 100644 index 000000000..4c5411cb6 --- /dev/null +++ b/src/main/resources/assets/create/models/item/belt_tunnel.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/belt_tunnel/item" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/belttunnel.png b/src/main/resources/assets/create/textures/block/belttunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef94125a2216b14d0bfcdcd9fcc157f50f447b8 GIT binary patch literal 1530 zcmVN2bZe?^J zG%heMGBNQWX_Wu~1$RkAK~z{rrB{hgTUQX}FH+GhkW$hG2?14EgQ3{i&kMG(O$>-Y zfh-`JmXrX-m;k{G*eu2=W=R5Rqel73>6|h5<#_>2iFEYdeRyWhJu`Rareb#TE*UX1 z`fU*&2Jh&Y9;u;Ge-#b8Z&SeW74g3cBgO(%R0{pttvuk{sK1(oz`=%_vKxJL9QROm z-9eevKFX|lX?xj0JIlTFI?+%6>`XLC+^=VB4CtVp-_7D zE(DO*FCIFZ*aatkF)yA&O)eZ@2tHz|;Fh5rOMM2)vx@ zpj5b*<#%yCoCjy@ulCX&f7^}Nr7jMb%t_qKgx!=}w9xoKbzT7jg#`>;R>Tzpu1bo{ zchT08nGQL?yKO%g8LP2orrl*L6R-=JlenACl72c#c$ut58-H3vMg+Y{5$id_Vu)D* z!=5Ud4Bq7(*3h%bdir(X8!5Q4Ks7xbtK+|at>+OtELFszsZJep58E#+Vm%j)jg8da z-cDAlm6!Q>x(rajSi}g18bV-I#J`WVN)fL-<=_QHtUGFIYNFQG)@u_eEMf%K37i-4 z>_nRsF~}7bvF@m$p+OX|*=)Sb4{{kUDq;k~&J`{yV%-r4w6(QeTY;MvvF->p(9+U! zZ2~tfV%-sH;QuJ_c(_KK=XyZxc|Z70F#qI-y!W|B-wVRO{U|ng*Bv1RC_+usc$pvM zG9VzF8KG3cumRM%@H=dEM@Rt_u-omt%nwoyup2lxcD-?y9M2JNmAvDb2VZ5*5NwbF z)PTieVSlBA7y%pDsDR z%RYv%K`zzWNFcdn<(zj&;{g_?Iw&-KkHRyZ@*RjVNg)6yFhonu6;Sa&fm7oUL7rh_ zR6zN`Z*iAEu-#>ilA&IT&zpHJnECjb7~Mi9%SSWV_t~f1A#gS}M5%~d92~`cbjE?Kk#v&0tJ*Gq@dipWl;(+R@FE~P=&`sKk4H% zH%3+eFHQjzDEDrurvQdehWQlmSiNeTVvIf-%ncJ9-BJX~9m|peI8ixGh0OGR_rByE zGNo5tETfYSSjx<*#zp0%=$wT|ZEXnx=R=7J{LPhqm7iqTky8L86o#nYBR>1my%z1# zDl=pTTH z<{$tS@Uhf|!g!IuRjQDHQGpXa@96iq3#zAj$6UZOwPdG&lT)CWD@Wx51YoPyMg?MX zzle%Jl;5{P8Y^n%rN2bZe?^J zG%heMGBNQWX_Wu~1oTNnK~z{rrB_>1TU8X!zvztPXrUslni&KhxM@?zgph;~AQxjZ z6xz~CYpvD-a!b=oNK#0+6fL*j7#%x4`0BGiz-b@#A6Wl@Z!Xuj!`kk1auSG~nQzY7 z=VX2BJKtJ+?-SRJ@sniY+UVOAxRgAhado7LMq>?>iX5kS=ndk-WnwJeKu#DA9J2uT zMq`bn1U$?}Xfr!NJNZG{yc?p8+XJ+5XNXD*AzE4JrALKf`hF!r&q`6g-%pPVG0IPU zq==jZxZQ5@csvK5l>ofq)8#llx*w&-OL1Di6`}_j28&qF^wUmmfOc8fllw!on)Xp) z<_s;*`RJRgZ8S36P$2-K4l5uTK3;apRy52kJ7}tW*D4hRX}R6fyR?3`3;-s>+u#kpLk0(+*rJku8+C-`J1|q zctfWqp1pEfWAai@)h5=pXlrYuo}M1^`~5t$)~OcYfZ4=Ih8{vOV2y3WaM zO{|I9+uNzDtE+AS_9jMREnvTiZ(QtFO$>4NCe}o)t*y#|zP>&lT9ed5wI)U~yt$xS z6Kf&}=W+kvAtu_i(fbar;uE#Rn4tclPA|HpyPQca4yyaqJyuLq|TrYGLDTu)wp zM`8Yp_f!n7H4#dHCJY1uJhUdM1tbKS32_CR4IpFteZ*=almHF{gFzlzlhgxyG81CE z0QX$50cubJ^nlOjV;*O66No{qjD-iJm}0V{R@+&z5UC!Jz?PO4>geb=^fW{aYAIt= z0M><jDyGG8vbg0r@QiU>(pU zzy%U-=FUq(;w26k!BTRI$#Qb1BjJpb}aq+n{r@k;(c=AEkppeRSx{e zWgH;dzf^W&8$A~-Co&xn9snyNek;%HfB>w7_$|-lQ(6FQ;fEFhI6x+6*+v1x3aRjz z0${tG?Io}XKs~>@;8xqJlK>nb0w7Wr8@m8$LJ@#OlH5svE&&4J0Gg+o030IVT(q&m z0pWpw;;i?;9$1`oC;^(Mh674Kc^j4W-?;=b4ds~~5TK`_1Wu%Q7O-`!yruwHclp!u zW`e0Jq^5v_n$S`LkVs9%x*uQs4ku{t=U+5%AAoh^$z}%ul|1sy>;nk1lmJ^O0;i-bw(gY@+A+MXoEd+^U5poRddmVtxey%|5P(=23lB)w`Hzga z=;S75(!%Gb%L4F412Q2xED(cO84C|wbOMqI{u>{oe*t^zJwrsT=llQw002ovPDHLk FV1l@6Yvup| literal 0 HcmV?d00001