Dangly Flaps

- More progress on Crafter blocks
- Belt tunnels now render dangling flaps reacting to bypassing items
- Made Mechanical Press and Mixer full blocks
This commit is contained in:
simibubi 2019-11-30 00:27:03 +01:00
parent 898b3f055e
commit 3a7d3f8562
34 changed files with 891 additions and 353 deletions

View file

@ -5,6 +5,7 @@ import com.simibubi.create.foundation.block.IWithoutBlockItem;
import com.simibubi.create.foundation.block.ProperStairsBlock; import com.simibubi.create.foundation.block.ProperStairsBlock;
import com.simibubi.create.foundation.block.RenderUtilityAxisBlock; import com.simibubi.create.foundation.block.RenderUtilityAxisBlock;
import com.simibubi.create.foundation.block.RenderUtilityBlock; import com.simibubi.create.foundation.block.RenderUtilityBlock;
import com.simibubi.create.foundation.block.RenderUtilityDirectionalBlock;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.modules.IModule; import com.simibubi.create.modules.IModule;
import com.simibubi.create.modules.contraptions.generators.MotorBlock; import com.simibubi.create.modules.contraptions.generators.MotorBlock;
@ -125,7 +126,10 @@ public enum AllBlocks {
MECHANICAL_MIXER_HEAD(new RenderUtilityBlock()), MECHANICAL_MIXER_HEAD(new RenderUtilityBlock()),
BASIN(new BasinBlock()), BASIN(new BasinBlock()),
MECHANICAL_CRAFTER(new MechanicalCrafterBlock()), MECHANICAL_CRAFTER(new MechanicalCrafterBlock()),
MECHANICAL_CRAFTER_LID(new MechanicalCrafterBlock.Lid()), MECHANICAL_CRAFTER_LID(new RenderUtilityDirectionalBlock()),
MECHANICAL_CRAFTER_ARROW(new RenderUtilityDirectionalBlock()),
MECHANICAL_CRAFTER_BELT_FRAME(new RenderUtilityDirectionalBlock()),
MECHANICAL_CRAFTER_BELT(new RenderUtilityDirectionalBlock()),
MECHANICAL_PISTON(new MechanicalPistonBlock(false)), MECHANICAL_PISTON(new MechanicalPistonBlock(false)),
STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)), STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)),

View file

@ -30,6 +30,7 @@ import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalB
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity; 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.constructs.MechanicalPistonTileEntityRenderer;
import com.simibubi.create.modules.contraptions.receivers.crafter.MechanicalCrafterTileEntity; import com.simibubi.create.modules.contraptions.receivers.crafter.MechanicalCrafterTileEntity;
import com.simibubi.create.modules.contraptions.receivers.crafter.MechanicalCrafterTileEntityRenderer;
import com.simibubi.create.modules.contraptions.relays.ClutchTileEntity; import com.simibubi.create.modules.contraptions.relays.ClutchTileEntity;
import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntity; import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntity;
import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntityRenderer; import com.simibubi.create.modules.contraptions.relays.EncasedShaftTileEntityRenderer;
@ -102,10 +103,7 @@ public enum AllTileEntities {
BELT_TUNNEL(BeltTunnelTileEntity::new, AllBlocks.BELT_TUNNEL), BELT_TUNNEL(BeltTunnelTileEntity::new, AllBlocks.BELT_TUNNEL),
MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON), MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON),
MECHANICAL_BEARING(MechanicalBearingTileEntity::new, AllBlocks.MECHANICAL_BEARING), MECHANICAL_BEARING(MechanicalBearingTileEntity::new, AllBlocks.MECHANICAL_BEARING),
CHASSIS( CHASSIS(ChassisTileEntity::new, AllBlocks.ROTATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS,
ChassisTileEntity::new,
AllBlocks.ROTATION_CHASSIS,
AllBlocks.TRANSLATION_CHASSIS,
AllBlocks.TRANSLATION_CHASSIS_SECONDARY), AllBlocks.TRANSLATION_CHASSIS_SECONDARY),
DRILL(DrillTileEntity::new, AllBlocks.DRILL), DRILL(DrillTileEntity::new, AllBlocks.DRILL),
SAW(SawTileEntity::new, AllBlocks.SAW), SAW(SawTileEntity::new, AllBlocks.SAW),
@ -198,6 +196,7 @@ public enum AllTileEntities {
bind(LogisticiansTableTileEntity.class, new LogisticiansTableTileEntityRenderer()); bind(LogisticiansTableTileEntity.class, new LogisticiansTableTileEntityRenderer());
bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer()); bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer());
bind(MechanicalMixerTileEntity.class, new MechanicalMixerTileEntityRenderer()); bind(MechanicalMixerTileEntity.class, new MechanicalMixerTileEntityRenderer());
bind(MechanicalCrafterTileEntity.class, new MechanicalCrafterTileEntityRenderer());
bind(BasinTileEntity.class, new BasinTileEntityRenderer()); bind(BasinTileEntity.class, new BasinTileEntityRenderer());
} }

View file

