From 1907e69c35d133ba70912ce49069e1d1090c45c9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 6 Jul 2020 22:09:35 +0200 Subject: [PATCH] Tilted belts - Mechanical belts can now connect vertical shafts together --- src/generated/resources/.cache/cache | 2 +- .../assets/create/blockstates/belt.json | 136 ++++++++++++++ .../java/com/simibubi/create/AllBlocks.java | 107 +++++------ .../structureMovement/StructureTransform.java | 166 ++++++++++++------ .../contraptions/relays/belt/BeltBlock.java | 19 +- .../relays/belt/BeltGenerator.java | 10 +- .../relays/belt/BeltRenderer.java | 90 ++++++---- .../contraptions/relays/belt/BeltShapes.java | 33 +++- .../belt/item/BeltConnectorHandler.java | 25 ++- .../relays/belt/item/BeltConnectorItem.java | 30 ++-- .../block/realityFunnel/BeltFunnelBlock.java | 2 +- .../models/block/belt/sideways_end.json | 47 +++++ .../models/block/belt/sideways_middle.json | 32 ++++ .../models/block/belt/sideways_start.json | 47 +++++ .../block/belt_casing/sideways_end.json | 5 + .../block/belt_casing/sideways_middle.json | 5 + .../block/belt_casing/sideways_pulley.json | 5 + .../block/belt_casing/sideways_start.json | 5 + 18 files changed, 592 insertions(+), 174 deletions(-) create mode 100644 src/main/resources/assets/create/models/block/belt/sideways_end.json create mode 100644 src/main/resources/assets/create/models/block/belt/sideways_middle.json create mode 100644 src/main/resources/assets/create/models/block/belt/sideways_start.json create mode 100644 src/main/resources/assets/create/models/block/belt_casing/sideways_end.json create mode 100644 src/main/resources/assets/create/models/block/belt_casing/sideways_middle.json create mode 100644 src/main/resources/assets/create/models/block/belt_casing/sideways_pulley.json create mode 100644 src/main/resources/assets/create/models/block/belt_casing/sideways_start.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 7a94afd4f..4354f9666 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -16,7 +16,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets\create\blockstates\andesite_bric 82bd82270aff7d51e9239680ef4dd7b5c899ceb0 assets\create\blockstates\andesite_cobblestone_wall.json 398922758a6219544e5b85c91c9cf8a543b437e5 assets\create\blockstates\andesite_pillar.json f9fa6aa530eb0891a74eadfbebc663172a57147a assets\create\blockstates\basin.json -96a4fae5883eda130f8ec1a57d34534f6d0793c4 assets\create\blockstates\belt.json +020a68d610b2fe298e5b0cee0dadfe8ac719c08c assets\create\blockstates\belt.json 9bbc9a2dc2428175ae0cadf7537ed6815e3e241d assets\create\blockstates\belt_funnel.json 40d10934934ea142d71fc6ce598b1455c3ad47b4 assets\create\blockstates\belt_observer.json 4325605fbdea60d5f54286c309c825bebcd74b95 assets\create\blockstates\belt_tunnel.json diff --git a/src/generated/resources/assets/create/blockstates/belt.json b/src/generated/resources/assets/create/blockstates/belt.json index d259d6504..456d72bf7 100644 --- a/src/generated/resources/assets/create/blockstates/belt.json +++ b/src/generated/resources/assets/create/blockstates/belt.json @@ -511,6 +511,142 @@ "model": "create:block/belt_casing/vertical_pulley", "x": 90, "y": 270 + }, + "casing=false,facing=north,part=start,slope=sideways": { + "model": "create:block/belt/sideways_end", + "x": 180, + "y": 180 + }, + "casing=true,facing=north,part=start,slope=sideways": { + "model": "create:block/belt_casing/sideways_start", + "x": 180, + "y": 180 + }, + "casing=false,facing=south,part=start,slope=sideways": { + "model": "create:block/belt/sideways_start" + }, + "casing=true,facing=south,part=start,slope=sideways": { + "model": "create:block/belt_casing/sideways_start" + }, + "casing=false,facing=west,part=start,slope=sideways": { + "model": "create:block/belt/sideways_end", + "x": 180, + "y": 90 + }, + "casing=true,facing=west,part=start,slope=sideways": { + "model": "create:block/belt_casing/sideways_start", + "x": 180, + "y": 90 + }, + "casing=false,facing=east,part=start,slope=sideways": { + "model": "create:block/belt/sideways_start", + "y": 270 + }, + "casing=true,facing=east,part=start,slope=sideways": { + "model": "create:block/belt_casing/sideways_start", + "y": 270 + }, + "casing=false,facing=north,part=middle,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "x": 180, + "y": 180 + }, + "casing=true,facing=north,part=middle,slope=sideways": { + "model": "create:block/belt_casing/sideways_middle", + "x": 180, + "y": 180 + }, + "casing=false,facing=south,part=middle,slope=sideways": { + "model": "create:block/belt/sideways_middle" + }, + "casing=true,facing=south,part=middle,slope=sideways": { + "model": "create:block/belt_casing/sideways_middle" + }, + "casing=false,facing=west,part=middle,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "x": 180, + "y": 90 + }, + "casing=true,facing=west,part=middle,slope=sideways": { + "model": "create:block/belt_casing/sideways_middle", + "x": 180, + "y": 90 + }, + "casing=false,facing=east,part=middle,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "y": 270 + }, + "casing=true,facing=east,part=middle,slope=sideways": { + "model": "create:block/belt_casing/sideways_middle", + "y": 270 + }, + "casing=false,facing=north,part=end,slope=sideways": { + "model": "create:block/belt/sideways_start", + "x": 180, + "y": 180 + }, + "casing=true,facing=north,part=end,slope=sideways": { + "model": "create:block/belt_casing/sideways_end", + "x": 180, + "y": 180 + }, + "casing=false,facing=south,part=end,slope=sideways": { + "model": "create:block/belt/sideways_end" + }, + "casing=true,facing=south,part=end,slope=sideways": { + "model": "create:block/belt_casing/sideways_end" + }, + "casing=false,facing=west,part=end,slope=sideways": { + "model": "create:block/belt/sideways_start", + "x": 180, + "y": 90 + }, + "casing=true,facing=west,part=end,slope=sideways": { + "model": "create:block/belt_casing/sideways_end", + "x": 180, + "y": 90 + }, + "casing=false,facing=east,part=end,slope=sideways": { + "model": "create:block/belt/sideways_end", + "y": 270 + }, + "casing=true,facing=east,part=end,slope=sideways": { + "model": "create:block/belt_casing/sideways_end", + "y": 270 + }, + "casing=false,facing=north,part=pulley,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "x": 180, + "y": 180 + }, + "casing=true,facing=north,part=pulley,slope=sideways": { + "model": "create:block/belt_casing/sideways_pulley", + "x": 180, + "y": 180 + }, + "casing=false,facing=south,part=pulley,slope=sideways": { + "model": "create:block/belt/sideways_middle" + }, + "casing=true,facing=south,part=pulley,slope=sideways": { + "model": "create:block/belt_casing/sideways_pulley" + }, + "casing=false,facing=west,part=pulley,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "x": 180, + "y": 90 + }, + "casing=true,facing=west,part=pulley,slope=sideways": { + "model": "create:block/belt_casing/sideways_pulley", + "x": 180, + "y": 90 + }, + "casing=false,facing=east,part=pulley,slope=sideways": { + "model": "create:block/belt/sideways_middle", + "y": 270 + }, + "casing=true,facing=east,part=pulley,slope=sideways": { + "model": "create:block/belt_casing/sideways_pulley", + "y": 270 } } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index b21f000bd..e82933baf 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -387,6 +387,21 @@ public class AllBlocks { .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.standardModel(ctx, prov))) .simpleItem() .register(); + + public static final BlockEntry DEPOT = REGISTRATE.block("depot", DepotBlock::new) + .initialProperties(SharedProperties::stone) + .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .item() + .transform(customItemModel("_", "block")) + .register(); + + public static final BlockEntry CHUTE = REGISTRATE.block("chute", ChuteBlock::new) + .initialProperties(SharedProperties::softMetal) + .addLayer(() -> RenderType::getCutoutMipped) + .blockstate(new ChuteGenerator()::generate) + .item(ChuteItem::new) + .transform(customItemModel("_", "block")) + .register(); public static final BlockEntry SPEEDOMETER = REGISTRATE.block("speedometer", GaugeBlock::speed) .initialProperties(SharedProperties::wooden) @@ -665,11 +680,40 @@ public class AllBlocks { .transform(customItemModel()) .register(); + // Logistics static { REGISTRATE.startSection(AllSections.LOGISTICS); } + + public static final BlockEntry MECHANICAL_ARM = REGISTRATE.block("mechanical_arm", ArmBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .transform(StressConfigDefaults.setImpact(8.0)) + .item(ArmItem::new) + .transform(customItemModel()) + .register(); + + public static final BlockEntry REALITY_FUNNEL = + REGISTRATE.block("reality_funnel", RealityFunnelBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p))) + .item(FunnelItem::new) + .transform(customItemModel()) + .register(); + + public static final BlockEntry BELT_FUNNEL = REGISTRATE.block("belt_funnel", BeltFunnelBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate(new BeltFunnelGenerator()::generate) + .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) + .register(); + + public static final BlockEntry CHUTE_FUNNEL = REGISTRATE.block("chute_funnel", ChuteFunnelBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate(new ChuteFunnelGenerator()::generate) + .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) + .register(); public static final BlockEntry REDSTONE_CONTACT = REGISTRATE.block("redstone_contact", RedstoneContactBlock::new) @@ -715,47 +759,6 @@ public class AllBlocks { .transform(BuilderTransformers.crate("creative")) .register(); - public static final BlockEntry CHUTE = REGISTRATE.block("chute", ChuteBlock::new) - .initialProperties(SharedProperties::softMetal) - .addLayer(() -> RenderType::getCutoutMipped) - .blockstate(new ChuteGenerator()::generate) - .item(ChuteItem::new) - .transform(customItemModel("_", "block")) - .register(); - - public static final BlockEntry PACKAGER = REGISTRATE.block("packager", PackagerBlock::new) - .initialProperties(SharedProperties::softMetal) - .transform(StressConfigDefaults.setImpact(4.0)) - .properties(p -> p.nonOpaque()) - .blockstate((c, p) -> p.getVariantBuilder(c.get()) - .forAllStates(s -> ConfiguredModel.builder() - .modelFile(AssetLookup.partialBaseModel(c, p)) - .rotationY(s.get(PackagerBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0) - .build())) - .item() - .transform(customItemModel()) - .register(); - - public static final BlockEntry REALITY_FUNNEL = - REGISTRATE.block("reality_funnel", RealityFunnelBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p))) - .item(FunnelItem::new) - .transform(customItemModel()) - .register(); - - public static final BlockEntry BELT_FUNNEL = REGISTRATE.block("belt_funnel", BeltFunnelBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate(new BeltFunnelGenerator()::generate) - .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) - .register(); - - public static final BlockEntry CHUTE_FUNNEL = REGISTRATE.block("chute_funnel", ChuteFunnelBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate(new ChuteFunnelGenerator()::generate) - .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) - .register(); - public static final BlockEntry BELT_OBSERVER = REGISTRATE.block("belt_observer", BeltObserverBlock::new) .initialProperties(SharedProperties::stone) @@ -777,20 +780,18 @@ public class AllBlocks { .item() .transform(customItemModel()) .register(); - - public static final BlockEntry MECHANICAL_ARM = REGISTRATE.block("mechanical_arm", ArmBlock::new) + + public static final BlockEntry PACKAGER = REGISTRATE.block("packager", PackagerBlock::new) .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .transform(StressConfigDefaults.setImpact(8.0)) - .item(ArmItem::new) - .transform(customItemModel()) - .register(); - - public static final BlockEntry DEPOT = REGISTRATE.block("depot", DepotBlock::new) - .initialProperties(SharedProperties::stone) - .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .transform(StressConfigDefaults.setImpact(4.0)) + .properties(p -> p.nonOpaque()) + .blockstate((c, p) -> p.getVariantBuilder(c.get()) + .forAllStates(s -> ConfiguredModel.builder() + .modelFile(AssetLookup.partialBaseModel(c, p)) + .rotationY(s.get(PackagerBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0) + .build())) .item() - .transform(customItemModel("_", "block")) + .transform(customItemModel()) .register(); public static final BlockEntry EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java index 2f8e8311f..2a2c2cd38 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java @@ -89,7 +89,8 @@ public class StructureTransform { if (state.get(BlockStateProperties.BELL_ATTACHMENT) == BellAttachment.DOUBLE_WALL) { state = state.with(BlockStateProperties.BELL_ATTACHMENT, BellAttachment.SINGLE_WALL); } - return state.with(HorizontalFaceBlock.HORIZONTAL_FACING, rotation.rotate(state.get(HorizontalFaceBlock.HORIZONTAL_FACING))); + return state.with(HorizontalFaceBlock.HORIZONTAL_FACING, + rotation.rotate(state.get(HorizontalFaceBlock.HORIZONTAL_FACING))); } return state.rotate(rotation); } @@ -111,12 +112,12 @@ public class StructureTransform { boolean b = state.get(FACE) == AttachFace.CEILING; state = state.with(HORIZONTAL_FACING, b ? forcedAxis : forcedAxis.getOpposite()); - + if (stateFace != AttachFace.WALL) { state = state.with(FACE, AttachFace.WALL); continue; } - + if (stateFacing.getAxisDirection() == AxisDirection.POSITIVE) { state = state.with(FACE, AttachFace.FLOOR); continue; @@ -127,62 +128,14 @@ public class StructureTransform { return state; } + boolean halfTurn = rotation == Rotation.CLOCKWISE_180; if (block instanceof StairsBlock) { - if (state.get(StairsBlock.FACING).getAxis() != rotationAxis) { - for (int i = 0; i < rotation.ordinal(); i++) { - Direction direction = state.get(StairsBlock.FACING); - Half half = state.get(StairsBlock.HALF); - if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ half == Half.BOTTOM - ^ direction.getAxis() == Axis.Z) - state = state.cycle(StairsBlock.HALF); - else - state = state.with(StairsBlock.FACING, direction.getOpposite()); - } - } else { - if (rotation == Rotation.CLOCKWISE_180) { - state = state.cycle(StairsBlock.HALF); - } - } + state = transformStairs(state, halfTurn); return state; } if (AllBlocks.BELT.has(state)) { - if (state.get(BeltBlock.HORIZONTAL_FACING).getAxis() != rotationAxis) { - for (int i = 0; i < rotation.ordinal(); i++) { - Slope slope = state.get(BeltBlock.SLOPE); - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); - - // Rotate diagonal - if (slope != Slope.HORIZONTAL && slope != Slope.VERTICAL) { - if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ slope == Slope.DOWNWARD - ^ direction.getAxis() == Axis.Z) { - state = state.with(BeltBlock.SLOPE, slope == Slope.UPWARD ? Slope.DOWNWARD : Slope.UPWARD); - } else { - state = state.with(BeltBlock.HORIZONTAL_FACING, direction.getOpposite()); - } - - // Rotate horizontal/vertical - } else { - if (slope == Slope.HORIZONTAL ^ direction.getAxis() == Axis.Z) { - state = state.with(BeltBlock.HORIZONTAL_FACING, direction.getOpposite()); - } - state = - state.with(BeltBlock.SLOPE, slope == Slope.HORIZONTAL ? Slope.VERTICAL : Slope.HORIZONTAL); - } - } - } else { - if (rotation == Rotation.CLOCKWISE_180) { - Slope slope = state.get(BeltBlock.SLOPE); - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); - if (slope == Slope.UPWARD || slope == Slope.DOWNWARD) { - state = state - .with(BeltBlock.SLOPE, slope == Slope.UPWARD ? Slope.DOWNWARD - : slope == Slope.DOWNWARD ? Slope.UPWARD : slope); - } else if (slope == Slope.VERTICAL) { - state = state.with(BeltBlock.HORIZONTAL_FACING, direction.getOpposite()); - } - } - } + state = transformBelt(state, halfTurn); return state; } @@ -197,7 +150,7 @@ public class StructureTransform { } else if (state.has(AXIS)) { state = state.with(AXIS, transformAxis(state.get(AXIS))); - } else if (rotation == Rotation.CLOCKWISE_180) { + } else if (halfTurn) { if (state.has(FACING)) { Direction stateFacing = state.get(FACING); @@ -213,14 +166,111 @@ public class StructureTransform { state = state.rotate(rotation); if (state.has(SlabBlock.TYPE) && state.get(SlabBlock.TYPE) != SlabType.DOUBLE) - state = state - .with(SlabBlock.TYPE, - state.get(SlabBlock.TYPE) == SlabType.BOTTOM ? SlabType.TOP : SlabType.BOTTOM); + state = state.with(SlabBlock.TYPE, + state.get(SlabBlock.TYPE) == SlabType.BOTTOM ? SlabType.TOP : SlabType.BOTTOM); } return state; } + protected BlockState transformStairs(BlockState state, boolean halfTurn) { + if (state.get(StairsBlock.FACING) + .getAxis() != rotationAxis) { + for (int i = 0; i < rotation.ordinal(); i++) { + Direction direction = state.get(StairsBlock.FACING); + Half half = state.get(StairsBlock.HALF); + if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ half == Half.BOTTOM + ^ direction.getAxis() == Axis.Z) + state = state.cycle(StairsBlock.HALF); + else + state = state.with(StairsBlock.FACING, direction.getOpposite()); + } + } else { + if (halfTurn) { + state = state.cycle(StairsBlock.HALF); + } + } + return state; + } + + protected BlockState transformBelt(BlockState state, boolean halfTurn) { + Direction initialDirection = state.get(BeltBlock.HORIZONTAL_FACING); + boolean diagonal = state.get(BeltBlock.SLOPE) == Slope.DOWNWARD || state.get(BeltBlock.SLOPE) == Slope.UPWARD; + + if (!diagonal) { + for (int i = 0; i < rotation.ordinal(); i++) { + Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); + Slope slope = state.get(BeltBlock.SLOPE); + boolean vertical = slope == Slope.VERTICAL; + boolean horizontal = slope == Slope.HORIZONTAL; + boolean sideways = slope == Slope.SIDEWAYS; + + Direction newDirection = direction.getOpposite(); + Slope newSlope = Slope.VERTICAL; + + if (vertical) { + if (direction.getAxis() == rotationAxis) { + newDirection = direction.rotateYCCW(); + newSlope = Slope.SIDEWAYS; + } else { + newSlope = Slope.HORIZONTAL; + newDirection = direction; + if (direction.getAxis() == Axis.Z) + newDirection = direction.getOpposite(); + } + } + + if (sideways) { + newDirection = direction; + if (direction.getAxis() == rotationAxis) + newSlope = Slope.HORIZONTAL; + else + newDirection = direction.rotateYCCW(); + } + + if (horizontal) { + newDirection = direction; + if (direction.getAxis() == rotationAxis) + newSlope = Slope.SIDEWAYS; + } + + state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); + state = state.with(BeltBlock.SLOPE, newSlope); + } + + } else if (initialDirection.getAxis() != rotationAxis) { + for (int i = 0; i < rotation.ordinal(); i++) { + Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); + Direction newDirection = direction.getOpposite(); + Slope slope = state.get(BeltBlock.SLOPE); + boolean upward = slope == Slope.UPWARD; + boolean downward = slope == Slope.DOWNWARD; + + // Rotate diagonal + if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ downward + ^ direction.getAxis() == Axis.Z) { + state = state.with(BeltBlock.SLOPE, upward ? Slope.DOWNWARD : Slope.UPWARD); + } else { + state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); + } + } + + } else if (halfTurn) { + Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); + Direction newDirection = direction.getOpposite(); + Slope slope = state.get(BeltBlock.SLOPE); + boolean vertical = slope == Slope.VERTICAL; + + if (diagonal) { + state = state.with(BeltBlock.SLOPE, + slope == Slope.UPWARD ? Slope.DOWNWARD : slope == Slope.DOWNWARD ? Slope.UPWARD : slope); + } else if (vertical) { + state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); + } + } + return state; + } + public Axis transformAxis(Axis axisIn) { Direction facing = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axisIn); facing = transformFacing(facing); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index ee4119d39..e37e85ded 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -99,6 +99,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE { public BeltRenderer(TileEntityRendererDispatcher dispatcher) { super(dispatcher); } - + @Override protected void renderSafe(BeltTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { + int light, int overlay) { BlockState blockState = te.getBlockState(); if (!AllBlocks.BELT.has(blockState)) @@ -59,9 +59,11 @@ public class BeltRenderer extends SafeTileEntityRenderer { // UV shift float speed = te.getSpeed(); if (speed != 0) { - float time = - AnimationTickHolder.getRenderTick() * blockState.get(HORIZONTAL_FACING).getAxisDirection().getOffset(); - if (renderedState.get(BeltBlock.HORIZONTAL_FACING).getAxis() == Axis.X) + float time = AnimationTickHolder.getRenderTick() * blockState.get(HORIZONTAL_FACING) + .getAxisDirection() + .getOffset(); + Direction facing = renderedState.get(BeltBlock.HORIZONTAL_FACING); + if (facing.getAxis() == Axis.X && renderedState.get(BeltBlock.SLOPE) != Slope.SIDEWAYS) speed = -speed; int textureIndex = (int) ((speed * time / 36) % 16); if (textureIndex < 0) @@ -71,30 +73,41 @@ public class BeltRenderer extends SafeTileEntityRenderer { } else { beltBuffer.dontShiftUV(); } - + IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, te.getPos()); - beltBuffer.light(packedLightmapCoords).renderInto(ms, vb); + beltBuffer.light(packedLightmapCoords) + .renderInto(ms, vb); if (te.hasPulley()) { // TODO 1.15 find a way to cache this model matrix computation MatrixStack modelTransform = new MatrixStack(); - Direction dir = blockState.get(BeltBlock.HORIZONTAL_FACING); - modelTransform.translate(0.5, 0.5, 0.5); - modelTransform.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (dir.getAxis() == Axis.X ? 0 : Math.PI / 2))); - modelTransform.multiply(Vector3f.POSITIVE_X.getRadialQuaternion((float) (Math.PI / 2))); - modelTransform.translate(-0.5, -0.5, -0.5); - SuperByteBuffer superBuffer = CreateClient.bufferCache.renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, modelTransform); + Direction dir = blockState.get(BeltBlock.HORIZONTAL_FACING) + .rotateY(); + if (blockState.get(BeltBlock.SLOPE) == Slope.SIDEWAYS) + dir = Direction.UP; + MatrixStacker msr = MatrixStacker.of(modelTransform); + + msr.centre(); + if (dir.getAxis() == Axis.X) + msr.rotateY(90); + if (dir.getAxis() == Axis.Y) + msr.rotateX(90); + msr.rotateX(90); + msr.unCentre(); + + SuperByteBuffer superBuffer = CreateClient.bufferCache + .renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, modelTransform); KineticTileEntityRenderer.standardKineticRotationTransform(superBuffer, te, light) - .renderInto(ms, vb); + .renderInto(ms, vb); } - + renderItems(te, partialTicks, ms, buffer, light, overlay); } protected void renderItems(BeltTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { + int light, int overlay) { if (!te.isController()) return; if (te.beltLength == 0) @@ -102,16 +115,22 @@ public class BeltRenderer extends SafeTileEntityRenderer { ms.push(); - Vec3i directionVec = te.getBeltFacing().getDirectionVec(); - Vec3d beltStartOffset = new Vec3d(directionVec).scale(-.5).add(.5, 13 / 16f + .125f, .5); + Vec3i directionVec = te.getBeltFacing() + .getDirectionVec(); + Vec3d beltStartOffset = new Vec3d(directionVec).scale(-.5) + .add(.5, 13 / 16f + .125f, .5); ms.translate(beltStartOffset.x, beltStartOffset.y, beltStartOffset.z); - Slope slope = te.getBlockState().get(BeltBlock.SLOPE); + Slope slope = te.getBlockState() + .get(BeltBlock.SLOPE); int verticality = slope == Slope.DOWNWARD ? -1 : slope == Slope.UPWARD ? 1 : 0; - boolean slopeAlongX = te.getBeltFacing().getAxis() == Axis.X; + boolean slopeAlongX = te.getBeltFacing() + .getAxis() == Axis.X; - for (TransportedItemStack transported : te.getInventory().getTransportedItems()) { + for (TransportedItemStack transported : te.getInventory() + .getTransportedItems()) { ms.push(); - MatrixStacker.of(ms).nudge(transported.angle); + MatrixStacker.of(ms) + .nudge(transported.angle); float offset = MathHelper.lerp(partialTicks, transported.prevBeltPosition, transported.beltPosition); float sideOffset = MathHelper.lerp(partialTicks, transported.prevSideOffset, transported.sideOffset); float verticalMovement = verticality; @@ -124,25 +143,31 @@ public class BeltRenderer extends SafeTileEntityRenderer { if (offset < .5) verticalMovement = 0; verticalMovement = verticalMovement * (Math.min(offset, te.beltLength - .5f) - .5f); - Vec3d offsetVec = new Vec3d(directionVec).scale(offset).add(0, verticalMovement, 0); + Vec3d offsetVec = new Vec3d(directionVec).scale(offset) + .add(0, verticalMovement, 0); boolean onSlope = slope != Slope.HORIZONTAL && MathHelper.clamp(offset, .5f, te.beltLength - .5f) == offset; - boolean tiltForward = - (slope == Slope.DOWNWARD ^ te.getBeltFacing().getAxisDirection() == AxisDirection.POSITIVE) == (te - .getBeltFacing().getAxis() == Axis.Z); + boolean tiltForward = (slope == Slope.DOWNWARD ^ te.getBeltFacing() + .getAxisDirection() == AxisDirection.POSITIVE) == (te.getBeltFacing() + .getAxis() == Axis.Z); float slopeAngle = onSlope ? tiltForward ? -45 : 45 : 0; ms.translate(offsetVec.x, offsetVec.y, offsetVec.z); - boolean alongX = te.getBeltFacing().rotateY().getAxis() == Axis.X; + boolean alongX = te.getBeltFacing() + .rotateY() + .getAxis() == Axis.X; if (!alongX) sideOffset *= -1; ms.translate(alongX ? sideOffset : 0, 0, alongX ? 0 : sideOffset); - ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); - boolean blockItem = itemRenderer.getItemModelWithOverrides(transported.stack, te.getWorld(), null).isGui3d(); + ItemRenderer itemRenderer = Minecraft.getInstance() + .getItemRenderer(); + boolean blockItem = itemRenderer.getItemModelWithOverrides(transported.stack, te.getWorld(), null) + .isGui3d(); if (Minecraft.getInstance().gameSettings.fancyGraphics) { - Vec3d shadowPos = new Vec3d(te.getPos()).add(beltStartOffset.scale(1).add(offsetVec) - .add(alongX ? sideOffset : 0, .39, alongX ? 0 : sideOffset)); + Vec3d shadowPos = new Vec3d(te.getPos()).add(beltStartOffset.scale(1) + .add(offsetVec) + .add(alongX ? sideOffset : 0, .39, alongX ? 0 : sideOffset)); ShadowRenderHelper.renderShadow(ms, buffer, shadowPos, .75f, blockItem ? .2f : .2f); } @@ -181,7 +206,8 @@ public class BeltRenderer extends SafeTileEntityRenderer { } protected BlockState getBeltState(KineticTileEntity te) { - return te.getBlockState().with(BeltBlock.CASING, false); + return te.getBlockState() + .with(BeltBlock.CASING, false); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java index b43c3cc10..61394a2b1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java @@ -73,6 +73,8 @@ public class BeltShapes { private static final VoxelShape SLOPE_DESC_PART = makeSlopePart(false), SLOPE_ASC_PART = makeSlopePart(true), + SIDEWAYS_FULL_PART = makeSidewaysFull(), + SIDEWAYS_END_PART = makeSidewaysEnding(), FLAT_FULL_PART = makeFlatFull(), FLAT_END_PART = makeFlatEnding(); @@ -84,11 +86,19 @@ public class BeltShapes { VERTICAL_FULL = VerticalBeltShaper.make(FLAT_FULL_PART), VERTICAL_END = VerticalBeltShaper.make(compose(FLAT_END_PART, FLAT_FULL_PART)), VERTICAL_START = VerticalBeltShaper.make(compose(FLAT_FULL_PART, FLAT_END_PART)); + //Flat Shapes private static final VoxelShaper FLAT_FULL = VoxelShaper.forHorizontalAxis(FLAT_FULL_PART, Axis.Z), FLAT_END = VoxelShaper.forHorizontal(compose(FLAT_END_PART, FLAT_FULL_PART), Direction.SOUTH), FLAT_START = VoxelShaper.forHorizontal(compose(FLAT_FULL_PART, FLAT_END_PART), Direction.SOUTH); + + //Sideways Shapes + private static final VoxelShaper + SIDE_FULL = VoxelShaper.forHorizontalAxis(SIDEWAYS_FULL_PART, Axis.Z), + SIDE_END = VoxelShaper.forHorizontal(compose(SIDEWAYS_END_PART, SIDEWAYS_FULL_PART), Direction.SOUTH), + SIDE_START = VoxelShaper.forHorizontal(compose(SIDEWAYS_FULL_PART, SIDEWAYS_END_PART), Direction.SOUTH); + //Sloped Shapes private static final VoxelShaper SLOPE_DESC = VoxelShaper.forHorizontal(SLOPE_DESC_PART, Direction.SOUTH), @@ -129,14 +139,25 @@ public class BeltShapes { private static VoxelShape makeFlatEnding(){ return VoxelShapes.or( - makeCuboidShape(1,4,0,15,12,16), - makeCuboidShape(1,3,1,15,13,15) + makeCuboidShape(1,4,0,15,12,16), + makeCuboidShape(1,3,1,15,13,15) ); } private static VoxelShape makeFlatFull(){ return makeCuboidShape(1,3,0,15,13,16); } + + private static VoxelShape makeSidewaysEnding(){ + return VoxelShapes.or( + makeCuboidShape(4,1,0,12,15,16), + makeCuboidShape(3,1,1,13,15,15) + ); + } + + private static VoxelShape makeSidewaysFull(){ + return makeCuboidShape(3,1,0,13,15,16); + } public static VoxelShape getShape(BlockState state) { if (cache.containsKey(state)) @@ -175,6 +196,14 @@ public class BeltShapes { //flat ending return (part == Part.START ? FLAT_START : FLAT_END).get(facing); } + + //sideways part + if (slope == Slope.SIDEWAYS) { + if (part == Part.MIDDLE || part == Part.PULLEY) + return SIDE_FULL.get(axis); + //flat ending + return (part == Part.START ? SIDE_START : SIDE_END).get(facing); + } //slope if (part == Part.MIDDLE || part == Part.PULLEY) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java index f6d0428b9..2c9c15812 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java @@ -50,23 +50,27 @@ public class BeltConnectorHandler { BlockPos first = NBTUtil.readBlockPos(tag.getCompound("FirstPulley")); - if (!world.getBlockState(first).has(BlockStateProperties.AXIS)) + if (!world.getBlockState(first) + .has(BlockStateProperties.AXIS)) continue; - Axis axis = world.getBlockState(first).get(BlockStateProperties.AXIS); + Axis axis = world.getBlockState(first) + .get(BlockStateProperties.AXIS); RayTraceResult rayTrace = Minecraft.getInstance().objectMouseOver; if (rayTrace == null || !(rayTrace instanceof BlockRayTraceResult)) { if (r.nextInt(50) == 0) { world.addParticle(new RedstoneParticleData(.3f, .9f, .5f, 1), - first.getX() + .5f + randomOffset(.25f), first.getY() + .5f + randomOffset(.25f), - first.getZ() + .5f + randomOffset(.25f), 0, 0, 0); + first.getX() + .5f + randomOffset(.25f), first.getY() + .5f + randomOffset(.25f), + first.getZ() + .5f + randomOffset(.25f), 0, 0, 0); } return; } BlockPos selected = ((BlockRayTraceResult) rayTrace).getPos(); - if (world.getBlockState(selected).getMaterial().isReplaceable()) + if (world.getBlockState(selected) + .getMaterial() + .isReplaceable()) return; if (!ShaftBlock.isShaft(world.getBlockState(selected))) selected = selected.offset(((BlockRayTraceResult) rayTrace).getFace()); @@ -79,7 +83,8 @@ public class BeltConnectorHandler { Vec3d start = new Vec3d(first); Vec3d end = new Vec3d(selected); Vec3d actualDiff = end.subtract(start); - end = end.subtract(axis.getCoordinate(actualDiff.x, 0, 0), 0, axis.getCoordinate(0, 0, actualDiff.z)); + end = end.subtract(axis.getCoordinate(actualDiff.x, 0, 0), axis.getCoordinate(0, actualDiff.y, 0), + axis.getCoordinate(0, 0, actualDiff.z)); Vec3d diff = end.subtract(start); double x = Math.abs(diff.x); @@ -96,6 +101,8 @@ public class BeltConnectorHandler { for (int k = -1; k <= 1; k++) { if (axis.getCoordinate(i, j, k) != 0) continue; + if (axis == Axis.Y && i != 0 && k != 0) + continue; if (i == 0 && j == 0 && k == 0) continue; validDiffs.add(new Vec3d(i, j, k)); @@ -110,15 +117,17 @@ public class BeltConnectorHandler { } } step = validDiffs.get(closestIndex); - } + if (axis == Axis.Y && step.x != 0 && step.z != 0) + return; + step = new Vec3d(Math.signum(step.x), Math.signum(step.y), Math.signum(step.z)); for (float f = 0; f < length; f += .0625f) { Vec3d position = start.add(step.scale(f)); if (r.nextInt(10) == 0) { world.addParticle(new RedstoneParticleData(canConnect ? .3f : .9f, canConnect ? .9f : .3f, .5f, 1), - position.x + .5f, position.y + .5f, position.z + .5f, 0, 0, 0); + position.x + .5f, position.y + .5f, position.z + .5f, 0, 0, 0); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index ee745b7b4..e9aa45bbb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -3,6 +3,8 @@ package com.simibubi.create.content.contraptions.relays.belt.item; import java.util.LinkedList; import java.util.List; +import javax.annotation.Nonnull; + import com.simibubi.create.AllBlocks; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -31,8 +33,6 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BeltConnectorItem extends BlockItem { public BeltConnectorItem(Properties properties) { @@ -75,7 +75,7 @@ public class BeltConnectorItem extends BlockItem { // Remove first if no longer existant or valid if (tag.contains("FirstPulley")) { firstPulley = NBTUtil.readBlockPos(tag.getCompound("FirstPulley")); - if (!validateAxis(world, firstPulley)) { + if (!validateAxis(world, firstPulley) || !firstPulley.withinDistance(pos, maxLength() * 2)) { tag.remove("FirstPulley"); context.getItem() .setTag(tag); @@ -131,9 +131,12 @@ public class BeltConnectorItem extends BlockItem { for (BlockPos pos : beltsToCreate) { BeltBlock.Part part = pos.equals(start) ? Part.START : pos.equals(end) ? Part.END : Part.MIDDLE; - boolean pulley = ShaftBlock.isShaft(world.getBlockState(pos)); + BlockState shaftState = world.getBlockState(pos); + boolean pulley = ShaftBlock.isShaft(shaftState); if (part == Part.MIDDLE && pulley) part = Part.PULLEY; + if (pulley && shaftState.get(ShaftBlock.AXIS) == Axis.Y) + slope = Slope.SIDEWAYS; world.setBlockState(pos, beltBlock.with(BeltBlock.SLOPE, slope) .with(BeltBlock.PART, part) .with(BeltBlock.HORIZONTAL_FACING, facing), 3); @@ -193,11 +196,11 @@ public class BeltConnectorItem extends BlockItem { return false; if (!world.isAreaLoaded(second, 1)) return false; - if (!second.withinDistance(first, AllConfigs.SERVER.kinetics.maxBeltLength.get())) + if (!second.withinDistance(first, maxLength())) return false; BlockPos diff = second.subtract(first); - Axis axis = world.getBlockState(first) + Axis shaftAxis = world.getBlockState(first) .get(BlockStateProperties.AXIS); int x = diff.getX(); @@ -206,13 +209,15 @@ public class BeltConnectorItem extends BlockItem { int sames = ((Math.abs(x) == Math.abs(y)) ? 1 : 0) + ((Math.abs(y) == Math.abs(z)) ? 1 : 0) + ((Math.abs(z) == Math.abs(x)) ? 1 : 0); - if (axis.getCoordinate(x, y, z) != 0) + if (shaftAxis.getCoordinate(x, y, z) != 0) return false; if (sames != 1) return false; - if (axis != world.getBlockState(second) + if (shaftAxis != world.getBlockState(second) .get(BlockStateProperties.AXIS)) return false; + if (shaftAxis == Axis.Y && x != 0 && z != 0) + return false; TileEntity tileEntity = world.getTileEntity(first); TileEntity tileEntity2 = world.getTileEntity(second); @@ -232,7 +237,7 @@ public class BeltConnectorItem extends BlockItem { for (BlockPos currentPos = first.add(step); !currentPos.equals(second) && limit-- > 0; currentPos = currentPos.add(step)) { BlockState blockState = world.getBlockState(currentPos); - if (ShaftBlock.isShaft(blockState) && blockState.get(ShaftBlock.AXIS) == axis) + if (ShaftBlock.isShaft(blockState) && blockState.get(ShaftBlock.AXIS) == shaftAxis) continue; if (!blockState.getMaterial() .isReplaceable()) @@ -243,14 +248,15 @@ public class BeltConnectorItem extends BlockItem { } + protected static Integer maxLength() { + return AllConfigs.SERVER.kinetics.maxBeltLength.get(); + } + public static boolean validateAxis(World world, BlockPos pos) { if (!world.isAreaLoaded(pos, 1)) return false; if (!ShaftBlock.isShaft(world.getBlockState(pos))) return false; - if (world.getBlockState(pos) - .get(BlockStateProperties.AXIS) == Axis.Y) - return false; return true; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java index 7d1b7857d..ca185b137 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java @@ -98,7 +98,7 @@ public class BeltFunnelBlock extends HorizontalInteractionFunnelBlock { return true; if (!(stateBelow.getBlock() instanceof BeltBlock)) return false; - if (stateBelow.get(BeltBlock.SLOPE) == Slope.VERTICAL) + if (!BeltBlock.canTransport(stateBelow)) return false; if (stateBelow.get(BeltBlock.HORIZONTAL_FACING) .getAxis() != state.get(HORIZONTAL_FACING) diff --git a/src/main/resources/assets/create/models/block/belt/sideways_end.json b/src/main/resources/assets/create/models/block/belt/sideways_end.json new file mode 100644 index 000000000..a447bd8b1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt/sideways_end.json @@ -0,0 +1,47 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belt", + "particle": "create:block/belt" + }, + "elements": [ + { + "name": "Bottom", + "from": [11, 1, 0], + "to": [13, 15, 15], + "faces": { + "east": {"uv": [1, 0, 15, 15], "rotation": 90, "texture": "#0"}, + "south": {"uv": [1, 3, 15, 5], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 0, 15, 15], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 15], "texture": "#0"}, + "down": {"uv": [14, 0, 16, 15], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Top", + "from": [3, 1, 0], + "to": [5, 15, 15], + "faces": { + "east": {"uv": [1, 1, 15, 16], "rotation": 270, "texture": "#0"}, + "south": {"uv": [1, 5, 15, 3], "rotation": 270, "texture": "#0"}, + "west": {"uv": [1, 1, 15, 16], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 1, 2, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [14, 1, 16, 16], "texture": "#0"} + } + }, + { + "name": "Side", + "from": [4, 1, 14], + "to": [12, 15, 16], + "faces": { + "north": {"uv": [1, 4, 15, 12], "rotation": 270, "texture": "#0"}, + "east": {"uv": [1, 11, 15, 13], "rotation": 90, "texture": "#0"}, + "south": {"uv": [1, 4, 15, 12], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 3, 15, 5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 4, 2, 12], "rotation": 90, "texture": "#0"}, + "down": {"uv": [14, 4, 16, 12], "rotation": 90, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt/sideways_middle.json b/src/main/resources/assets/create/models/block/belt/sideways_middle.json new file mode 100644 index 000000000..24f7c35e6 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt/sideways_middle.json @@ -0,0 +1,32 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belt", + "particle": "create:block/belt" + }, + "elements": [ + { + "name": "Bottom", + "from": [11, 1, 0], + "to": [13, 15, 16], + "faces": { + "east": {"uv": [1, 0, 15, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 0, 15, 16], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#0"}, + "down": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Top", + "from": [3, 1, 0], + "to": [5, 15, 16], + "faces": { + "east": {"uv": [1, 0, 15, 16], "rotation": 270, "texture": "#0"}, + "west": {"uv": [1, 0, 15, 16], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt/sideways_start.json b/src/main/resources/assets/create/models/block/belt/sideways_start.json new file mode 100644 index 000000000..250b8ff75 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt/sideways_start.json @@ -0,0 +1,47 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/belt", + "particle": "create:block/belt" + }, + "elements": [ + { + "name": "Bottom", + "from": [11, 1, 1], + "to": [13, 15, 16], + "faces": { + "north": {"uv": [1, 11, 15, 13], "rotation": 270, "texture": "#0"}, + "east": {"uv": [1, 1, 15, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 1, 15, 16], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 1, 2, 16], "texture": "#0"}, + "down": {"uv": [14, 1, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Top", + "from": [3, 1, 1], + "to": [5, 15, 16], + "faces": { + "north": {"uv": [1, 3, 15, 5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [1, 1, 15, 16], "rotation": 270, "texture": "#0"}, + "west": {"uv": [1, 0, 15, 15], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 1, 2, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [14, 1, 16, 16], "texture": "#0"} + } + }, + { + "name": "Side", + "from": [4, 1, 0], + "to": [12, 15, 2], + "faces": { + "north": {"uv": [1, 4, 15, 12], "rotation": 90, "texture": "#0"}, + "east": {"uv": [1, 11, 15, 13], "rotation": 90, "texture": "#0"}, + "south": {"uv": [1, 4, 15, 12], "rotation": 270, "texture": "#0"}, + "west": {"uv": [1, 3, 15, 5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 4, 2, 12], "rotation": 270, "texture": "#0"}, + "down": {"uv": [14, 4, 16, 12], "rotation": 270, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_casing/sideways_end.json b/src/main/resources/assets/create/models/block/belt_casing/sideways_end.json new file mode 100644 index 000000000..d158fadc8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_casing/sideways_end.json @@ -0,0 +1,5 @@ +{ + "_comment": "Vertical belts cannot have casings at the moment", + "textures": {}, + "elements": [] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_casing/sideways_middle.json b/src/main/resources/assets/create/models/block/belt_casing/sideways_middle.json new file mode 100644 index 000000000..d158fadc8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_casing/sideways_middle.json @@ -0,0 +1,5 @@ +{ + "_comment": "Vertical belts cannot have casings at the moment", + "textures": {}, + "elements": [] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_casing/sideways_pulley.json b/src/main/resources/assets/create/models/block/belt_casing/sideways_pulley.json new file mode 100644 index 000000000..d158fadc8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_casing/sideways_pulley.json @@ -0,0 +1,5 @@ +{ + "_comment": "Vertical belts cannot have casings at the moment", + "textures": {}, + "elements": [] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_casing/sideways_start.json b/src/main/resources/assets/create/models/block/belt_casing/sideways_start.json new file mode 100644 index 000000000..d158fadc8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_casing/sideways_start.json @@ -0,0 +1,5 @@ +{ + "_comment": "Vertical belts cannot have casings at the moment", + "textures": {}, + "elements": [] +} \ No newline at end of file