Slots of fun

- Fixed upright mechanical saws only able to be oriented in two directions
- Deployers now have their filter slot on the side of the block
- Deployers can now be rotated by wrenching them near the edge of the front face
This commit is contained in:
simibubi 2023-04-22 18:27:39 +02:00
parent 9cd992eed7
commit a673734c71
17 changed files with 272 additions and 142 deletions

View file

@ -312,7 +312,7 @@ cd13e5327f1adaf9ab2bfc511ead05b2799fdfb3 assets/create/blockstates/mechanical_pl
92269fe66d7b83095a2e04e121af0be792f55dd6 assets/create/blockstates/mechanical_press.json
b7c4a0ff0c6f16e14d71fc0fb7fc66d032b65cf3 assets/create/blockstates/mechanical_pump.json
29ec1a3ec9b158b954f9ca126eaac89cee96cf84 assets/create/blockstates/mechanical_roller.json
264d72320ee0f1e014319f7d99dcc1fa953a4ad4 assets/create/blockstates/mechanical_saw.json
63543864991460d67e7474548bfa2f5f5bc23535 assets/create/blockstates/mechanical_saw.json
94bbcb7e622471dbf418d78f9200ad321c7168de assets/create/blockstates/metal_bracket.json
c253a827d9f0b0e29f67dfd19d65b259d3d4f045 assets/create/blockstates/metal_girder.json
e20699a753e7b12abd4a881de473d494a4ffeaa9 assets/create/blockstates/metal_girder_encased_shaft.json
@ -578,7 +578,7 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
11c1ebd001468641aacda3e4ed11995ed37853da assets/create/lang/en_ud.json
6433e657b968debdc3f4a7f13afb3e62406fdaa8 assets/create/lang/en_us.json
ff4f0cd079e13fcc7eae4f8c9af2a455af019056 assets/create/lang/en_us.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json

View file