@ -5,11 +5,10 @@ import java.util.function.Consumer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
public interface IWithTileEntity<T extends TileEntity> { public interface IWithTileEntity<T extends TileEntity> {
default void withTileEntityDo(IWorld world, BlockPos pos, Consumer<T> action) { default void withTileEntityDo(IBlockReader world, BlockPos pos, Consumer<T> action) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
T te = (T) world.getTileEntity(pos); T te = (T) world.getTileEntity(pos);
if (te == null) if (te == null)

View file

@ -0,0 +1,11 @@
package com.simibubi.create.foundation.block;
import net.minecraft.block.material.Material;
public class RenderUtilityDirectionalBlock extends ProperDirectionalBlock implements IRenderUtilityBlock {
public RenderUtilityDirectionalBlock() {
super(Properties.create(Material.AIR));
}
}

View file

@ -91,6 +91,9 @@ public class SuperByteBuffer {
} }
t.setIdentity(); t.setIdentity();
shouldShiftUV = false;
shouldColor = false;
shouldLight = false;
return mutable; return mutable;
} }
@ -141,6 +144,13 @@ public class SuperByteBuffer {
return this; return this;
} }
public SuperByteBuffer dontShiftUV() {
shouldShiftUV = false;
uShift = 0;
vShift = 0;
return this;
}
public SuperByteBuffer light(int packedLightCoords) { public SuperByteBuffer light(int packedLightCoords) {
shouldLight = true; shouldLight = true;
this.packedLightCoords = packedLightCoords; this.packedLightCoords = packedLightCoords;

View file

@ -37,7 +37,7 @@ import net.minecraft.world.World;
public class MechanicalPressBlock extends HorizontalKineticBlock public class MechanicalPressBlock extends HorizontalKineticBlock
implements IWithTileEntity<MechanicalPressTileEntity>, IBeltAttachment { implements IWithTileEntity<MechanicalPressTileEntity>, IBeltAttachment {
public static VoxelShape SHAPE = makeCuboidShape(0, 2, 0, 16, 16, 16); public static VoxelShape SHAPE = makeCuboidShape(0, 0, 0, 16, 16, 16);
public MechanicalPressBlock() { public MechanicalPressBlock() {
super(Properties.from(Blocks.PISTON)); super(Properties.from(Blocks.PISTON));

View file

@ -1,16 +1,13 @@
package com.simibubi.create.modules.contraptions.receivers.crafter; package com.simibubi.create.modules.contraptions.receivers.crafter;
import com.simibubi.create.foundation.block.IWithTileEntity; import com.simibubi.create.foundation.block.IWithTileEntity;
import com.simibubi.create.foundation.block.RenderUtilityBlock;
import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock; import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.state.DirectionProperty; import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -20,17 +17,10 @@ import net.minecraft.world.World;
public class MechanicalCrafterBlock extends DirectionalKineticBlock public class MechanicalCrafterBlock extends DirectionalKineticBlock
implements IWithTileEntity<MechanicalCrafterTileEntity> { implements IWithTileEntity<MechanicalCrafterTileEntity> {
public static final DirectionProperty OUTPUT = BlockStateProperties.HORIZONTAL_FACING;
public MechanicalCrafterBlock() { public MechanicalCrafterBlock() {
super(Properties.from(Blocks.GOLD_BLOCK)); super(Properties.from(Blocks.GOLD_BLOCK));
} }
@Override
protected void fillStateContainer(Builder<Block, BlockState> builder) {
super.fillStateContainer(builder.add(OUTPUT));
}
@Override @Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) { public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new MechanicalCrafterTileEntity(); return new MechanicalCrafterTileEntity();
@ -50,12 +40,19 @@ public class MechanicalCrafterBlock extends DirectionalKineticBlock
public Axis getRotationAxis(BlockState state) { public Axis getRotationAxis(BlockState state) {
return state.get(FACING).getAxis(); return state.get(FACING).getAxis();
} }
public static class Lid extends RenderUtilityBlock { @Override
@Override public BlockState getStateForPlacement(BlockItemUseContext context) {
protected void fillStateContainer(Builder<Block, BlockState> builder) { BlockPos placedOnPos = context.getPos().offset(context.getFace().getOpposite());
super.fillStateContainer(builder.add(BlockStateProperties.FACING)); BlockState blockState = context.getWorld().getBlockState(placedOnPos);
} if ((blockState.getBlock() == this) && !context.isPlacerSneaking())
return getDefaultState().with(FACING, blockState.get(FACING));
return super.getStateForPlacement(context);
}
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT_MIPPED;
} }
} }

View file

@ -8,5 +8,10 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
public MechanicalCrafterTileEntity() { public MechanicalCrafterTileEntity() {
super(AllTileEntities.MECHANICAL_CRAFTER.type); super(AllTileEntities.MECHANICAL_CRAFTER.type);
} }
@Override
public boolean hasFastRenderer() {
return false;
}
} }

View file

@ -20,6 +20,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.ListNBT;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
@ -139,6 +140,16 @@ public class BeltInventory {
} }
} }
// Client: Belt tunnel flaps
if (onClient) {
int seg1 = (int) current.beltPosition;
int seg2 = (int) (current.beltPosition + limitedMovement);
if (seg1 != seg2) {
flapTunnel(seg1, belt.getMovementFacing(), false);
flapTunnel(seg2, belt.getMovementFacing().getOpposite(), true);
}
}
// Apply Movement // Apply Movement
current.beltPosition += limitedMovement; current.beltPosition += limitedMovement;
current.sideOffset += (current.getTargetSideOffset() - current.sideOffset) * Math.abs(limitedMovement) * 2f; current.sideOffset += (current.getTargetSideOffset() - current.sideOffset) * Math.abs(limitedMovement) * 2f;
@ -168,6 +179,7 @@ public class BeltInventory {
if (world.isRemote) if (world.isRemote)
continue; continue;
int lastOffset = beltMovementPositive ? belt.beltLength - 1 : 0;
BlockPos nextPosition = getPositionForOffset(beltMovementPositive ? belt.beltLength : -1); BlockPos nextPosition = getPositionForOffset(beltMovementPositive ? belt.beltLength : -1);
BlockState state = world.getBlockState(nextPosition); BlockState state = world.getBlockState(nextPosition);
Direction movementFacing = belt.getMovementFacing(); Direction movementFacing = belt.getMovementFacing();
@ -189,6 +201,7 @@ public class BeltInventory {
if (remainder.isEmpty()) { if (remainder.isEmpty()) {
iterator.remove(); iterator.remove();
current = null; current = null;
flapTunnel(lastOffset, belt.getMovementFacing(), false);
} }
belt.sendData(); belt.sendData();
@ -203,6 +216,7 @@ public class BeltInventory {
eject(current); eject(current);
iterator.remove(); iterator.remove();
current = null; current = null;
flapTunnel(lastOffset, belt.getMovementFacing(), false);
belt.sendData(); belt.sendData();
} }
continue; continue;
@ -223,6 +237,7 @@ public class BeltInventory {
if (nextBelt.tryInsertingFromSide(movementFacing, current, false)) { if (nextBelt.tryInsertingFromSide(movementFacing, current, false)) {
iterator.remove(); iterator.remove();
current = null; current = null;
flapTunnel(lastOffset, belt.getMovementFacing(), false);
belt.sendData(); belt.sendData();
} }
@ -232,6 +247,20 @@ public class BeltInventory {
} }
private void flapTunnel(int offset, Direction side, boolean inward) {
if (belt.getBlockState().get(BeltBlock.SLOPE) != Slope.HORIZONTAL)
return;
BlockPos pos = getPositionForOffset(offset).up();
if (!AllBlocks.BELT_TUNNEL.typeOf(belt.getWorld().getBlockState(pos)))
return;
TileEntity te = belt.getWorld().getTileEntity(pos);
if (te == null || !(te instanceof BeltTunnelTileEntity))
return;
if (side.getAxis() == Axis.Z)
side = side.getOpposite();
((BeltTunnelTileEntity) te).flap(side, inward ^ side.getAxis() == Axis.Z);
}
public boolean canInsertAt(int segment) { public boolean canInsertAt(int segment) {
return canInsertFrom(segment, Direction.UP); return canInsertFrom(segment, Direction.UP);
} }

View file

@ -320,6 +320,18 @@ public class BeltTileEntity extends KineticTileEntity {
nextInventory.insert(transportedStack); nextInventory.insert(transportedStack);
nextBeltController.markDirty(); nextBeltController.markDirty();
nextBeltController.sendData(); nextBeltController.sendData();
if (side.getAxis().isHorizontal()) {
if (AllBlocks.BELT_TUNNEL.typeOf(world.getBlockState(pos.up()))) {
TileEntity tileEntity = world.getTileEntity(pos.up());
if (tileEntity != null && tileEntity instanceof BeltTunnelTileEntity) {
if (side.getAxis() == Axis.X)
side = side.getOpposite();
((BeltTunnelTileEntity) tileEntity).flap(side, side.getAxis() == Axis.X);
}
}
}
return true; return true;
} }

View file

@ -63,18 +63,22 @@ public class BeltTileEntityRenderer extends TileEntityRenderer<BeltTileEntity> {
beltBuffer.color(te.color == -1 ? 0x808080 : te.color); beltBuffer.color(te.color == -1 ? 0x808080 : te.color);
// UV shift // UV shift
if (te.getSpeed() != 0) { float speed = te.getSpeed();
if (animatedTexture == null) if (animatedTexture == null)
animatedTexture = SpriteShifter.get("block/belt", "block/belt_animated"); animatedTexture = SpriteShifter.get("block/belt", "block/belt_animated");
if (speed != 0) {
float time = AnimationTickHolder.getRenderTick() float time = AnimationTickHolder.getRenderTick()
* te.getBlockState().get(HORIZONTAL_FACING).getAxisDirection().getOffset(); * te.getBlockState().get(HORIZONTAL_FACING).getAxisDirection().getOffset();
int textureIndex = (int) ((te.getSpeed() * time / 8) % 16); if (renderedState.get(BeltBlock.HORIZONTAL_FACING).getAxis() == Axis.X)
speed = -speed;
int textureIndex = (int) ((speed * time / 8) % 16);
if (textureIndex < 0) if (textureIndex < 0)
textureIndex += 16; textureIndex += 16;
beltBuffer.shiftUVtoSheet(animatedTexture.getOriginal(), animatedTexture.getTarget(), beltBuffer.shiftUVtoSheet(animatedTexture.getOriginal(), animatedTexture.getTarget(),
(textureIndex % 4) * 16, (textureIndex / 4) * 16); (textureIndex % 4) * 16, (textureIndex / 4) * 16);
} else {
beltBuffer.shiftUVtoSheet(animatedTexture.getOriginal(), animatedTexture.getTarget(), 0, 0);
} }
int packedLightmapCoords = te.getBlockState().getPackedLightmapCoords(getWorld(), te.getPos()); int packedLightmapCoords = te.getBlockState().getPackedLightmapCoords(getWorld(), te.getPos());
@ -148,7 +152,7 @@ public class BeltTileEntityRenderer extends TileEntityRenderer<BeltTileEntity> {
} }
if (blockItem) { if (blockItem) {
GlStateManager.translated(r.nextFloat() * .25f, 0, r.nextFloat() * .25f); GlStateManager.translated(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i);
} }
GlStateManager.scaled(.5, .5, .5); GlStateManager.scaled(.5, .5, .5);

View file

@ -1,6 +1,7 @@
package com.simibubi.create.modules.contraptions.relays.belt; package com.simibubi.create.modules.contraptions.relays.belt;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.block.IWithTileEntity;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.modules.contraptions.relays.belt.BeltBlock.Slope; import com.simibubi.create.modules.contraptions.relays.belt.BeltBlock.Slope;
@ -19,12 +20,14 @@ import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.IStringSerializable; import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
public class BeltTunnelBlock extends Block { public class BeltTunnelBlock extends Block implements IWithTileEntity<BeltTunnelTileEntity> {
public static final IProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class); public static final IProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
public static final IProperty<Axis> HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; public static final IProperty<Axis> HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS;
@ -42,12 +45,28 @@ public class BeltTunnelBlock extends Block {
return Lang.asId(name()); return Lang.asId(name());
} }
} }
@Override @Override
public boolean hasTileEntity(BlockState state) { public boolean hasTileEntity(BlockState state) {
return true; return true;
} }
@Override
public boolean isSolid(BlockState state) {
return false;
}
@Override
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return BeltTunnelShapes.getFilledShape(state);
}
@Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
ISelectionContext context) {
return BeltTunnelShapes.getFrameShape(state);
}
@Override @Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) { public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new BeltTunnelTileEntity(); return new BeltTunnelTileEntity();
@ -80,6 +99,7 @@ public class BeltTunnelBlock extends Block {
@Override @Override
public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld worldIn,
BlockPos currentPos, BlockPos facingPos) { BlockPos currentPos, BlockPos facingPos) {
withTileEntityDo(worldIn, currentPos, BeltTunnelTileEntity::initFlaps);
return getTunnelState(worldIn, currentPos); return getTunnelState(worldIn, currentPos);
} }

View file

@ -0,0 +1,54 @@
package com.simibubi.create.modules.contraptions.relays.belt;
import static com.simibubi.create.foundation.utility.VoxelShaper.forHorizontalAxis;
import static net.minecraft.block.Block.makeCuboidShape;
import static net.minecraft.util.math.shapes.VoxelShapes.or;
import com.simibubi.create.foundation.utility.VoxelShaper;
import net.minecraft.block.BlockState;
import net.minecraft.util.Direction;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
public class BeltTunnelShapes {
private static final VoxelShape TOP = makeCuboidShape(0, 8, 0, 16, 16, 16),
INNER = makeCuboidShape(2, -5, 2, 14, 16, 14);
private static final VoxelShaper WALL = VoxelShaper.forHorizontal(makeCuboidShape(0, -5, 14, 16, 16, 16)),
POLES = VoxelShaper
.forHorizontal(or(makeCuboidShape(0, -5, 14, 2, 16, 16), makeCuboidShape(14, -5, 14, 16, 16, 16)));
private static final VoxelShaper STRAIGHT = forHorizontalAxis(
VoxelShapes.or(TOP, WALL.get(Direction.EAST), WALL.get(Direction.WEST))),
T_LEFT = forHorizontalAxis(VoxelShapes.or(TOP, WALL.get(Direction.EAST), POLES.get(Direction.WEST))),
T_RIGHT = forHorizontalAxis(VoxelShapes.or(TOP, POLES.get(Direction.EAST), WALL.get(Direction.WEST))),
CROSS = forHorizontalAxis(VoxelShapes.or(TOP, POLES.get(Direction.EAST), POLES.get(Direction.WEST)));
public static VoxelShape getFrameShape(BlockState state) {
VoxelShaper shaper = null;
switch (state.get(BeltTunnelBlock.SHAPE)) {
case CROSS:
shaper = CROSS;
break;
case T_LEFT:
shaper = T_LEFT;
break;
case T_RIGHT:
shaper = T_RIGHT;
break;
case STRAIGHT:
case WINDOW:
default:
shaper = STRAIGHT;
break;
}
return shaper.get(state.get(BeltTunnelBlock.HORIZONTAL_AXIS));
}
public static VoxelShape getFilledShape(BlockState state) {
return or(getFrameShape(state), INNER);
}
}