@ -1,48 +1,96 @@
{
"variants": {
"axis_along_first=false,facing=down": {
"axis_along_first=false,facing=down,flipped=false": {
"model": "create:block/mechanical_saw/vertical",
"x": 180
},
"axis_along_first=true,facing=down": {
"axis_along_first=true,facing=down,flipped=false": {
"model": "create:block/mechanical_saw/vertical",
"x": 180,
"y": 270
},
"axis_along_first=false,facing=up,flipped=false": {
"model": "create:block/mechanical_saw/vertical"
},
"axis_along_first=true,facing=up,flipped=false": {
"model": "create:block/mechanical_saw/vertical",
"y": 270
},
"axis_along_first=false,facing=north,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 180
},
"axis_along_first=true,facing=north,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 180
},
"axis_along_first=false,facing=south,flipped=false": {
"model": "create:block/mechanical_saw/horizontal"
},
"axis_along_first=true,facing=south,flipped=false": {
"model": "create:block/mechanical_saw/horizontal"
},
"axis_along_first=false,facing=west,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 90
},
"axis_along_first=true,facing=west,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 90
},
"axis_along_first=false,facing=east,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 270
},
"axis_along_first=true,facing=east,flipped=false": {
"model": "create:block/mechanical_saw/horizontal",
"y": 270
},
"axis_along_first=false,facing=down,flipped=true": {
"model": "create:block/mechanical_saw/vertical",
"x": 180,
"y": 180
},
"axis_along_first=true,facing=down,flipped=true": {
"model": "create:block/mechanical_saw/vertical",
"x": 180,
"y": 90
},
"axis_along_first=false,facing=up": {
"model": "create:block/mechanical_saw/vertical"
"axis_along_first=false,facing=up,flipped=true": {
"model": "create:block/mechanical_saw/vertical",
"y": 180
},
"axis_along_first=true,facing=up": {
"axis_along_first=true,facing=up,flipped=true": {
"model": "create:block/mechanical_saw/vertical",
"y": 90
},
"axis_along_first=false,facing=north": {
"axis_along_first=false,facing=north,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 180
},
"axis_along_first=true,facing=north": {
"axis_along_first=true,facing=north,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 180
},
"axis_along_first=false,facing=south": {
"axis_along_first=false,facing=south,flipped=true": {
"model": "create:block/mechanical_saw/horizontal"
},
"axis_along_first=true,facing=south": {
"axis_along_first=true,facing=south,flipped=true": {
"model": "create:block/mechanical_saw/horizontal"
},
"axis_along_first=false,facing=west": {
"axis_along_first=false,facing=west,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 90
},
"axis_along_first=true,facing=west": {
"axis_along_first=true,facing=west,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 90
},
"axis_along_first=false,facing=east": {
"axis_along_first=false,facing=east,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 270
},
"axis_along_first=true,facing=east": {
"axis_along_first=true,facing=east,flipped=true": {
"model": "create:block/mechanical_saw/horizontal",
"y": 270
}

View file

@ -1469,7 +1469,7 @@
"create.hint.mechanical_arm_no_targets": "It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "Deployer Item Overflow",
"create.hint.full_deployer.title": "Deployer cannot activate",
"create.hint.full_deployer": "It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.backtank.low": "Backtank pressure low",

View file

@ -167,6 +167,9 @@ public class AllShapes {
TRACK_DIAG = shape(TrackVoxelShapes.diagonal()).forHorizontal(SOUTH),
TRACK_ORTHO_LONG = shape(TrackVoxelShapes.longOrthogonalZOffset()).forHorizontal(SOUTH),
DEPLOYER_INTERACTION = shape(CASING_12PX.get(UP)).add(SIX_VOXEL_POLE.get(Axis.Y))
.forDirectional(UP),
WHISTLE_BASE = shape(1, 0, 1, 15, 3, 15).add(5, 0, 5, 11, 8, 11)
.forDirectional(UP)
@ -273,8 +276,6 @@ public class AllShapes {
FUNNEL_CEILING = shape(2, 8, 2, 14, 18, 14).add(1, 8, 1, 15, 15, 15)
.add(0, 6, 0, 16, 12, 16)
.build(),
DEPOT = shape(CASING_11PX.get(Direction.UP)).add(1, 11, 1, 15, 13, 15)
.build(),
STATION = shape(0, 0, 0, 16, 2, 16).add(1, 0, 1, 15, 13, 15)
.build(),

View file

@ -37,6 +37,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
@ -45,7 +46,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<DeployerBlockEntity> {
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
public DeployerBlock(Properties properties) {
super(properties);
}
@ -57,12 +58,21 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<De
@Override
public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) {
return AllShapes.DEPLOYER_INTERACTION.get(state.getValue(FACING));
}
@Override
public VoxelShape getCollisionShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) {
return AllShapes.CASING_12PX.get(state.getValue(FACING));
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
if (context.getClickedFace() == state.getValue(FACING)) {
Vec3 location = context.getClickLocation()
.subtract(Vec3.atCenterOf(context.getClickedPos()))
.multiply(Vec3.atLowerCornerOf(state.getValue(FACING)
.getNormal()));
if (location.length() > .25f) {
if (!context.getLevel().isClientSide)
withBlockEntityDo(context.getLevel(), context.getClickedPos(), DeployerBlockEntity::changeMode);
return InteractionResult.SUCCESS;
@ -97,11 +107,15 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<De
.consumesAction())
return InteractionResult.SUCCESS;
}
if (AllItems.WRENCH.isIn(heldByPlayer))
return InteractionResult.PASS;
if (hit.getDirection() != state.getValue(FACING))
Vec3 location = hit.getLocation()
.subtract(Vec3.atCenterOf(pos))
.multiply(Vec3.atLowerCornerOf(state.getValue(FACING)
.getNormal()));
if (hit.getDirection() != state.getValue(FACING) && location.length() < .25f)
return InteractionResult.PASS;
if (worldIn.isClientSide)
return InteractionResult.SUCCESS;

View file

@ -11,29 +11,49 @@ import net.minecraft.core.Direction.Axis;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
public class DeployerFilterSlot extends ValueBoxTransform {
public class DeployerFilterSlot extends ValueBoxTransform.Sided {
@Override
protected Vec3 getLocalOffset(BlockState state) {
Direction facing = state.getValue(DeployerBlock.FACING);
Vec3 vec = VecHelper.voxelSpace(8f, 13f, 11.5f);
Vec3 vec = VecHelper.voxelSpace(8f, 8f, 15.5f);
float yRot = AngleHelper.horizontalAngle(facing);
float xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0;
vec = VecHelper.rotateCentered(vec, yRot, Axis.Y);
vec = VecHelper.rotateCentered(vec, xRot, Axis.X);
vec = VecHelper.rotateCentered(vec, AngleHelper.horizontalAngle(getSide()), Axis.Y);
vec = VecHelper.rotateCentered(vec, AngleHelper.verticalAngle(getSide()), Axis.X);
vec = vec.subtract(Vec3.atLowerCornerOf(facing.getNormal())
.scale(2 / 16f));
return vec;
}
@Override
protected void rotate(BlockState state, PoseStack ms) {
protected boolean isSideActive(BlockState state, Direction direction) {
Direction facing = state.getValue(DeployerBlock.FACING);
if (direction.getAxis() == facing.getAxis())
return false;
if (((DeployerBlock) state.getBlock()).getRotationAxis(state) == direction.getAxis())
return false;
return true;
}
@Override
protected void rotate(BlockState state, PoseStack ms) {
Direction facing = getSide();
float xRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0;
float yRot = AngleHelper.horizontalAngle(facing) + 180;
if (facing.getAxis() == Axis.Y)
TransformStack.cast(ms)
.rotateY(180 + AngleHelper.horizontalAngle(state.getValue(DeployerBlock.FACING)));
TransformStack.cast(ms)
.rotateY(yRot)
.rotateX(xRot);
}
@Override
protected Vec3 getSouthLocation() {
return Vec3.ZERO;
}
}

View file

@ -19,6 +19,7 @@ import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource;
@ -31,8 +32,13 @@ import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.AABB;
@ -45,20 +51,69 @@ import net.minecraft.world.phys.shapes.VoxelShape;
public class SawBlock extends DirectionalAxisKineticBlock implements IBE<SawBlockEntity> {
public static DamageSource damageSourceSaw = new DamageSource("create.mechanical_saw").bypassArmor();
public static final BooleanProperty FLIPPED = BooleanProperty.create("flipped");
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
public SawBlock(Properties properties) {
super(properties);
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(FLIPPED));
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
BlockState stateForPlacement = super.getStateForPlacement(context);
Direction facing = stateForPlacement.getValue(FACING);
if (facing.getAxis()
.isVertical())
return stateForPlacement;
return stateForPlacement.setValue(AXIS_ALONG_FIRST_COORDINATE, facing.getAxis() == Axis.X);
return stateForPlacement.setValue(FLIPPED, facing.getAxis() == Axis.Y && context.getHorizontalDirection()
.getAxisDirection() == AxisDirection.POSITIVE);
}
@Override
public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) {
BlockState newState = super.getRotatedBlockState(originalState, targetedFace);
if (newState.getValue(FACING)
.getAxis() != Axis.Y)
return newState;
if (targetedFace.getAxis() != Axis.Y)
return newState;
if (!originalState.getValue(AXIS_ALONG_FIRST_COORDINATE))
newState = newState.cycle(FLIPPED);
return newState;
}
@Override
public BlockState rotate(BlockState state, Rotation rot) {
BlockState newState = super.rotate(state, rot);
if (state.getValue(FACING)
.getAxis() != Axis.Y)
return newState;
if (rot.ordinal() % 2 == 1 && (rot == Rotation.CLOCKWISE_90) != state.getValue(AXIS_ALONG_FIRST_COORDINATE))
newState = newState.cycle(FLIPPED);
if (rot == Rotation.CLOCKWISE_180)
newState = newState.cycle(FLIPPED);
return newState;
}
@Override
public BlockState mirror(BlockState state, Mirror mirrorIn) {
BlockState newState = super.mirror(state, mirrorIn);
if (state.getValue(FACING)
.getAxis() != Axis.Y)
return newState;
boolean alongX = state.getValue(AXIS_ALONG_FIRST_COORDINATE);
if (alongX && mirrorIn == Mirror.FRONT_BACK)
newState = newState.cycle(FLIPPED);
if (!alongX && mirrorIn == Mirror.LEFT_RIGHT)
newState = newState.cycle(FLIPPED);
return newState;
}
@Override
@ -200,7 +255,8 @@ public class SawBlock extends DirectionalAxisKineticBlock implements IBE<SawBloc
else {
return PlacementOffset.success(pos.relative(directions.get(0)),
s -> s.setValue(FACING, state.getValue(FACING))
.setValue(AXIS_ALONG_FIRST_COORDINATE, state.getValue(AXIS_ALONG_FIRST_COORDINATE)));
.setValue(AXIS_ALONG_FIRST_COORDINATE, state.getValue(AXIS_ALONG_FIRST_COORDINATE))
.setValue(FLIPPED, state.getValue(FLIPPED)));
}
}
}

View file

@ -15,14 +15,16 @@ public class SawFilterSlot extends ValueBoxTransform {
protected Vec3 getLocalOffset(BlockState state) {
if (state.getValue(SawBlock.FACING) != Direction.UP)
return null;
Vec3 x = VecHelper.voxelSpace(8f, 12.5f, 5f);
Vec3 z = VecHelper.voxelSpace(11f, 12.5f, 8f);
int offset = state.getValue(SawBlock.FLIPPED) ? -3 : 3;
Vec3 x = VecHelper.voxelSpace(8, 12.5f, 8 + offset);
Vec3 z = VecHelper.voxelSpace(8 + offset, 12.5f, 8);
return state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? z : x;
}
@Override
protected void rotate(BlockState state, PoseStack ms) {
int yRot = state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 270 : 0;
int yRot = (state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0)
+ (state.getValue(SawBlock.FLIPPED) ? 0 : 180);
TransformStack.cast(ms)
.rotateY(yRot)
.rotateX(90);

View file

@ -22,7 +22,7 @@ public class SawGenerator extends SpecialBlockStateGen {
boolean axisAlongFirst = state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE);
if (facing.getAxis()
.isVertical())
return axisAlongFirst ? 90 : 0;
return (axisAlongFirst ? 270 : 0) + (state.getValue(SawBlock.FLIPPED) ? 180 : 0);
return horizontalAngle(facing);
}

View file

@ -56,7 +56,8 @@ public class ArmScenes {
scene.overlay.showControls(new InputWindowElement(depotSurface, Pointing.RIGHT).rightClick()
.withItem(armItem), 50);
scene.idle(7);
AABB depotBounds = AllShapes.DEPOT.bounds();
AABB depotBounds = AllShapes.CASING_13PX.get(Direction.UP)
.bounds();
scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(4, 2, 1), 400);
scene.overlay.showText(70)
@ -394,7 +395,8 @@ public class ArmScenes {
scene.world.showSection(util.select.fromTo(1, 1, 1, 5, 1, 2), Direction.SOUTH);
scene.idle(10);
AABB depotBox = AllShapes.DEPOT.bounds();
AABB depotBox = AllShapes.CASING_13PX.get(Direction.UP)
.bounds();
AABB beltBox = depotBox.contract(0, -3 / 16f, 0)
.inflate(1, 0, 0);
BlockPos depotPos = util.grid.at(1, 1, 4);

View file

@ -619,7 +619,7 @@
"create.hint.mechanical_arm_no_targets": "It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "Deployer Item Overflow",
"create.hint.full_deployer.title": "Deployer cannot activate",
"create.hint.full_deployer": "It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.backtank.low": "Backtank pressure low",

View file

@ -3,6 +3,7 @@
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"5": "create:block/andesite_casing_piston",
"6": "create:block/piston_bottom",
"7": "create:block/piston_inner",
"particle": "create:block/gearbox_top",
@ -44,7 +45,7 @@
"south": {"uv": [0, 0, 16, 2], "texture": "#andesite_casing_short"},
"west": {"uv": [14, 0, 16, 10], "rotation": 90, "texture": "#gearbox_top"},
"up": {"uv": [0, 0, 16, 10], "rotation": 180, "texture": "#gearbox_top"},
"down": {"uv": [0, 4, 16, 14], "texture": "#andesite_casing_short"}
"down": {"uv": [0, 4, 16, 14], "texture": "#5"}
}
},
{
@ -55,7 +56,7 @@
"east": {"uv": [14, 0, 16, 10], "rotation": 270, "texture": "#gearbox_top"},
"south": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#andesite_casing_short"},
"west": {"uv": [16, 0, 14, 10], "rotation": 90, "texture": "#gearbox_top"},
"up": {"uv": [0, 4, 16, 14], "rotation": 180, "texture": "#andesite_casing_short"},
"up": {"uv": [0, 4, 16, 14], "rotation": 180, "texture": "#5"},
"down": {"uv": [0, 0, 16, 10], "texture": "#gearbox_top"}
}
}

View file

@ -7,6 +7,7 @@
"1": "create:block/axis_top",
"6": "create:block/piston_bottom",
"7": "create:block/piston_inner",
"10": "create:block/andesite_casing_piston",
"18": "create:block/deployer",
"particle": "create:block/axis",
"gearbox_top": "create:block/gearbox_top",
@ -45,7 +46,7 @@
"from": [14, 0, 2],
"to": [16, 16, 12],
"faces": {
"east": {"uv": [0, 4, 16, 14], "rotation": 270, "texture": "#andesite_casing_short"},
"east": {"uv": [0, 4, 16, 14], "rotation": 270, "texture": "#10"},
"south": {"uv": [0, 0, 16, 2], "rotation": 270, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 0, 16, 10], "rotation": 90, "texture": "#gearbox_top"},
"up": {"uv": [16, 0, 14, 10], "rotation": 180, "texture": "#gearbox_top"},
@ -59,7 +60,7 @@
"faces": {
"east": {"uv": [0, 0, 16, 10], "rotation": 270, "texture": "#gearbox_top"},
"south": {"uv": [0, 0, 16, 2], "rotation": 90, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 4, 16, 14], "rotation": 90, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 4, 16, 14], "rotation": 90, "texture": "#10"},
"up": {"uv": [14, 0, 16, 10], "rotation": 180, "texture": "#gearbox_top"},
"down": {"uv": [16, 0, 14, 10], "texture": "#gearbox_top"}
}

View file

@ -3,6 +3,7 @@
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"5": "create:block/andesite_casing_piston",
"6": "create:block/piston_bottom",
"7": "create:block/piston_inner",
"particle": "create:block/gearbox_top",
@ -40,7 +41,7 @@
"from": [14, 0, 2],
"to": [16, 16, 12],
"faces": {
"east": {"uv": [0, 4, 16, 14], "rotation": 270, "texture": "#andesite_casing_short"},
"east": {"uv": [0, 4, 16, 14], "rotation": 270, "texture": "#5"},
"south": {"uv": [0, 0, 16, 2], "rotation": 270, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 0, 16, 10], "rotation": 90, "texture": "#gearbox_top"},
"up": {"uv": [16, 0, 14, 10], "rotation": 180, "texture": "#gearbox_top"},
@ -54,7 +55,7 @@
"faces": {
"east": {"uv": [0, 0, 16, 10], "rotation": 270, "texture": "#gearbox_top"},
"south": {"uv": [0, 0, 16, 2], "rotation": 90, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 4, 16, 14], "rotation": 90, "texture": "#andesite_casing_short"},
"west": {"uv": [0, 4, 16, 14], "rotation": 90, "texture": "#5"},
"up": {"uv": [14, 2, 16, 12], "rotation": 180, "texture": "#gearbox_top"},
"down": {"uv": [16, 0, 14, 10], "texture": "#gearbox_top"}
}

View file

@ -1,88 +1,80 @@
{
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
"textures": {
"particle": "create:block/gearbox_top",
"slit": "create:block/mechanical_saw_top",
"gearbox_top": "create:block/gearbox_top",
"encased_belt": "create:block/encased_chain_drive",
"gearbox": "create:block/gearbox",
"andesite_casing_short": "create:block/andesite_casing_short"
},
"credit": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
"parent": "create:block/block",
"elements": [
{
"name": "Bottom",
"from": [ 0, 0, 0 ],
"to": [ 16, 2, 12 ],
"faces": {
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 14, 16, 16 ] },
"east": { "texture": "#andesite_casing_short", "uv": [ 4, 14, 16, 16 ] },
"south": { "texture": "#encased_belt", "uv": [ 0, 14, 16, 16 ] },
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 14, 12, 16 ] },
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }
}
},
{
"name": "Top",
"from": [ 0, 14, 0 ],
"to": [ 16, 16, 12 ],
"faces": {
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 6 ] },
"east": { "texture": "#andesite_casing_short", "uv": [ 4, 4, 16, 6 ] },
"south": { "texture": "#encased_belt", "uv": [ 0, 0, 16, 2 ] },
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 12, 6 ] },
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }
}
},
{
"name": "Back",
"from": [ 0, 2, 0 ],
"to": [ 2, 14, 2 ],
"faces": {
"north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
"east": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
"west": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }
}
},
{
"name": "Inner",
"from": [ 0, 2, 2 ],
"to": [ 16, 14, 11 ],
"faces": {
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 6, 14, 15 ], "rotation": 90 },
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 16, 14 ] },
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 6, 14, 15 ], "rotation": 270 }
}
},
{
"name": "SawSlit",
"from": [ 1, 7, 11.062 ],
"to": [ 15, 9, 11.062 ],
"faces": {
"south": { "texture": "#slit", "uv": [ 1, 7, 15, 9 ] }
}
},
{
"name": "Back",
"from": [ 14, 2, 0 ],
"to": [ 16, 14, 2 ],
"faces": {
"north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
"east": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
"west": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }
}
},
{
"name": "Back",
"from": [ 2, 2, 1 ],
"to": [ 14, 14, 2 ],
"faces": {
"north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] }
}
}
]
"textures": {
"slit": "create:block/mechanical_saw_top_no_slot",
"particle": "create:block/gearbox_top",
"gearbox_top": "create:block/gearbox_top",
"encased_belt": "create:block/encased_chain_drive",
"gearbox": "create:block/gearbox",
"andesite_casing_short": "create:block/andesite_casing_short"
},
"elements": [
{
"name": "Bottom",
"from": [0, 0, 0],
"to": [16, 2, 12],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#andesite_casing_short"},
"east": {"uv": [4, 14, 16, 16], "texture": "#andesite_casing_short"},
"south": {"uv": [0, 14, 16, 16], "texture": "#encased_belt"},
"west": {"uv": [0, 14, 12, 16], "texture": "#andesite_casing_short"},
"up": {"uv": [0, 4, 16, 16], "texture": "#andesite_casing_short"},
"down": {"uv": [0, 4, 16, 16], "texture": "#andesite_casing_short"}
}
},
{
"name": "Top",
"from": [0, 14, 0],
"to": [16, 16, 12],
"faces": {
"north": {"uv": [0, 4, 16, 6], "texture": "#andesite_casing_short"},
"east": {"uv": [4, 4, 16, 6], "texture": "#andesite_casing_short"},
"south": {"uv": [0, 0, 16, 2], "texture": "#encased_belt"},
"west": {"uv": [0, 4, 12, 6], "texture": "#andesite_casing_short"},
"up": {"uv": [0, 4, 16, 16], "texture": "#andesite_casing_short"},
"down": {"uv": [0, 4, 16, 16], "texture": "#andesite_casing_short"}
}
},
{
"name": "Back",
"from": [0, 2, 0],
"to": [2, 14, 2],
"faces": {
"north": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"},
"east": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"},
"south": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"},
"west": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}
}
},
{
"name": "Inner",
"from": [0, 2, 2],
"to": [16, 14, 11],
"faces": {
"east": {"uv": [2, 6, 14, 15], "rotation": 90, "texture": "#andesite_casing_short"},
"south": {"uv": [0, 2, 16, 14], "texture": "#slit"},
"west": {"uv": [2, 6, 14, 15], "rotation": 270, "texture": "#andesite_casing_short"}
}
},
{
"name": "Back",
"from": [14, 2, 0],
"to": [16, 14, 2],
"faces": {
"north": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"},
"east": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"},
"south": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"},
"west": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}
}
},
{
"name": "Back",
"from": [2, 2, 1],
"to": [14, 14, 2],
"faces": {
"north": {"uv": [2, 2, 14, 14], "texture": "#gearbox"}
}
}
]
}

View file

@ -2,7 +2,7 @@
"credit": "Made with Blockbench",
"parent": "create:block/block",
"textures": {
"slit": "create:block/mechanical_saw_top",
"slit": "create:block/mechanical_saw_top_no_slot",
"stonecutter_saw": "block/stonecutter_saw",
"particle": "create:block/gearbox_top",
"gearbox_top": "create:block/gearbox_top",
@ -54,18 +54,10 @@
"to": [16, 14, 11],
"faces": {
"east": {"uv": [2, 6, 14, 15], "rotation": 90, "texture": "#andesite_casing_short"},
"south": {"uv": [0, 2, 16, 14], "texture": "#gearbox_top"},
"south": {"uv": [0, 2, 16, 14], "texture": "#slit"},
"west": {"uv": [2, 6, 14, 15], "rotation": 270, "texture": "#andesite_casing_short"}
}
},
{
"name": "SawSlit",
"from": [1, 7, 11.062],
"to": [15, 9, 11.062],
"faces": {
"south": {"uv": [1, 7, 15, 9], "texture": "#slit"}
}
},
{
"name": "Blade",
"from": [1, 8, 11],

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B