View file

@ -1,30 +1,133 @@
package com.simibubi.create.modules.contraptions.relays.belt; package com.simibubi.create.modules.contraptions.relays.belt;
import java.util.HashMap;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.block.SyncedTileEntity; import com.simibubi.create.foundation.block.SyncedTileEntity;
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
import com.simibubi.create.modules.contraptions.relays.belt.BeltTunnelBlock.Shape;
import net.minecraft.block.BlockState;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
public class BeltTunnelTileEntity extends SyncedTileEntity { public class BeltTunnelTileEntity extends SyncedTileEntity implements ITickableTileEntity {
public HashMap<Direction, InterpolatedChasingValue> flaps;
private LazyOptional<IItemHandler> cap = LazyOptional.empty();
private boolean initialize;
private Direction flapToSend;
private boolean flapInward;
public BeltTunnelTileEntity() { public BeltTunnelTileEntity() {
super(AllTileEntities.BELT_TUNNEL.type); super(AllTileEntities.BELT_TUNNEL.type);
flaps = new HashMap<>();
initialize = true;
} }
@Override @Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) { public <T> LazyOptional<T> getCapability(Capability<T> capabitily, Direction side) {
if (AllBlocks.BELT.typeOf(world.getBlockState(pos.down()))) { if (capabitily == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
TileEntity teBelow = world.getTileEntity(pos.down()); if (!this.cap.isPresent()) {
if (teBelow != null) if (AllBlocks.BELT.typeOf(world.getBlockState(pos.down()))) {
return teBelow.getCapability(cap, Direction.UP); TileEntity teBelow = world.getTileEntity(pos.down());
if (teBelow != null)
cap = LazyOptional.of(() -> teBelow.getCapability(capabitily, Direction.UP).orElse(null))
.cast();
}
}
return this.cap.cast();
}
return super.getCapability(capabitily, side);
}
@Override
public void remove() {
super.remove();
cap.invalidate();
}
@Override
public CompoundNBT writeToClient(CompoundNBT tag) {
CompoundNBT writeToClient = super.writeToClient(tag);
if (flapToSend != null) {
writeToClient.putInt("Flap", flapToSend.getIndex());
writeToClient.putBoolean("FlapInward", flapInward);
flapToSend = null;
}
return writeToClient;
}
@Override
public void readClientUpdate(CompoundNBT tag) {
super.readClientUpdate(tag);
if (tag.contains("Flap")) {
Direction side = Direction.byIndex(tag.getInt("Flap"));
flap(side, tag.getBoolean("FlapInward"));
} else
initFlaps();
}
public void initFlaps() {
if (!world.isRemote) {
sendData();
return;
} }
return super.getCapability(cap, side); initialize = false;
flaps.clear();
BlockState tunnelState = getBlockState();
for (Direction direction : Direction.values()) {
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
^ direction.getAxis() == Axis.Z;
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;
}
flaps.put(direction, new InterpolatedChasingValue().target(0).withSpeed(.05f));
}
}
public void flap(Direction side, boolean inward) {
if (world.isRemote) {
if (flaps.containsKey(side))
flaps.get(side).set(inward ? -1 : 1);
return;
}
flapToSend = side;
flapInward = inward;
sendData();
}
@Override
public void tick() {
if (!world.isRemote)
return;
if (initialize)
initFlaps();
flaps.forEach((d, value) -> value.tick());
} }
} }

View file

@ -3,15 +3,13 @@ package com.simibubi.create.modules.contraptions.relays.belt;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.CreateClient; import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.utility.SuperByteBuffer; 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.block.BlockState;
import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.model.animation.TileEntityRendererFast; import net.minecraftforge.client.model.animation.TileEntityRendererFast;
@ -21,33 +19,37 @@ public class BeltTunnelTileEntityRenderer extends TileEntityRendererFast<BeltTun
public void renderTileEntityFast(BeltTunnelTileEntity te, double x, double y, double z, float partialTicks, public void renderTileEntityFast(BeltTunnelTileEntity te, double x, double y, double z, float partialTicks,
int destroyStage, BufferBuilder buffer) { int destroyStage, BufferBuilder buffer) {
BlockState flapState = AllBlocks.BELT_TUNNEL_FLAP.get().getDefaultState(); BlockState flapState = AllBlocks.BELT_TUNNEL_FLAP.get().getDefaultState();
BlockState tunnelState = te.getBlockState();
SuperByteBuffer flapBuffer = CreateClient.bufferCache.renderGenericBlockModel(flapState); SuperByteBuffer flapBuffer = CreateClient.bufferCache.renderGenericBlockModel(flapState);
BlockPos pos = te.getPos(); BlockPos pos = te.getPos();
World world = getWorld(); World world = getWorld();
for (Direction direction : Direction.values()) { for (Direction direction : Direction.values()) {
// TODO: move flap presence to TE if (!te.flaps.containsKey(direction))
if (direction.getAxis().isVertical())
continue; continue;
if (AllBlocks.BELT_TUNNEL.typeOf(world.getBlockState(pos.offset(direction))))
continue; float horizontalAngle = direction.getHorizontalAngle() + 90;
if (direction.getAxis() != tunnelState.get(BlockStateProperties.HORIZONTAL_AXIS)) { if (direction.getAxis() != Axis.X)
boolean positive = direction.getAxisDirection() == AxisDirection.POSITIVE; horizontalAngle += 180;
Shape shape = tunnelState.get(BeltTunnelBlock.SHAPE);
if (shape == Shape.STRAIGHT || shape == Shape.WINDOW) float flapPivotX = -15 / 16f;
continue; float flapPivotY = -.5f;
if (positive && shape == Shape.T_LEFT) float flapPivotZ = 0;
continue; for (int segment = 0; segment <= 3; segment++) {
if (!positive && shape == Shape.T_RIGHT)
continue; float f = te.flaps.get(direction).get(partialTicks);
if (direction.getAxis() == Axis.X)
f *= -1;
float intensity = segment == 3 ? 1.5f : segment + 1;
float flapAngle = MathHelper.sin((float) ((1 - Math.abs(f)) * Math.PI * intensity)) * 30 * -f;
flapAngle = (float) (flapAngle / 180 * Math.PI);
flapBuffer.translate(0, 0, -segment * 3 / 16f);
flapBuffer.translate(flapPivotX, flapPivotY, flapPivotZ).rotate(Axis.Z, flapAngle)
.translate(-flapPivotX, -flapPivotY, -flapPivotZ);
flapBuffer.rotateCentered(Axis.Y, (float) (horizontalAngle / 180f * Math.PI)).translate(x, y, z);
flapBuffer.light(te.getBlockState().getPackedLightmapCoords(world, pos)).renderInto(buffer);
} }
// 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);
} }
} }

View file

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "create:block/belt_tunnel/flap" }
}
}

View file

@ -5,12 +5,12 @@
}, },
"variants": { "variants": {
"facing": { "facing": {
"north": { "y": 180 }, "north": { "x": 90 },
"south": { }, "south": { "x": 90, "y": 180 },
"west": { "y": 90 }, "west": { "x": 90, "y": 270 },
"up": { "x": 90 }, "up": { },
"down": { "x": 270 }, "down": { "x": 180 },
"east": { "y": 270 } "east": { "x": 90, "y": 90 }
} }
} }
} }

View file

@ -0,0 +1,16 @@
{
"forge_marker": 1,
"defaults": {
"model": "create:block/crafter/arrow"
},
"variants": {
"facing": {
"north": { "y": 180 },
"south": { },
"west": { "y": 90 },
"up": { "x": 90 },
"down": { "x": 270 },
"east": { "y": 270 }
}
}
}

View file

@ -0,0 +1,16 @@
{
"forge_marker": 1,
"defaults": {
"model": "create:block/crafter/belt_animated"
},
"variants": {
"facing": {
"north": { "y": 180 },
"south": { },
"west": { "y": 90 },
"up": { "x": 90 },
"down": { "x": 270 },
"east": { "y": 270 }
}
}
}

View file

@ -0,0 +1,16 @@
{
"forge_marker": 1,
"defaults": {
"model": "create:block/crafter/belt"
},
"variants": {
"facing": {
"north": { "y": 180 },
"south": { },
"west": { "y": 90 },
"up": { "x": 90 },
"down": { "x": 270 },
"east": { "y": 270 }
}
}
}

View file

@ -71,6 +71,7 @@
"block.create.mechanical_press": "Mechanical Press", "block.create.mechanical_press": "Mechanical Press",
"block.create.mechanical_mixer": "Mechanical Mixer", "block.create.mechanical_mixer": "Mechanical Mixer",
"block.create.basin": "Basin", "block.create.basin": "Basin",
"block.create.mechanical_crafter": "Mechanical Crafter",
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
"block.create.mechanical_piston": "Mechanical Piston", "block.create.mechanical_piston": "Mechanical Piston",

View file

@ -1,73 +0,0 @@
{
"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]
}
]
}

View file

@ -12,94 +12,70 @@
"to": [14, 16, 14], "to": [14, 16, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"east": {"uv": [16, 0, 10, 1], "texture": "#0"}, "north": {"uv": [16, 0, 10, 1], "texture": "#0"},
"west": {"uv": [16, 0, 10, 1], "texture": "#0"}, "south": {"uv": [16, 0, 10, 1], "texture": "#0"},
"up": {"uv": [1, 15, 7, 9], "rotation": 270, "texture": "#0"}, "up": {"uv": [1, 15, 7, 9], "texture": "#0"},
"down": {"uv": [7, 9, 1, 15], "rotation": 180, "texture": "#0"} "down": {"uv": [7, 9, 1, 15], "rotation": 90, "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", "name": "BackLeft",
"from": [0, -3, 14], "from": [14, -5, 0],
"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], "to": [16, -3, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, "north": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 15, 9.5, 16], "texture": "#0"}, "east": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}, "south": {"uv": [10, 15, 9, 16], "texture": "#0"},
"west": {"uv": [9, 15, 9.5, 16], "texture": "#0"} "west": {"uv": [10, 15, 9.5, 16], "rotation": 180, "texture": "#0"}
} }
}, },
{ {
"name": "BackLeft", "name": "BackLeft",
"from": [0, -5, 0], "from": [0, -5, 0],
"to": [1, -3, 1], "to": [2, -3, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, "north": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"east": {"uv": [9.5, 15, 9, 16], "texture": "#0"}, "east": {"uv": [9.5, 15, 10, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}, "south": {"uv": [9, 15, 10, 16], "texture": "#0"},
"west": {"uv": [9.5, 15, 9, 16], "texture": "#0"} "west": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"}
}
},
{
"name": "BackLeft",
"from": [14, -5, 15],
"to": [16, -3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [9, 15, 10, 16], "texture": "#0"},
"east": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"west": {"uv": [9.5, 15, 10, 16], "rotation": 180, "texture": "#0"}
}
},
{
"name": "BackLeft",
"from": [0, -5, 15],
"to": [2, -3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [10, 15, 9, 16], "texture": "#0"},
"east": {"uv": [10, 15, 9.5, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [10, 15, 9, 16], "rotation": 180, "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, 9.5, 9, 15], "rotation": 180, "texture": "#0"},
"east": {"uv": [10, 9.5, 9, 15], "texture": "#0"},
"south": {"uv": [10, 9.5, 9, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [10, 9.5, 9, 15], "texture": "#0"}
} }
}, },
{ {
@ -108,66 +84,90 @@
"to": [2, 8, 2], "to": [2, 8, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, "north": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, "east": {"uv": [9, 9.5, 10, 15], "texture": "#0"},
"south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, "south": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} "west": {"uv": [9, 9.5, 10, 15], "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, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 9.5, 10, 15], "texture": "#0"},
"south": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 9.5, 10, 15], "texture": "#0"}
}
},
{
"name": "FrontLeft",
"from": [0, -3, 14],
"to": [2, 8, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [10, 9.5, 9, 15], "rotation": 180, "texture": "#0"},
"east": {"uv": [10, 9.5, 9, 15], "texture": "#0"},
"south": {"uv": [10, 9.5, 9, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [10, 9.5, 9, 15], "texture": "#0"}
} }
}, },
{ {
"name": "FrontTop", "name": "FrontTop",
"from": [0, 8, 0], "from": [14, 8, 0],
"to": [16, 16, 2], "to": [16, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"}, "north": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"},
"east": {"uv": [10, 8, 9, 12], "texture": "#0"}, "east": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"},
"south": {"uv": [8, 0, 0, 4], "texture": "#0"}, "south": {"uv": [10, 8, 9, 12], "texture": "#0"},
"west": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, "west": {"uv": [8, 0, 0, 4], "texture": "#0"},
"up": {"uv": [7, 16, 8, 8], "rotation": 270, "texture": "#0"}, "up": {"uv": [7, 16, 8, 8], "texture": "#0"},
"down": {"uv": [16, 2.5, 8, 3.5], "rotation": 180, "texture": "#0"} "down": {"uv": [16, 2.5, 8, 3.5], "rotation": 90, "texture": "#0"}
} }
}, },
{ {
"name": "BackTop", "name": "BackTop",
"from": [0, 8, 2], "from": [2, 8, 0],
"to": [2, 16, 14], "to": [14, 16, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 24]}, "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": [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": { "faces": {
"north": {"uv": [10, 8, 9, 12], "texture": "#0"}, "north": {"uv": [10, 8, 9, 12], "texture": "#0"},
"east": {"uv": [8, 0, 0, 4], "texture": "#0"}, "east": {"uv": [8, 0, 0, 4], "texture": "#0"},
"south": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"}, "south": {"uv": [10, 8, 9, 12], "rotation": 180, "texture": "#0"},
"west": {"uv": [15, 2.5, 9, 6.5], "texture": "#0"}, "west": {"uv": [16, 2.5, 8, 6.5], "texture": "#0"},
"up": {"uv": [1, 8, 0, 16], "rotation": 180, "texture": "#0"}, "up": {"uv": [0, 16, 1, 8], "texture": "#0"},
"down": {"uv": [8, 6.5, 16, 5.5], "rotation": 270, "texture": "#0"} "down": {"uv": [16, 5.5, 8, 6.5], "rotation": 90, "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"}
} }
} }
], ],

View file

@ -0,0 +1,31 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"0": "create:block/belttunnel",
"particle": "create:block/belttunnel"
},
"elements": [
{
"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]
}
]
}

View file

@ -72,34 +72,10 @@
"to": [2, 8, 16], "to": [2, 8, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, "north": {"uv": [9, 9.5, 10, 15], "texture": "#0"},
"east": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, "east": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, "south": {"uv": [9, 9.5, 10, 15], "texture": "#0"},
"west": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"} "west": {"uv": [9, 9.5, 10, 15], "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"}
} }
}, },
{ {
@ -108,10 +84,10 @@
"to": [16, 8, 16], "to": [16, 8, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, "north": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 10.5, 10, 16], "texture": "#0"}, "east": {"uv": [9, 9.5, 10, 15], "texture": "#0"},
"south": {"uv": [9, 10.5, 10, 16], "rotation": 180, "texture": "#0"}, "south": {"uv": [9, 9.5, 10, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 10.5, 10, 16], "texture": "#0"} "west": {"uv": [9, 9.5, 10, 15], "texture": "#0"}
} }
}, },
{ {
@ -155,6 +131,30 @@
"up": {"uv": [0, 8, 1, 16], "texture": "#0"}, "up": {"uv": [0, 8, 1, 16], "texture": "#0"},
"down": {"uv": [8, 5.5, 16, 6.5], "rotation": 90, "texture": "#0"} "down": {"uv": [8, 5.5, 16, 6.5], "rotation": 90, "texture": "#0"}
} }
},
{
"name": "BackLeft",
"from": [14, -5, 15],
"to": [16, -3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [9, 15, 10, 16], "texture": "#0"},
"east": {"uv": [9, 15, 9.5, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"west": {"uv": [9.5, 15, 10, 16], "rotation": 180, "texture": "#0"}
}
},
{
"name": "BackLeft",
"from": [0, -5, 15],
"to": [2, -3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [10, 15, 9, 16], "texture": "#0"},
"east": {"uv": [10, 15, 9.5, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"},
"west": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"}
}
} }
], ],
"groups": [ "groups": [
@ -165,9 +165,8 @@
{ {
"name": "Cover", "name": "Cover",
"origin": [8, 8, 8], "origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
} }, 10, 11]
]
} }
] ]
} }

View file

@ -72,34 +72,10 @@
"to": [2, 8, 2], "to": [2, 8, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, "north": {"uv": [10, 9.5, 9, 15], "texture": "#0"},
"east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, "east": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, "south": {"uv": [10, 10.5, 9, 16], "texture": "#0"},
"west": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"} "west": {"uv": [10, 9.5, 9, 15], "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"}
} }
}, },
{ {
@ -109,9 +85,9 @@
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": { "faces": {
"north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, "north": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"},
"east": {"uv": [10, 10.5, 9, 16], "texture": "#0"}, "east": {"uv": [10, 9.5, 9, 15], "texture": "#0"},
"south": {"uv": [10, 10.5, 9, 16], "rotation": 180, "texture": "#0"}, "south": {"uv": [10, 9.5, 9, 15], "rotation": 180, "texture": "#0"},
"west": {"uv": [10, 10.5, 9, 16], "texture": "#0"} "west": {"uv": [10, 9.5, 9, 15], "texture": "#0"}
} }
}, },
{ {
@ -155,6 +131,34 @@
"up": {"uv": [0, 16, 1, 8], "texture": "#0"}, "up": {"uv": [0, 16, 1, 8], "texture": "#0"},
"down": {"uv": [16, 5.5, 8, 6.5], "rotation": 90, "texture": "#0"} "down": {"uv": [16, 5.5, 8, 6.5], "rotation": 90, "texture": "#0"}
} }
},
{
"name": "BackLeft",
"from": [0, -5, 0],
"to": [2, -3, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"east": {"uv": [9.5, 15, 10, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"west": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"},
"up": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"},
"down": {"uv": [9, 15, 10, 16], "rotation": 180, "texture": "#0"}
}
},
{
"name": "BackLeft",
"from": [14, -5, 0],
"to": [16, -3, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -24, 8]},
"faces": {
"north": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"},
"east": {"uv": [9.5, 15, 9, 16], "rotation": 180, "texture": "#0"},
"south": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"},
"west": {"uv": [10, 15, 9.5, 16], "rotation": 180, "texture": "#0"},
"up": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"},
"down": {"uv": [10, 15, 9, 16], "rotation": 180, "texture": "#0"}
}
} }
], ],
"groups": [ "groups": [
@ -165,9 +169,8 @@
{ {
"name": "Cover", "name": "Cover",
"origin": [8, 8, 8], "origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
} }, 10, 11]
]
} }
] ]
} }

View file

@ -0,0 +1,43 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"3": "create:block/crafter_thingies"
},
"elements": [
{
"name": "arrow",
"from": [5, 16, 12],
"to": [11, 17, 14],
"faces": {
"north": {"uv": [12, 0, 13, 6], "rotation": 90, "texture": "#3"},
"east": {"uv": [12, 0, 14, 1], "rotation": 180, "texture": "#3"},
"south": {"uv": [13, 0, 14, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [12, 5, 14, 6], "texture": "#3"},
"up": {"uv": [12, 0, 14, 6], "rotation": 90, "texture": "#3"}
}
},
{
"name": "arrow",
"from": [6, 16, 14],
"to": [10, 17, 15],
"faces": {
"east": {"uv": [14, 1, 15, 2], "rotation": 180, "texture": "#3"},
"south": {"uv": [14, 1, 15, 5], "rotation": 90, "texture": "#3"},
"west": {"uv": [14, 4, 15, 5], "texture": "#3"},
"up": {"uv": [14, 1, 15, 5], "rotation": 90, "texture": "#3"}
}
},
{
"name": "arrow",
"from": [7, 16, 15],
"to": [9, 17, 16],
"faces": {
"east": {"uv": [15, 2, 16, 3], "rotation": 180, "texture": "#3"},
"south": {"uv": [15, 2, 16, 4], "rotation": 90, "texture": "#3"},
"west": {"uv": [15, 3, 16, 4], "texture": "#3"},
"up": {"uv": [15, 2, 16, 4], "rotation": 90, "texture": "#3"}
}
}
]
}

View file

@ -1,6 +1,6 @@
{ {
"credit": "Made with Blockbench", "credit": "Made with Blockbench",
"parent": "block/cube", "parent": "block/block",
"textures": { "textures": {
"5": "create:block/brass_casing" "5": "create:block/brass_casing"
}, },

View file

@ -1,6 +1,6 @@
{ {
"credit": "Made with Blockbench", "credit": "Made with Blockbench",
"parent": "block/cube", "parent": "block/block",
"textures": { "textures": {
"3": "create:block/crafter_thingies" "3": "create:block/crafter_thingies"
}, },

View file

@ -1,12 +1,13 @@
{ {
"credit": "Made with Blockbench", "credit": "Made with Blockbench",
"parent": "block/cube", "parent": "block/block",
"textures": { "textures": {
"3": "create:block/crafter_thingies", "3": "create:block/crafter_thingies",
"4": "create:block/crafter_side", "4": "create:block/crafter_side",
"5": "create:block/brass_casing", "5": "create:block/brass_casing",
"6": "create:block/crafter_top", "6": "create:block/crafter_top",
"7": "create:block/crafter_topunderside" "7": "create:block/crafter_topunderside",
"particle": "create:block/brass_casing"
}, },
"elements": [ "elements": [
{ {
@ -42,8 +43,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]},
"faces": { "faces": {
"east": {"uv": [0, 6, 16, 10], "texture": "#4"}, "east": {"uv": [0, 6, 16, 10], "texture": "#4"},
"west": {"uv": [0, 6, 16, 10], "texture": "#4"}, "west": {"uv": [0, 6, 16, 10], "texture": "#4"}
"down": {"uv": [0, 0, 1, 1], "texture": "#missing"}
} }
}, },
{ {
@ -53,8 +53,7 @@
"rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]}, "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]},
"faces": { "faces": {
"east": {"uv": [0, 6, 16, 10], "texture": "#4"}, "east": {"uv": [0, 6, 16, 10], "texture": "#4"},
"west": {"uv": [0, 6, 16, 10], "texture": "#4"}, "west": {"uv": [0, 6, 16, 10], "texture": "#4"}
"down": {"uv": [0, 0, 1, 1], "texture": "#missing"}
} }
}, },
{ {
@ -132,19 +131,6 @@
"faces": { "faces": {
"up": {"uv": [6, 0, 12, 6], "texture": "#3"} "up": {"uv": [6, 0, 12, 6], "texture": "#3"}
} }
},
{
"name": "arrow",
"from": [5, 15.1, 11.9],
"to": [11, 16.1, 15.9],
"faces": {
"north": {"uv": [12, 0, 13, 6], "rotation": 90, "texture": "#3"},
"east": {"uv": [12, 0, 16, 1], "rotation": 180, "texture": "#3"},
"south": {"uv": [15, 0, 16, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [12, 5, 16, 6], "texture": "#3"},
"up": {"uv": [12, 0, 16, 6], "rotation": 90, "texture": "#3"},
"down": {"uv": [12, 0, 16, 6], "rotation": 90, "texture": "#3"}
}
} }
] ]
} }

View file

@ -0,0 +1,243 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"1": "block/stripped_spruce_log",
"2": "block/stripped_spruce_log_top",
"3": "create:block/crafter_thingies",
"4": "create:block/crafter_side",
"5": "create:block/brass_casing",
"6": "create:block/crafter_top",
"7": "create:block/crafter_topunderside",
"particle": "block/stripped_spruce_log",
"2_3": "create:block/crafter_thingies"
},
"elements": [
{
"name": "Top",
"from": [0, 10, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 16, 6], "texture": "#4"},
"east": {"uv": [0, 0, 16, 6], "texture": "#4"},
"south": {"uv": [0, 0, 16, 6], "texture": "#4"},
"west": {"uv": [0, 0, 16, 6], "texture": "#4"},
"up": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#6"},
"down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#7"}
}
},
{
"name": "Bottom",
"from": [0, 0, 0],
"to": [16, 6, 16],
"faces": {
"north": {"uv": [0, 10, 16, 16], "texture": "#4"},
"east": {"uv": [0, 10, 16, 16], "texture": "#4"},
"south": {"uv": [0, 10, 16, 16], "texture": "#4"},
"west": {"uv": [0, 10, 16, 16], "texture": "#4"},
"up": {"uv": [0, 0, 16, 16], "texture": "#5"},
"down": {"uv": [0, 0, 2, 2], "texture": "#6"}
}
},
{
"name": "Side1",
"from": [16, 6, 0],
"to": [16, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]},
"faces": {
"east": {"uv": [0, 6, 16, 10], "texture": "#4"},
"west": {"uv": [0, 6, 16, 10], "texture": "#4"}
}
},
{
"name": "Side2",
"from": [0, 6, 0],
"to": [0, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]},
"faces": {
"east": {"uv": [0, 6, 16, 10], "texture": "#4"},
"west": {"uv": [0, 6, 16, 10], "texture": "#4"}
}
},
{
"name": "Side3",
"from": [0, 6, 0],
"to": [16, 10, 0],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -8]},
"faces": {
"north": {"uv": [0, 6, 16, 10], "texture": "#4"},
"south": {"uv": [0, 6, 16, 10], "texture": "#4"}
}
},
{
"name": "Side4",
"from": [0, 6, 16],
"to": [16, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [0, 6, 16, 10], "texture": "#4"},
"south": {"uv": [0, 6, 16, 10], "texture": "#4"}
}
},
{
"name": "valve_case",
"from": [4, 16, 4],
"to": [5, 17, 12],
"faces": {
"north": {"uv": [8, 2, 9, 3], "texture": "#5"},
"east": {"uv": [4, 2, 12, 3], "texture": "#5"},
"south": {"uv": [7, 2, 8, 3], "texture": "#5"},
"west": {"uv": [4, 2, 12, 3], "texture": "#5"},
"up": {"uv": [2, 4, 3, 12], "texture": "#5"}
}
},
{
"name": "valve_case",
"from": [11, 16, 4],
"to": [12, 17, 12],
"faces": {
"north": {"uv": [8, 2, 9, 3], "texture": "#5"},
"east": {"uv": [4, 2, 12, 3], "texture": "#5"},
"south": {"uv": [7, 2, 8, 3], "texture": "#5"},
"west": {"uv": [4, 2, 12, 3], "texture": "#5"},
"up": {"uv": [2, 4, 3, 12], "texture": "#5"}
}
},
{
"name": "valve_case",
"from": [5, 16, 4],
"to": [11, 17, 5],
"faces": {
"north": {"uv": [6, 2, 12, 3], "texture": "#5"},
"east": {"uv": [2, 4, 3, 5], "texture": "#5"},
"south": {"uv": [5, 2, 11, 3], "texture": "#5"},
"west": {"uv": [2, 4, 3, 5], "texture": "#5"},
"up": {"uv": [5, 2, 11, 3], "texture": "#5"}
}
},
{
"name": "valve_case",
"from": [5, 16, 11],
"to": [11, 17, 12],
"faces": {
"north": {"uv": [6, 2, 12, 3], "texture": "#5"},
"east": {"uv": [2, 4, 3, 5], "texture": "#5"},
"south": {"uv": [5, 2, 11, 3], "texture": "#5"},
"west": {"uv": [2, 4, 3, 5], "texture": "#5"},
"up": {"uv": [5, 2, 11, 3], "texture": "#5"}
}
},
{
"name": "opening",
"from": [5, 15.5, 5],
"to": [11, 16.5, 11],
"faces": {
"up": {"uv": [6, 0, 12, 6], "texture": "#3"}
}
},
{
"name": "Gear",
"from": [-1, 6.5, 6.5],
"to": [17, 9.5, 9.5],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [6, 0, 9, 16], "rotation": 90, "texture": "#1"},
"east": {"uv": [1, 3, 4, 6], "texture": "#1"},
"south": {"uv": [0, 0, 16, 3], "texture": "#1"},
"west": {"uv": [5, 10, 8, 13], "texture": "#1"},
"up": {"uv": [0, 0, 16, 3], "texture": "#1"},
"down": {"uv": [0, 0, 16, 3], "texture": "#1"}
}
},
{
"name": "Gear2",
"from": [-1, 6.5, 6.5],
"to": [17, 9.5, 9.5],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 16, 3], "texture": "#1"},
"east": {"uv": [0, 0, 3, 3], "texture": "#1"},
"south": {"uv": [0, 0, 16, 3], "texture": "#1"},
"west": {"uv": [0, 0, 3, 3], "texture": "#1"},
"up": {"uv": [0, 0, 16, 3], "texture": "#1"},
"down": {"uv": [0, 0, 16, 3], "texture": "#1"}
}
},
{
"name": "Gear3",
"from": [6.5, 6.5, -1],
"to": [9.5, 9.5, 17],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 3, 3], "texture": "#1"},
"east": {"uv": [0, 0, 16, 3], "texture": "#1"},
"south": {"uv": [0, 0, 3, 3], "texture": "#1"},
"west": {"uv": [0, 0, 16, 3], "texture": "#1"},
"up": {"uv": [0, 0, 16, 3], "rotation": 90, "texture": "#1"},
"down": {"uv": [0, 0, 16, 3], "rotation": 270, "texture": "#1"}
}
},
{
"name": "Gear4",
"from": [6.5, 6.5, -1],
"to": [9.5, 9.5, 17],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 3, 3], "texture": "#1"},
"east": {"uv": [0, 0, 16, 3], "texture": "#1"},
"south": {"uv": [0, 0, 3, 3], "texture": "#1"},
"west": {"uv": [0, 0, 16, 3], "texture": "#1"},
"up": {"uv": [0, 0, 3, 16], "texture": "#1"},
"down": {"uv": [0, 0, 3, 16], "texture": "#1"}
}
},
{
"name": "GearCaseInner",
"from": [2, 7, 2],
"to": [14, 9, 14],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 12, 2], "texture": "#1"},
"east": {"uv": [0, 0, 12, 2], "texture": "#1"},
"south": {"uv": [0, 0, 12, 2], "texture": "#1"},
"west": {"uv": [0, 0, 12, 2], "texture": "#1"},
"up": {"uv": [2, 2, 14, 14], "texture": "#2"},
"down": {"uv": [2, 2, 14, 14], "texture": "#2"}
}
},
{
"name": "GearCaseOuter",
"from": [4, 6, 4],
"to": [12, 10, 12],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 8, 4], "texture": "#1"},
"east": {"uv": [0, 0, 8, 4], "texture": "#1"},
"south": {"uv": [0, 0, 8, 4], "texture": "#1"},
"west": {"uv": [0, 0, 8, 4], "texture": "#1"},
"up": {"uv": [4, 4, 12, 12], "texture": "#2"},
"down": {"uv": [4, 4, 12, 12], "texture": "#2"}
}
},
{
"name": "valve_lid",
"from": [5, 16, 5],
"to": [11, 17, 11],
"faces": {
"up": {"uv": [0, 0, 6, 6], "texture": "#2_3"}
}
}
],
"groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
{
"name": "cogwheel_shaftless",
"origin": [8, 8, 8],
"children": [11, 12, 13, 14, 15, 16]
},
{
"name": "lid",
"origin": [8, 8, 8],
"children": [17]
}
]
}

View file

@ -1,6 +1,6 @@
{ {
"credit": "Made with Blockbench", "credit": "Made with Blockbench",
"parent": "block/cube", "parent": "block/block",
"textures": { "textures": {
"3": "create:block/crafter_thingies" "3": "create:block/crafter_thingies"
}, },

View file

@ -0,0 +1,3 @@
{
"parent": "create:block/crafter/item"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 464 B