mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-19 16:32:31 +01:00
Dynamic Render to go
- Added animation capabilities for blocks usable with the mechanical piston - New models for the harvester and the drill
This commit is contained in:
parent
835a4a638b
commit
d8ab5dc122
40 changed files with 1076 additions and 897 deletions
|
@ -11,8 +11,10 @@ import com.simibubi.create.modules.contraptions.generators.WaterWheelBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelBlock;
|
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock;
|
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.DrillBlock;
|
import com.simibubi.create.modules.contraptions.receivers.DrillBlock;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.DrillBlock.DrillHeadBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.EncasedFanBlock;
|
import com.simibubi.create.modules.contraptions.receivers.EncasedFanBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock;
|
import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock.HarvesterBladeBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressBlock;
|
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.TurntableBlock;
|
import com.simibubi.create.modules.contraptions.receivers.TurntableBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingBlock;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingBlock;
|
||||||
|
@ -118,7 +120,9 @@ public enum AllBlocks {
|
||||||
TRANSLATION_CHASSIS_SECONDARY(new TranslationChassisBlock()),
|
TRANSLATION_CHASSIS_SECONDARY(new TranslationChassisBlock()),
|
||||||
ROTATION_CHASSIS(new RotationChassisBlock()),
|
ROTATION_CHASSIS(new RotationChassisBlock()),
|
||||||
DRILL(new DrillBlock()),
|
DRILL(new DrillBlock()),
|
||||||
|
DRILL_HEAD(new DrillHeadBlock()),
|
||||||
HARVESTER(new HarvesterBlock()),
|
HARVESTER(new HarvesterBlock()),
|
||||||
|
HARVESTER_BLADE(new HarvesterBladeBlock()),
|
||||||
|
|
||||||
__LOGISTICS__(),
|
__LOGISTICS__(),
|
||||||
CONTACT(new ContactBlock()),
|
CONTACT(new ContactBlock()),
|
||||||
|
|
|
@ -9,8 +9,11 @@ import com.simibubi.create.modules.contraptions.generators.WaterWheelTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.CrushingWheelTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.DrillTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.DrillTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.DrillTileEntityRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntityRenderer;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.HarvesterTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.HarvesterTileEntityRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntityRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity;
|
||||||
|
@ -91,12 +94,10 @@ public enum AllTileEntities {
|
||||||
BELT(BeltTileEntity::new, AllBlocks.BELT),
|
BELT(BeltTileEntity::new, AllBlocks.BELT),
|
||||||
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),
|
||||||
|
HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER),
|
||||||
CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL),
|
CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL),
|
||||||
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
||||||
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
||||||
|
@ -161,6 +162,7 @@ public enum AllTileEntities {
|
||||||
bind(TurntableTileEntity.class, new KineticTileEntityRenderer());
|
bind(TurntableTileEntity.class, new KineticTileEntityRenderer());
|
||||||
bind(MotorTileEntity.class, new MotorTileEntityRenderer());
|
bind(MotorTileEntity.class, new MotorTileEntityRenderer());
|
||||||
bind(EncasedShaftTileEntity.class, new EncasedShaftTileEntityRenderer());
|
bind(EncasedShaftTileEntity.class, new EncasedShaftTileEntityRenderer());
|
||||||
|
bind(DrillTileEntity.class, new DrillTileEntityRenderer());
|
||||||
bind(EncasedFanTileEntity.class, new EncasedFanTileEntityRenderer());
|
bind(EncasedFanTileEntity.class, new EncasedFanTileEntityRenderer());
|
||||||
bind(GearboxTileEntity.class, new GearboxTileEntityRenderer());
|
bind(GearboxTileEntity.class, new GearboxTileEntityRenderer());
|
||||||
bind(GearshiftTileEntity.class, new SplitShaftTileEntityRenderer());
|
bind(GearshiftTileEntity.class, new SplitShaftTileEntityRenderer());
|
||||||
|
@ -168,7 +170,6 @@ public enum AllTileEntities {
|
||||||
bind(BeltTileEntity.class, new BeltTileEntityRenderer());
|
bind(BeltTileEntity.class, new BeltTileEntityRenderer());
|
||||||
bind(MechanicalPistonTileEntity.class, new MechanicalPistonTileEntityRenderer());
|
bind(MechanicalPistonTileEntity.class, new MechanicalPistonTileEntityRenderer());
|
||||||
bind(MechanicalBearingTileEntity.class, new MechanicalBearingTileEntityRenderer());
|
bind(MechanicalBearingTileEntity.class, new MechanicalBearingTileEntityRenderer());
|
||||||
bind(DrillTileEntity.class, new KineticTileEntityRenderer());
|
|
||||||
bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer());
|
bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer());
|
||||||
bind(WaterWheelTileEntity.class, new KineticTileEntityRenderer());
|
bind(WaterWheelTileEntity.class, new KineticTileEntityRenderer());
|
||||||
bind(RedstoneBridgeTileEntity.class, new LinkedTileEntityRenderer());
|
bind(RedstoneBridgeTileEntity.class, new LinkedTileEntityRenderer());
|
||||||
|
@ -179,6 +180,7 @@ public enum AllTileEntities {
|
||||||
bind(FlexpeaterTileEntity.class, new FlexpeaterTileEntityRenderer());
|
bind(FlexpeaterTileEntity.class, new FlexpeaterTileEntityRenderer());
|
||||||
bind(LogisticalControllerTileEntity.class, new LogisticalControllerTileEntityRenderer());
|
bind(LogisticalControllerTileEntity.class, new LogisticalControllerTileEntityRenderer());
|
||||||
bind(LogisticiansTableTileEntity.class, new LogisticiansTableTileEntityRenderer());
|
bind(LogisticiansTableTileEntity.class, new LogisticiansTableTileEntityRenderer());
|
||||||
|
bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
|
|
@ -21,6 +21,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
import net.minecraft.util.Direction.Axis;
|
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.world.World;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.model.animation.Animation;
|
import net.minecraftforge.client.model.animation.Animation;
|
||||||
import net.minecraftforge.client.model.animation.TileEntityRendererFast;
|
import net.minecraftforge.client.model.animation.TileEntityRendererFast;
|
||||||
|
@ -32,7 +33,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
|
|
||||||
protected static Map<BlockState, BufferManipulator> cachedBuffers;
|
protected static Map<BlockState, BufferManipulator> cachedBuffers;
|
||||||
|
|
||||||
protected class BlockModelSpinner extends BufferManipulator {
|
protected static class BlockModelSpinner extends BufferManipulator {
|
||||||
|
|
||||||
public BlockModelSpinner(ByteBuffer original) {
|
public BlockModelSpinner(ByteBuffer original) {
|
||||||
super(original);
|
super(original);
|
||||||
|
@ -50,7 +51,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
x = getX(original, vertex) - .5f;
|
x = getX(original, vertex) - .5f;
|
||||||
y = getY(original, vertex) - .5f;
|
y = getY(original, vertex) - .5f;
|
||||||
z = getZ(original, vertex) - .5f;
|
z = getZ(original, vertex) - .5f;
|
||||||
|
|
||||||
putPos(mutable, vertex, rotateX(x, y, z, sin, cos, axis) + .5f + xIn,
|
putPos(mutable, vertex, rotateX(x, y, z, sin, cos, axis) + .5f + xIn,
|
||||||
rotateY(x, y, z, sin, cos, axis) + .5f + yIn, rotateZ(x, y, z, sin, cos, axis) + .5f + zIn);
|
rotateY(x, y, z, sin, cos, axis) + .5f + yIn, rotateZ(x, y, z, sin, cos, axis) + .5f + zIn);
|
||||||
putLight(mutable, vertex, packedLightCoords);
|
putLight(mutable, vertex, packedLightCoords);
|
||||||
|
@ -69,7 +70,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
int destroyStage, BufferBuilder buffer) {
|
int destroyStage, BufferBuilder buffer) {
|
||||||
|
|
||||||
final BlockState state = getRenderedBlockState(te);
|
final BlockState state = getRenderedBlockState(te);
|
||||||
cacheIfMissing(state, BlockModelSpinner::new);
|
cacheIfMissing(state, getWorld(), BlockModelSpinner::new);
|
||||||
|
|
||||||
final BlockPos pos = te.getPos();
|
final BlockPos pos = te.getPos();
|
||||||
Axis axis = ((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState());
|
Axis axis = ((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState());
|
||||||
|
@ -77,17 +78,22 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||||
float angle = (float) (((time * te.getSpeed() + offset) % 360) / 180 * (float) Math.PI);
|
float angle = (float) (((time * te.getSpeed() + offset) % 360) / 180 * (float) Math.PI);
|
||||||
|
|
||||||
renderFromCache(buffer, state, (float) x, (float) y, (float) z, pos, axis, angle);
|
renderFromCache(buffer, state, getWorld(), (float) x, (float) y, (float) z, pos, axis, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderFromCache(BufferBuilder buffer, BlockState state, float x, float y, float z, BlockPos pos,
|
protected static void renderFromCache(BufferBuilder buffer, BlockState state, World world, float x, float y,
|
||||||
Axis axis, float angle) {
|
float z, BlockPos pos, Axis axis, float angle) {
|
||||||
int packedLightmapCoords = state.getPackedLightmapCoords(getWorld(), pos);
|
int packedLightmapCoords = state.getPackedLightmapCoords(world, pos);
|
||||||
buffer.putBulkData(((BlockModelSpinner) cachedBuffers.get(state)).getTransformed(x, y, z, angle, axis,
|
buffer.putBulkData(((BlockModelSpinner) getBuffer(state)).getTransformed(x, y, z, angle, axis,
|
||||||
packedLightmapCoords));
|
packedLightmapCoords));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void cacheIfMissing(final BlockState state, Function<ByteBuffer, BufferManipulator> factory) {
|
public static BufferManipulator getBuffer(BlockState state) {
|
||||||
|
return cachedBuffers.get(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cacheIfMissing(final BlockState state, World world,
|
||||||
|
Function<ByteBuffer, BufferManipulator> factory) {
|
||||||
if (!cachedBuffers.containsKey(state)) {
|
if (!cachedBuffers.containsKey(state)) {
|
||||||
BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher();
|
BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher();
|
||||||
BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer();
|
BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer();
|
||||||
|
@ -97,7 +103,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
|
|
||||||
builder.setTranslation(0, 1, 0);
|
builder.setTranslation(0, 1, 0);
|
||||||
builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
|
builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
|
||||||
blockRenderer.renderModelFlat(getWorld(), originalModel, state, BlockPos.ZERO.down(), builder, true, random, 42,
|
blockRenderer.renderModelFlat(world, originalModel, state, BlockPos.ZERO.down(), builder, true, random, 42,
|
||||||
EmptyModelData.INSTANCE);
|
EmptyModelData.INSTANCE);
|
||||||
builder.finishDrawing();
|
builder.finishDrawing();
|
||||||
|
|
||||||
|
@ -123,5 +129,5 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast<KineticTil
|
||||||
if (cachedBuffers != null)
|
if (cachedBuffers != null)
|
||||||
cachedBuffers.clear();
|
cachedBuffers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,23 +2,22 @@ package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.block.IRenderUtilityBlock;
|
||||||
|
import com.simibubi.create.foundation.block.IWithTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock;
|
||||||
import com.simibubi.create.modules.contraptions.base.IRotate;
|
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity;
|
|
||||||
import com.simibubi.create.modules.contraptions.relays.ShaftBlock;
|
import com.simibubi.create.modules.contraptions.relays.ShaftBlock;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
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.block.DirectionalBlock;
|
||||||
import net.minecraft.block.material.PushReaction;
|
import net.minecraft.block.material.PushReaction;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.state.BooleanProperty;
|
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
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;
|
||||||
|
@ -27,33 +26,26 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.util.math.shapes.VoxelShapes;
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorld;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
public class DrillBlock extends DirectionalKineticBlock implements IHaveMovementBehavior {
|
public class DrillBlock extends DirectionalKineticBlock
|
||||||
|
implements IHaveMovementBehavior, IWithTileEntity<DrillTileEntity> {
|
||||||
|
|
||||||
protected static final VoxelShape CORE_SHAPE = makeCuboidShape(3, 3, 3, 13, 13, 13),
|
protected static final VoxelShape CORE_SHAPE = makeCuboidShape(3, 3, 3, 13, 13, 13),
|
||||||
DRILL_SHAPE_X = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_X),
|
DRILL_SHAPE_X = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_X),
|
||||||
DRILL_SHAPE_Y = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Y),
|
DRILL_SHAPE_Y = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Y),
|
||||||
DRILL_SHAPE_Z = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Z);
|
DRILL_SHAPE_Z = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Z);
|
||||||
|
|
||||||
public static final BooleanProperty FIXATED = BooleanProperty.create("fixated");
|
|
||||||
|
|
||||||
public DrillBlock() {
|
public DrillBlock() {
|
||||||
super(Properties.from(Blocks.IRON_BLOCK));
|
super(Properties.from(Blocks.IRON_BLOCK));
|
||||||
setDefaultState(getDefaultState().with(FIXATED, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(FIXATED);
|
|
||||||
super.fillStateContainer(builder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasTileEntity(BlockState state) {
|
public boolean hasTileEntity(BlockState state) {
|
||||||
return !state.get(FIXATED);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -75,6 +67,12 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement
|
||||||
return CORE_SHAPE;
|
return CORE_SHAPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||||
|
boolean isMoving) {
|
||||||
|
withTileEntityDo(worldIn, pos, DrillTileEntity::destroyNextTick);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Axis getRotationAxis(BlockState state) {
|
public Axis getRotationAxis(BlockState state) {
|
||||||
return state.get(FACING).getAxis();
|
return state.get(FACING).getAxis();
|
||||||
|
@ -82,78 +80,42 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) {
|
||||||
return !state.get(FIXATED) && face == state.get(FACING).getOpposite();
|
return face == state.get(FACING).getOpposite();
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
|
||||||
return super.getStateForPlacement(context).with(FIXATED,
|
|
||||||
!canConnectTo(context.getWorld(), context.getPos(), context.getFace().getOpposite()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean canConnectTo(IWorld world, BlockPos pos, Direction direction) {
|
|
||||||
BlockPos offsetPos = pos.offset(direction);
|
|
||||||
BlockState blockStateAttached = world.getBlockState(offsetPos);
|
|
||||||
if (blockStateAttached.getBlock() instanceof IRotate && ((IRotate) blockStateAttached.getBlock())
|
|
||||||
.hasShaftTowards(world.getWorld(), offsetPos, blockStateAttached, direction.getOpposite())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PushReaction getPushReaction(BlockState state) {
|
public PushReaction getPushReaction(BlockState state) {
|
||||||
return state.get(FIXATED) ? PushReaction.NORMAL : PushReaction.BLOCK;
|
return PushReaction.PUSH_ONLY;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn,
|
|
||||||
BlockPos currentPos, BlockPos facingPos) {
|
|
||||||
if (facing == stateIn.get(FACING).getOpposite()) {
|
|
||||||
boolean connected = canConnectTo(worldIn, currentPos, facing);
|
|
||||||
boolean fixated = stateIn.get(FIXATED);
|
|
||||||
|
|
||||||
if (!fixated && !connected)
|
|
||||||
worldIn.getWorld().removeTileEntity(currentPos);
|
|
||||||
|
|
||||||
return stateIn.with(FIXATED, !connected);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (facing != stateIn.get(FACING))
|
|
||||||
return stateIn;
|
|
||||||
|
|
||||||
DrillTileEntity te = (DrillTileEntity) worldIn.getTileEntity(currentPos);
|
|
||||||
if (te != null)
|
|
||||||
te.destroyNextTick();
|
|
||||||
|
|
||||||
return stateIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canRenderInLayer(BlockState state, BlockRenderLayer layer) {
|
|
||||||
return state.get(FIXATED) && layer == BlockRenderLayer.SOLID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasStaticPart() {
|
protected boolean hasStaticPart() {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement,
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
MechanicalPistonTileEntity piston) {
|
public void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) {
|
||||||
IMovementContext context = IdleMovementContext.INSTANCE;
|
DrillTileEntityRenderer.renderInConstruct(context, x, y, z, buffer);
|
||||||
|
}
|
||||||
if (movement != block.get(FACING))
|
|
||||||
return context;
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitPosition(MovementContext context) {
|
||||||
|
Direction movement = context.getMovementDirection();
|
||||||
|
BlockState block = context.state;
|
||||||
|
|
||||||
|
if (movement != block.get(FACING))
|
||||||
|
return;
|
||||||
|
|
||||||
|
World world = context.world;
|
||||||
|
BlockPos pos = context.currentGridPos;
|
||||||
pos = pos.offset(movement);
|
pos = pos.offset(movement);
|
||||||
BlockState stateVisited = world.getBlockState(pos);
|
BlockState stateVisited = world.getBlockState(pos);
|
||||||
|
|
||||||
if (stateVisited.getCollisionShape(world, pos).isEmpty())
|
if (stateVisited.getCollisionShape(world, pos).isEmpty())
|
||||||
return context;
|
return;
|
||||||
if (stateVisited.getBlockHardness(world, pos) == -1)
|
if (stateVisited.getBlockHardness(world, pos) == -1)
|
||||||
return context;
|
return;
|
||||||
|
|
||||||
world.playEvent(2001, pos, Block.getStateId(stateVisited));
|
world.playEvent(2001, pos, Block.getStateId(stateVisited));
|
||||||
List<ItemStack> drops = Block.getDrops(stateVisited, (ServerWorld) world, pos, null);
|
List<ItemStack> drops = Block.getDrops(stateVisited, (ServerWorld) world, pos, null);
|
||||||
|
@ -165,8 +127,20 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement
|
||||||
new Vec3d(movement.getDirectionVec()).add(0, 0.5f, 0).scale(world.rand.nextFloat() * .3f));
|
new Vec3d(movement.getDirectionVec()).add(0, 0.5f, 0).scale(world.rand.nextFloat() * .3f));
|
||||||
world.addEntity(itemEntity);
|
world.addEntity(itemEntity);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DrillHeadBlock extends DirectionalBlock implements IRenderUtilityBlock {
|
||||||
|
|
||||||
|
public DrillHeadBlock() {
|
||||||
|
super(Properties.from(Blocks.AIR));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(FACING);
|
||||||
|
super.fillStateContainer(builder);
|
||||||
|
}
|
||||||
|
|
||||||
return context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.IRotate;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.client.model.animation.Animation;
|
||||||
|
|
||||||
|
public class DrillTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||||
|
return getRenderedBlockState(te.getBlockState());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BlockState getRenderedBlockState(BlockState state) {
|
||||||
|
return AllBlocks.DRILL_HEAD.get().getDefaultState().with(FACING, state.get(FACING));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) {
|
||||||
|
World world = context.world;
|
||||||
|
BlockState state = context.state;
|
||||||
|
BlockPos pos = context.currentGridPos;
|
||||||
|
|
||||||
|
final BlockState renderedState = getRenderedBlockState(state);
|
||||||
|
cacheIfMissing(renderedState, world, BlockModelSpinner::new);
|
||||||
|
|
||||||
|
float speed = context.getMovementDirection() == state.get(FACING)? 100 : 0;
|
||||||
|
Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state);
|
||||||
|
float time = Animation.getWorldTime(Minecraft.getInstance().world,
|
||||||
|
Minecraft.getInstance().getRenderPartialTicks());
|
||||||
|
float angle = (float) (((time * speed) % 360) / 180 * (float) Math.PI);
|
||||||
|
renderFromCache(buffer, renderedState, world, (float) x, (float) y, (float) z, pos, axis, angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,8 +3,8 @@ package com.simibubi.create.modules.contraptions.receivers;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.block.IRenderUtilityBlock;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -12,6 +12,8 @@ import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.CropsBlock;
|
import net.minecraft.block.CropsBlock;
|
||||||
import net.minecraft.block.HorizontalBlock;
|
import net.minecraft.block.HorizontalBlock;
|
||||||
import net.minecraft.block.SugarCaneBlock;
|
import net.minecraft.block.SugarCaneBlock;
|
||||||
|
import net.minecraft.block.material.PushReaction;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -19,6 +21,7 @@ import net.minecraft.state.IProperty;
|
||||||
import net.minecraft.state.IntegerProperty;
|
import net.minecraft.state.IntegerProperty;
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.BlockRenderLayer;
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -30,6 +33,8 @@ import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.common.IPlantable;
|
import net.minecraftforge.common.IPlantable;
|
||||||
|
|
||||||
public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior {
|
public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior {
|
||||||
|
@ -42,6 +47,21 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
super(Properties.from(Blocks.IRON_BLOCK));
|
super(Properties.from(Blocks.IRON_BLOCK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new HarvesterTileEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PushReaction getPushReaction(BlockState state) {
|
||||||
|
return PushReaction.PUSH_ONLY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
Direction direction = state.get(HORIZONTAL_FACING);
|
Direction direction = state.get(HORIZONTAL_FACING);
|
||||||
|
@ -63,6 +83,12 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
builder.add(HORIZONTAL_FACING);
|
builder.add(HORIZONTAL_FACING);
|
||||||
super.fillStateContainer(builder);
|
super.fillStateContainer(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) {
|
||||||
|
HarvesterTileEntityRenderer.renderInConstruct(context, x, y, z, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockRenderLayer getRenderLayer() {
|
public BlockRenderLayer getRenderLayer() {
|
||||||
|
@ -93,12 +119,14 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement,
|
public void visitPosition(MovementContext context) {
|
||||||
MechanicalPistonTileEntity piston) {
|
Direction movement = context.getMovementDirection();
|
||||||
IMovementContext context = IdleMovementContext.INSTANCE;
|
World world = context.world;
|
||||||
|
BlockState block = context.state;
|
||||||
|
BlockPos pos = context.currentGridPos;
|
||||||
|
|
||||||
if (movement != block.get(HORIZONTAL_FACING))
|
if (movement != block.get(HORIZONTAL_FACING))
|
||||||
return context;
|
return;
|
||||||
|
|
||||||
BlockState stateVisited = world.getBlockState(pos);
|
BlockState stateVisited = world.getBlockState(pos);
|
||||||
boolean notCropButCuttable = false;
|
boolean notCropButCuttable = false;
|
||||||
|
@ -113,7 +141,7 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
if (isValidOther(world, pos, stateVisited))
|
if (isValidOther(world, pos, stateVisited))
|
||||||
notCropButCuttable = true;
|
notCropButCuttable = true;
|
||||||
else
|
else
|
||||||
return context;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ItemStack> drops = Block.getDrops(stateVisited, (ServerWorld) world, pos, null);
|
List<ItemStack> drops = Block.getDrops(stateVisited, (ServerWorld) world, pos, null);
|
||||||
|
@ -131,8 +159,6 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
new Vec3d(movement.getDirectionVec()).add(0, 0.5f, 0).scale(world.rand.nextFloat() * .3f));
|
new Vec3d(movement.getDirectionVec()).add(0, 0.5f, 0).scale(world.rand.nextFloat() * .3f));
|
||||||
world.addEntity(itemEntity);
|
world.addEntity(itemEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
return context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isValidCrop(World world, BlockPos pos, BlockState state) {
|
private boolean isValidCrop(World world, BlockPos pos, BlockState state) {
|
||||||
|
@ -201,4 +227,23 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
return Blocks.AIR.getDefaultState();
|
return Blocks.AIR.getDefaultState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class HarvesterBladeBlock extends HorizontalBlock implements IRenderUtilityBlock {
|
||||||
|
|
||||||
|
public HarvesterBladeBlock() {
|
||||||
|
super(Properties.from(Blocks.AIR));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(HORIZONTAL_FACING);
|
||||||
|
super.fillStateContainer(builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockRenderLayer getRenderLayer() {
|
||||||
|
return BlockRenderLayer.SOLID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.block.SyncedTileEntity;
|
||||||
|
|
||||||
|
public class HarvesterTileEntity extends SyncedTileEntity {
|
||||||
|
|
||||||
|
public HarvesterTileEntity() {
|
||||||
|
super(AllTileEntities.HARVESTER.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasFastRenderer() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FACING;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.utility.BufferManipulator;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.client.model.animation.Animation;
|
||||||
|
|
||||||
|
public class HarvesterTileEntityRenderer extends TileEntityRenderer<HarvesterTileEntity> {
|
||||||
|
|
||||||
|
protected static class HarvesterRenderer extends BufferManipulator {
|
||||||
|
|
||||||
|
public HarvesterRenderer(ByteBuffer original) {
|
||||||
|
super(original);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ByteBuffer getTransformed(float xIn, float yIn, float zIn, float angle, Direction facing,
|
||||||
|
int packedLightCoords) {
|
||||||
|
original.rewind();
|
||||||
|
mutable.rewind();
|
||||||
|
float cos = MathHelper.cos(angle);
|
||||||
|
float sin = MathHelper.sin(angle);
|
||||||
|
float x, y, z = 0;
|
||||||
|
Axis axis = facing.rotateYCCW().getAxis();
|
||||||
|
int axisDirection = -facing.getAxisDirection().getOffset();
|
||||||
|
|
||||||
|
float originOffset = 1 / 16f;
|
||||||
|
float xOffset = axis == Axis.X ? 0 : originOffset * axisDirection;
|
||||||
|
float zOffset = axis == Axis.Z ? 0 : originOffset * axisDirection;
|
||||||
|
|
||||||
|
for (int vertex = 0; vertex < vertexCount(original); vertex++) {
|
||||||
|
x = getX(original, vertex) - .5f + xOffset;
|
||||||
|
y = getY(original, vertex) - .5f + 2 * originOffset;
|
||||||
|
z = getZ(original, vertex) - .5f + zOffset;
|
||||||
|
|
||||||
|
putPos(mutable, vertex, rotateX(x, y, z, sin, cos, axis) + .5f - xOffset + xIn,
|
||||||
|
rotateY(x, y, z, sin, cos, axis) + .5f - 2 * originOffset + yIn,
|
||||||
|
rotateZ(x, y, z, sin, cos, axis) + .5f - zOffset + zIn);
|
||||||
|
putLight(mutable, vertex, packedLightCoords);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mutable;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) {
|
||||||
|
World world = context.world;
|
||||||
|
BlockState state = context.state;
|
||||||
|
BlockPos pos = context.currentGridPos;
|
||||||
|
Direction facing = context.getMovementDirection();
|
||||||
|
|
||||||
|
float speed = facing == state.get(HORIZONTAL_FACING) ? 100 * facing.getAxisDirection().getOffset() : 0;
|
||||||
|
if (facing.getAxis() == Axis.X)
|
||||||
|
speed = -speed;
|
||||||
|
|
||||||
|
float time = Animation.getWorldTime(Minecraft.getInstance().world,
|
||||||
|
Minecraft.getInstance().getRenderPartialTicks());
|
||||||
|
float angle = (float) (((time * speed) % 360) / 180 * (float) Math.PI);
|
||||||
|
render(world, state, pos, x, y, z, angle, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderTileEntityFast(HarvesterTileEntity te, double x, double y, double z, float partialTicks,
|
||||||
|
int destroyStage, BufferBuilder buffer) {
|
||||||
|
render(te.getWorld(), te.getBlockState(), te.getPos(), x, y, z, 0, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void render(World world, BlockState state, BlockPos pos, double x, double y, double z, float angle,
|
||||||
|
BufferBuilder buffer) {
|
||||||
|
if (!AllBlocks.HARVESTER.typeOf(state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
BlockState renderedState = AllBlocks.HARVESTER_BLADE.get().getDefaultState().with(HORIZONTAL_FACING,
|
||||||
|
state.get(HORIZONTAL_FACING));
|
||||||
|
|
||||||
|
KineticTileEntityRenderer.cacheIfMissing(renderedState, world, HarvesterRenderer::new);
|
||||||
|
HarvesterRenderer renderer = (HarvesterRenderer) KineticTileEntityRenderer.getBuffer(renderedState);
|
||||||
|
buffer.putBulkData(renderer.getTransformed((float) x, (float) y, (float) z, angle, state.get(HORIZONTAL_FACING),
|
||||||
|
state.getPackedLightmapCoords(world, pos)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -40,7 +40,7 @@ public class MechanicalPressTileEntityRenderer extends KineticTileEntityRenderer
|
||||||
super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer);
|
super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer);
|
||||||
|
|
||||||
final BlockState state = getRenderedHeadBlockState(te);
|
final BlockState state = getRenderedHeadBlockState(te);
|
||||||
cacheIfMissing(state, HeadTranslator::new);
|
cacheIfMissing(state, getWorld(), HeadTranslator::new);
|
||||||
|
|
||||||
final BlockPos pos = te.getPos();
|
final BlockPos pos = te.getPos();
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,21 @@
|
||||||
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
public interface IHaveMovementBehavior {
|
public interface IHaveMovementBehavior {
|
||||||
|
|
||||||
default IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement,
|
public enum MoverType {
|
||||||
MechanicalPistonTileEntity piston) {
|
PISTON, BEARING, MINECART;
|
||||||
return IdleMovementContext.INSTANCE;
|
}
|
||||||
|
|
||||||
|
default void visitPosition(MovementContext context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
default void tick(MechanicalPistonTileEntity piston) {
|
default void tick(MechanicalPistonTileEntity piston) {
|
||||||
|
@ -19,14 +25,32 @@ public interface IHaveMovementBehavior {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IMovementContext {
|
public class MovementContext {
|
||||||
default boolean isBlocking() {
|
|
||||||
return false;
|
public BlockPos currentGridPos;
|
||||||
|
public Vec3d movementVec;
|
||||||
|
public float movementSpeedModifier = 1;
|
||||||
|
|
||||||
|
public MoverType moverType;
|
||||||
|
public Object mover;
|
||||||
|
public World world;
|
||||||
|
public BlockState state;
|
||||||
|
|
||||||
|
public MovementContext(World world, BlockState state, MoverType moverType, Object mover) {
|
||||||
|
this.world = world;
|
||||||
|
this.state = state;
|
||||||
|
this.moverType = moverType;
|
||||||
|
this.mover = mover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Direction getMovementDirection() {
|
||||||
|
return Direction.getFacingFromVector(movementVec.x, movementVec.y, movementVec.z);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class IdleMovementContext implements IMovementContext {
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
public static IdleMovementContext INSTANCE = new IdleMovementContext();
|
default void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,8 +45,8 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender
|
||||||
BlockState capState = AllBlocks.MECHANICAL_BEARING_TOP.get().getDefaultState().with(BlockStateProperties.FACING,
|
BlockState capState = AllBlocks.MECHANICAL_BEARING_TOP.get().getDefaultState().with(BlockStateProperties.FACING,
|
||||||
facing);
|
facing);
|
||||||
|
|
||||||
cacheIfMissing(shaftState, BlockModelSpinner::new);
|
cacheIfMissing(shaftState, getWorld(), BlockModelSpinner::new);
|
||||||
cacheIfMissing(capState, BlockModelSpinner::new);
|
cacheIfMissing(capState, getWorld(), BlockModelSpinner::new);
|
||||||
|
|
||||||
float offset = getRotationOffsetForPosition(te, pos, facing.getAxis());
|
float offset = getRotationOffsetForPosition(te, pos, facing.getAxis());
|
||||||
float angle = (time * te.getSpeed()) % 360;
|
float angle = (time * te.getSpeed()) % 360;
|
||||||
|
@ -55,8 +55,9 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender
|
||||||
angle = angle / 180f * (float) Math.PI;
|
angle = angle / 180f * (float) Math.PI;
|
||||||
float interpolatedAngle = bearingTe.getInterpolatedAngle(partialTicks);
|
float interpolatedAngle = bearingTe.getInterpolatedAngle(partialTicks);
|
||||||
|
|
||||||
renderFromCache(buffer, shaftState, (float) x, (float) y, (float) z, pos, facing.getAxis(), angle);
|
renderFromCache(buffer, shaftState, getWorld(), (float) x, (float) y, (float) z, pos, facing.getAxis(), angle);
|
||||||
renderFromCache(buffer, capState, (float) x, (float) y, (float) z, pos, facing.getAxis(), interpolatedAngle);
|
renderFromCache(buffer, capState, getWorld(), (float) x, (float) y, (float) z, pos, facing.getAxis(),
|
||||||
|
interpolatedAngle);
|
||||||
|
|
||||||
if (!bearingTe.running)
|
if (!bearingTe.running)
|
||||||
return;
|
return;
|
||||||
|
@ -110,7 +111,7 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender
|
||||||
return AllBlocks.SHAFT.block.getDefaultState().with(BlockStateProperties.AXIS,
|
return AllBlocks.SHAFT.block.getDefaultState().with(BlockStateProperties.AXIS,
|
||||||
((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState()));
|
((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void invalidateCache() {
|
public static void invalidateCache() {
|
||||||
if (cachedConstructs != null)
|
if (cachedConstructs != null)
|
||||||
cachedConstructs.invalidateAll();
|
cachedConstructs.invalidateAll();
|
||||||
|
|
|
@ -5,10 +5,14 @@ import static com.simibubi.create.CreateConfig.parameters;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MoverType;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -78,8 +82,16 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi
|
||||||
public void read(CompoundNBT tag) {
|
public void read(CompoundNBT tag) {
|
||||||
running = tag.getBoolean("Running");
|
running = tag.getBoolean("Running");
|
||||||
offset = tag.getFloat("Offset");
|
offset = tag.getFloat("Offset");
|
||||||
if (running && !TranslationConstruct.isFrozen())
|
if (running && !TranslationConstruct.isFrozen()) {
|
||||||
movingConstruct = TranslationConstruct.fromNBT(tag.getCompound("Construct"));
|
movingConstruct = TranslationConstruct.fromNBT(tag.getCompound("Construct"));
|
||||||
|
for (MutablePair<BlockInfo, MovementContext> pair : movingConstruct.actors) {
|
||||||
|
MovementContext context = new MovementContext(world, pair.left.state, MoverType.PISTON, this);
|
||||||
|
Direction direction = getBlockState().get(BlockStateProperties.FACING);
|
||||||
|
context.movementVec = new Vec3d(direction.getDirectionVec()).scale(getMovementSpeed()).normalize();
|
||||||
|
context.currentGridPos = pair.left.pos.offset(direction, getModulatedOffset(offset));
|
||||||
|
pair.setRight(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
super.read(tag);
|
super.read(tag);
|
||||||
}
|
}
|
||||||
|
@ -90,10 +102,15 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi
|
||||||
|
|
||||||
Direction direction = getBlockState().get(BlockStateProperties.FACING);
|
Direction direction = getBlockState().get(BlockStateProperties.FACING);
|
||||||
|
|
||||||
for (BlockInfo block : movingConstruct.actors) {
|
for (MutablePair<BlockInfo, MovementContext> pair : movingConstruct.actors) {
|
||||||
|
BlockInfo block = pair.left;
|
||||||
|
MovementContext context = pair.right;
|
||||||
|
|
||||||
|
BlockPos newPos = block.pos.offset(direction, getModulatedOffset(newOffset));
|
||||||
|
context.currentGridPos = newPos;
|
||||||
|
|
||||||
IHaveMovementBehavior actor = (IHaveMovementBehavior) block.state.getBlock();
|
IHaveMovementBehavior actor = (IHaveMovementBehavior) block.state.getBlock();
|
||||||
actor.visitPosition(world, block.pos.offset(direction, getModulatedOffset(newOffset)), block.state,
|
actor.visitPosition(context);
|
||||||
getMovementSpeed() > 0 ? direction : direction.getOpposite(), this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -132,6 +149,13 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi
|
||||||
getWorld().setBlockState(startPos, Blocks.AIR.getDefaultState(), 67);
|
getWorld().setBlockState(startPos, Blocks.AIR.getDefaultState(), 67);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (MutablePair<BlockInfo, MovementContext> pair : movingConstruct.actors) {
|
||||||
|
MovementContext context = new MovementContext(world, pair.left.state, MoverType.PISTON, this);
|
||||||
|
context.movementVec = new Vec3d(direction.getDirectionVec()).scale(getMovementSpeed()).normalize();
|
||||||
|
context.currentGridPos = pair.left.pos.offset(direction, getModulatedOffset(offset));
|
||||||
|
pair.setRight(context);
|
||||||
|
}
|
||||||
|
|
||||||
onBlockVisited(offset);
|
onBlockVisited(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +184,10 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi
|
||||||
getWorld().setBlockState(targetPos, state, 3);
|
getWorld().setBlockState(targetPos, state, 3);
|
||||||
TileEntity tileEntity = world.getTileEntity(targetPos);
|
TileEntity tileEntity = world.getTileEntity(targetPos);
|
||||||
if (tileEntity != null && block.nbt != null) {
|
if (tileEntity != null && block.nbt != null) {
|
||||||
((ChassisTileEntity) tileEntity).setRange(block.nbt.getInt("Range"));
|
block.nbt.putInt("x", targetPos.getX());
|
||||||
|
block.nbt.putInt("y", targetPos.getY());
|
||||||
|
block.nbt.putInt("z", targetPos.getZ());
|
||||||
|
tileEntity.read(block.nbt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,6 +208,13 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi
|
||||||
if (running) {
|
if (running) {
|
||||||
if (speed == 0)
|
if (speed == 0)
|
||||||
disassembleConstruct();
|
disassembleConstruct();
|
||||||
|
else {
|
||||||
|
for (MutablePair<BlockInfo, MovementContext> pair : movingConstruct.actors)
|
||||||
|
pair.right.movementVec = new Vec3d(
|
||||||
|
getBlockState().get(BlockStateProperties.FACING).getDirectionVec())
|
||||||
|
.scale(getMovementSpeed()).normalize();
|
||||||
|
sendData();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assembleConstruct();
|
assembleConstruct();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.modules.contraptions.receivers.constructs;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
@ -12,6 +13,7 @@ import com.simibubi.create.foundation.utility.PlacementSimulationWorld;
|
||||||
import com.simibubi.create.modules.contraptions.base.IRotate;
|
import com.simibubi.create.modules.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -21,6 +23,7 @@ import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.client.renderer.model.IBakedModel;
|
import net.minecraft.client.renderer.model.IBakedModel;
|
||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
||||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||||
|
@ -43,6 +46,17 @@ public class MechanicalPistonTileEntityRenderer extends KineticTileEntityRendere
|
||||||
|
|
||||||
cacheConstructIfMissing(pistonTe.movingConstruct);
|
cacheConstructIfMissing(pistonTe.movingConstruct);
|
||||||
renderConstructFromCache(pistonTe.movingConstruct, pistonTe, x, y, z, partialTicks, buffer);
|
renderConstructFromCache(pistonTe.movingConstruct, pistonTe, x, y, z, partialTicks, buffer);
|
||||||
|
for (Pair<BlockInfo, MovementContext> actor : pistonTe.movingConstruct.actors) {
|
||||||
|
MovementContext context = actor.getRight();
|
||||||
|
if (context == null)
|
||||||
|
continue;
|
||||||
|
final Vec3d offset = pistonTe.getConstructOffset(partialTicks);
|
||||||
|
BlockInfo blockInfo = actor.getLeft();
|
||||||
|
IHaveMovementBehavior block = (IHaveMovementBehavior) blockInfo.state.getBlock();
|
||||||
|
BlockPos pos = blockInfo.pos.subtract(te.getPos());
|
||||||
|
block.renderInConstruct(context, x + offset.x + pos.getX(),
|
||||||
|
y + offset.y + pos.getY(), z + offset.z + pos.getZ(), buffer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +103,7 @@ public class MechanicalPistonTileEntityRenderer extends KineticTileEntityRendere
|
||||||
return AllBlocks.SHAFT.block.getDefaultState().with(BlockStateProperties.AXIS,
|
return AllBlocks.SHAFT.block.getDefaultState().with(BlockStateProperties.AXIS,
|
||||||
((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState()));
|
((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void invalidateCache() {
|
public static void invalidateCache() {
|
||||||
if (cachedConstructs != null)
|
if (cachedConstructs != null)
|
||||||
cachedConstructs.invalidateAll();
|
cachedConstructs.invalidateAll();
|
||||||
|
|
|
@ -26,6 +26,8 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.world.IWorld;
|
import net.minecraft.world.IWorld;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
@EventBusSubscriber
|
@EventBusSubscriber
|
||||||
|
@ -53,14 +55,14 @@ public class MovingConstructHandler {
|
||||||
Vec3d movementVec = new Vec3d(te.getBlockState().get(BlockStateProperties.FACING).getDirectionVec());
|
Vec3d movementVec = new Vec3d(te.getBlockState().get(BlockStateProperties.FACING).getDirectionVec());
|
||||||
TranslationConstruct construct = te.movingConstruct;
|
TranslationConstruct construct = te.movingConstruct;
|
||||||
|
|
||||||
if (world.isRemote) {
|
// if (world.isRemote) {
|
||||||
renderedBBs.clear();
|
// renderedBBs.clear();
|
||||||
// if (construct.collisionBoxFront != null)
|
// if (construct.pistonCollisionBox != null)
|
||||||
// renderedBBs.add(construct.collisionBoxFront.offset(te.getConstructOffset(0)));
|
// renderedBBs.add(construct.pistonCollisionBox.offset(te.getConstructOffset(0)));
|
||||||
// if (construct.collisionBoxBack != null)
|
// if (construct.constructCollisionBox != null)
|
||||||
// renderedBBs.add(construct.collisionBoxBack.offset(te.getConstructOffset(0)));
|
// renderedBBs.add(construct.constructCollisionBox.offset(te.getConstructOffset(0)));
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (construct.getCollisionBoxFront() != null) {
|
if (construct.getCollisionBoxFront() != null) {
|
||||||
AxisAlignedBB constructBB = construct.getCollisionBoxFront().offset(te.getConstructOffset(0)).grow(.5f);
|
AxisAlignedBB constructBB = construct.getCollisionBoxFront().offset(te.getConstructOffset(0)).grow(.5f);
|
||||||
|
@ -164,8 +166,8 @@ public class MovingConstructHandler {
|
||||||
return movingPistons.get(mechanicalPistonTileEntity.getWorld());
|
return movingPistons.get(mechanicalPistonTileEntity.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
// @SubscribeEvent
|
@SubscribeEvent
|
||||||
// public static void onRenderWorld(RenderWorldLastEvent event) {
|
public static void onRenderWorld(RenderWorldLastEvent event) {
|
||||||
// for (AxisAlignedBB bb : renderedBBs) {
|
// for (AxisAlignedBB bb : renderedBBs) {
|
||||||
// TessellatorHelper.prepareForDrawing();
|
// TessellatorHelper.prepareForDrawing();
|
||||||
// GlStateManager.disableTexture();
|
// GlStateManager.disableTexture();
|
||||||
|
@ -177,6 +179,6 @@ public class MovingConstructHandler {
|
||||||
// GlStateManager.enableTexture();
|
// GlStateManager.enableTexture();
|
||||||
// TessellatorHelper.cleanUpAfterDrawing();
|
// TessellatorHelper.cleanUpAfterDrawing();
|
||||||
// }
|
// }
|
||||||
// }
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,11 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.CreateConfig;
|
import com.simibubi.create.CreateConfig;
|
||||||
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -43,7 +46,7 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
||||||
public class TranslationConstruct {
|
public class TranslationConstruct {
|
||||||
|
|
||||||
protected Map<BlockPos, BlockInfo> blocks;
|
protected Map<BlockPos, BlockInfo> blocks;
|
||||||
protected List<BlockInfo> actors;
|
protected List<MutablePair<BlockInfo, MovementContext>> actors;
|
||||||
|
|
||||||
protected AxisAlignedBB constructCollisionBox;
|
protected AxisAlignedBB constructCollisionBox;
|
||||||
protected AxisAlignedBB pistonCollisionBox;
|
protected AxisAlignedBB pistonCollisionBox;
|
||||||
|
@ -59,7 +62,7 @@ public class TranslationConstruct {
|
||||||
blocks = new HashMap<>();
|
blocks = new HashMap<>();
|
||||||
actors = new ArrayList<>();
|
actors = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TranslationConstruct movePistonAt(World world, BlockPos pos, Direction direction, boolean retract) {
|
public static TranslationConstruct movePistonAt(World world, BlockPos pos, Direction direction, boolean retract) {
|
||||||
if (isFrozen())
|
if (isFrozen())
|
||||||
return null;
|
return null;
|
||||||
|
@ -157,7 +160,7 @@ public class TranslationConstruct {
|
||||||
private boolean searchMovedStructure(World world, BlockPos pos, Direction direction) {
|
private boolean searchMovedStructure(World world, BlockPos pos, Direction direction) {
|
||||||
List<BlockPos> frontier = new ArrayList<>();
|
List<BlockPos> frontier = new ArrayList<>();
|
||||||
Set<BlockPos> visited = new HashSet<>();
|
Set<BlockPos> visited = new HashSet<>();
|
||||||
constructCollisionBox = new AxisAlignedBB(pos);
|
constructCollisionBox = new AxisAlignedBB(pos.offset(direction, initialExtensionProgress));
|
||||||
frontier.add(pos);
|
frontier.add(pos);
|
||||||
|
|
||||||
for (int offset = 1; offset <= parameters.maxChassisRange.get(); offset++) {
|
for (int offset = 1; offset <= parameters.maxChassisRange.get(); offset++) {
|
||||||
|
@ -205,8 +208,18 @@ public class TranslationConstruct {
|
||||||
if (isChassis(state) && !moveChassis(world, pos, direction, frontier, visited))
|
if (isChassis(state) && !moveChassis(world, pos, direction, frontier, visited))
|
||||||
return false;
|
return false;
|
||||||
if (state.getBlock() instanceof SlimeBlock)
|
if (state.getBlock() instanceof SlimeBlock)
|
||||||
for (Direction offset : Direction.values())
|
for (Direction offset : Direction.values()) {
|
||||||
frontier.add(pos.offset(offset));
|
BlockPos offsetPos = pos.offset(offset);
|
||||||
|
if (offset.getAxis() == direction.getAxis()) {
|
||||||
|
BlockState blockState = world.getBlockState(offsetPos);
|
||||||
|
if (AllBlocks.MECHANICAL_PISTON.typeOf(blockState)
|
||||||
|
|| AllBlocks.STICKY_MECHANICAL_PISTON.typeOf(blockState)
|
||||||
|
|| AllBlocks.MECHANICAL_PISTON_HEAD.typeOf(blockState))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!visited.contains(offsetPos))
|
||||||
|
frontier.add(offsetPos);
|
||||||
|
}
|
||||||
|
|
||||||
add(pos, capture(world, pos));
|
add(pos, capture(world, pos));
|
||||||
return true;
|
return true;
|
||||||
|
@ -215,11 +228,15 @@ public class TranslationConstruct {
|
||||||
private boolean moveChassis(World world, BlockPos pos, Direction movementDirection, List<BlockPos> frontier,
|
private boolean moveChassis(World world, BlockPos pos, Direction movementDirection, List<BlockPos> frontier,
|
||||||
Set<BlockPos> visited) {
|
Set<BlockPos> visited) {
|
||||||
List<BlockInfo> cluster = getChassisClusterAt(world, pos);
|
List<BlockInfo> cluster = getChassisClusterAt(world, pos);
|
||||||
|
|
||||||
if (cluster == null)
|
if (cluster == null)
|
||||||
return false;
|
return false;
|
||||||
if (cluster.isEmpty())
|
if (cluster.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
Set<BlockPos> validChassis = new HashSet<>(cluster.size());
|
||||||
|
cluster.forEach(info -> validChassis.add(info.pos));
|
||||||
|
|
||||||
BlockInfo anchorChassis = cluster.get(0);
|
BlockInfo anchorChassis = cluster.get(0);
|
||||||
Axis chassisAxis = anchorChassis.state.get(AXIS);
|
Axis chassisAxis = anchorChassis.state.get(AXIS);
|
||||||
int chassisCoord = chassisAxis.getCoordinate(anchorChassis.pos.getX(), anchorChassis.pos.getY(),
|
int chassisCoord = chassisAxis.getCoordinate(anchorChassis.pos.getX(), anchorChassis.pos.getY(),
|
||||||
|
@ -277,6 +294,10 @@ public class TranslationConstruct {
|
||||||
if (!pushing && notInRange)
|
if (!pushing && notInRange)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Chassis not part of cluster
|
||||||
|
if (!validChassis.contains(currentChassisPos))
|
||||||
|
continue;
|
||||||
|
|
||||||
boolean isBaseChassis = currentPos.equals(currentChassisPos);
|
boolean isBaseChassis = currentPos.equals(currentChassisPos);
|
||||||
if (!isBaseChassis) {
|
if (!isBaseChassis) {
|
||||||
// Don't pull if chassis not sticky
|
// Don't pull if chassis not sticky
|
||||||
|
@ -373,7 +394,7 @@ public class TranslationConstruct {
|
||||||
return state.get(BlockStateProperties.HORIZONTAL_FACING) == facing;
|
return state.get(BlockStateProperties.HORIZONTAL_FACING) == facing;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isChassis(BlockState state) {
|
private static boolean isChassis(BlockState state) {
|
||||||
return TranslationChassisBlock.isChassis(state);
|
return TranslationChassisBlock.isChassis(state);
|
||||||
}
|
}
|
||||||
|
@ -386,14 +407,14 @@ public class TranslationConstruct {
|
||||||
return false;
|
return false;
|
||||||
return PistonBlock.canPush(blockState, world, pos, direction, true, direction);
|
return PistonBlock.canPush(blockState, world, pos, direction, true, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add(BlockPos pos, BlockInfo block) {
|
private void add(BlockPos pos, BlockInfo block) {
|
||||||
BlockPos localPos = pos.offset(orientation, -initialExtensionProgress);
|
BlockPos localPos = pos.offset(orientation, -initialExtensionProgress);
|
||||||
BlockInfo blockInfo = new BlockInfo(localPos, block.state, block.nbt);
|
BlockInfo blockInfo = new BlockInfo(localPos, block.state, block.nbt);
|
||||||
blocks.put(localPos, blockInfo);
|
blocks.put(localPos, blockInfo);
|
||||||
if (block.state.getBlock() instanceof IHaveMovementBehavior)
|
if (block.state.getBlock() instanceof IHaveMovementBehavior)
|
||||||
actors.add(blockInfo);
|
actors.add(MutablePair.of(blockInfo, null));
|
||||||
constructCollisionBox.union(new AxisAlignedBB(localPos));
|
constructCollisionBox = constructCollisionBox.union(new AxisAlignedBB(localPos));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BlockInfo capture(World world, BlockPos pos) {
|
private static BlockInfo capture(World world, BlockPos pos) {
|
||||||
|
@ -482,7 +503,7 @@ public class TranslationConstruct {
|
||||||
// Find blocks with special movement behaviour
|
// Find blocks with special movement behaviour
|
||||||
construct.blocks.values().forEach(block -> {
|
construct.blocks.values().forEach(block -> {
|
||||||
if (block.state.getBlock() instanceof IHaveMovementBehavior)
|
if (block.state.getBlock() instanceof IHaveMovementBehavior)
|
||||||
construct.actors.add(block);
|
construct.actors.add(MutablePair.of(block, null));
|
||||||
});
|
});
|
||||||
|
|
||||||
return construct;
|
return construct;
|
||||||
|
|
|
@ -101,16 +101,22 @@ public class ContactBlock extends ProperDirectionalBlock implements IHaveMovemen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement,
|
public void visitPosition(MovementContext context) {
|
||||||
MechanicalPistonTileEntity piston) {
|
BlockState block = context.state;
|
||||||
|
World world = context.world;
|
||||||
|
BlockPos pos = context.currentGridPos;
|
||||||
|
|
||||||
Direction direction = block.get(FACING);
|
Direction direction = block.get(FACING);
|
||||||
if (!hasValidContact(world, pos, direction))
|
if (!hasValidContact(world, pos, direction))
|
||||||
return IdleMovementContext.INSTANCE;
|
return;
|
||||||
|
if (context.moverType != MoverType.PISTON)
|
||||||
|
return;
|
||||||
|
|
||||||
int ticksToStayActive = (int) Math.ceil(1 / Math.abs(piston.getMovementSpeed()));
|
int ticksToStayActive = (int) Math
|
||||||
|
.ceil(1 / Math.abs(((MechanicalPistonTileEntity) context.mover).getMovementSpeed()));
|
||||||
world.setBlockState(pos.offset(direction), world.getBlockState(pos.offset(direction)).with(POWERED, true));
|
world.setBlockState(pos.offset(direction), world.getBlockState(pos.offset(direction)).with(POWERED, true));
|
||||||
world.getPendingBlockTicks().scheduleTick(pos.offset(direction), this, ticksToStayActive, TickPriority.NORMAL);
|
world.getPendingBlockTicks().scheduleTick(pos.offset(direction), this, ticksToStayActive, TickPriority.NORMAL);
|
||||||
return IdleMovementContext.INSTANCE;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class GearboxTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BlockState state = defaultState.with(BlockStateProperties.FACING, direction);
|
BlockState state = defaultState.with(BlockStateProperties.FACING, direction);
|
||||||
cacheIfMissing(state, BlockModelSpinner::new);
|
cacheIfMissing(state, getWorld(), BlockModelSpinner::new);
|
||||||
|
|
||||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||||
float angle = (time * te.getSpeed()) % 360;
|
float angle = (time * te.getSpeed()) % 360;
|
||||||
|
@ -48,7 +48,7 @@ public class GearboxTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
angle += offset;
|
angle += offset;
|
||||||
angle = angle / 180f * (float) Math.PI;
|
angle = angle / 180f * (float) Math.PI;
|
||||||
|
|
||||||
renderFromCache(buffer, state, (float) x, (float) y, (float) z, pos, axis, angle);
|
renderFromCache(buffer, state, getWorld(), (float) x, (float) y, (float) z, pos, axis, angle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class SplitShaftTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BlockState state = defaultState.with(BlockStateProperties.FACING, direction);
|
BlockState state = defaultState.with(BlockStateProperties.FACING, direction);
|
||||||
cacheIfMissing(state, BlockModelSpinner::new);
|
cacheIfMissing(state, getWorld(), BlockModelSpinner::new);
|
||||||
|
|
||||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||||
float angle = (time * te.getSpeed()) % 360;
|
float angle = (time * te.getSpeed()) % 360;
|
||||||
|
@ -42,7 +42,7 @@ public class SplitShaftTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
angle += offset;
|
angle += offset;
|
||||||
angle = angle / 180f * (float) Math.PI;
|
angle = angle / 180f * (float) Math.PI;
|
||||||
|
|
||||||
renderFromCache(buffer, state, (float) x, (float) y, (float) z, pos, axis, angle);
|
renderFromCache(buffer, state, getWorld(), (float) x, (float) y, (float) z, pos, axis, angle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ public class BeltTileEntityRenderer extends KineticTileEntityRenderer {
|
||||||
if (beltEntity.hasPulley())
|
if (beltEntity.hasPulley())
|
||||||
super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer);
|
super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer);
|
||||||
|
|
||||||
cacheIfMissing(beltEntity.getBlockState(), BeltModelAnimator::new);
|
cacheIfMissing(beltEntity.getBlockState(), getWorld(), BeltModelAnimator::new);
|
||||||
renderBeltFromCache(beltEntity, (float) x, (float) y, (float) z, buffer);
|
renderBeltFromCache(beltEntity, (float) x, (float) y, (float) z, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"forge_marker": 1,
|
||||||
"fixated=false,facing=up": { "model": "create:block/drill", "x": 90 },
|
"defaults": {
|
||||||
"fixated=false,facing=down": { "model": "create:block/drill", "x": 270 },
|
"model": "create:block/drill_base"
|
||||||
"fixated=false,facing=north": { "model": "create:block/drill", "y": 180 },
|
},
|
||||||
"fixated=false,facing=south": { "model": "create:block/drill" },
|
"variants": {
|
||||||
"fixated=false,facing=east": { "model": "create:block/drill", "y": 270 },
|
"facing": {
|
||||||
"fixated=false,facing=west": { "model": "create:block/drill", "y": 90 },
|
"north": { "y": 180 },
|
||||||
|
"south": { },
|
||||||
"fixated=true,facing=up": { "model": "create:block/drill_fixated", "x": 90 },
|
"west": { "y": 90 },
|
||||||
"fixated=true,facing=down": { "model": "create:block/drill_fixated", "x": 270 },
|
"up": { "x": 90 },
|
||||||
"fixated=true,facing=north": { "model": "create:block/drill_fixated", "y": 180 },
|
"down": { "x": 270 },
|
||||||
"fixated=true,facing=south": { "model": "create:block/drill_fixated" },
|
"east": { "y": 270 }
|
||||||
"fixated=true,facing=east": { "model": "create:block/drill_fixated", "y": 270 },
|
}
|
||||||
"fixated=true,facing=west": { "model": "create:block/drill_fixated", "y": 90 }
|
}
|
||||||
}
|
|
||||||
}
|
}
|
16
src/main/resources/assets/create/blockstates/drill_head.json
Normal file
16
src/main/resources/assets/create/blockstates/drill_head.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"forge_marker": 1,
|
||||||
|
"defaults": {
|
||||||
|
"model": "create:block/drill"
|
||||||
|
},
|
||||||
|
"variants": {
|
||||||
|
"facing": {
|
||||||
|
"north": { "y": 180 },
|
||||||
|
"south": { },
|
||||||
|
"west": { "y": 90 },
|
||||||
|
"up": { "x": 90 },
|
||||||
|
"down": { "x": 270 },
|
||||||
|
"east": { "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,14 @@
|
||||||
{
|
{
|
||||||
|
"forge_marker": 1,
|
||||||
|
"defaults": {
|
||||||
|
"model": "create:block/harvester"
|
||||||
|
},
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=north": { "model": "create:block/harvester", "y": 180 },
|
"facing": {
|
||||||
"facing=south": { "model": "create:block/harvester" },
|
"north": { "y": 180 },
|
||||||
"facing=east": { "model": "create:block/harvester", "y": 270 },
|
"south": {},
|
||||||
"facing=west": { "model": "create:block/harvester", "y": 90 }
|
"east": { "y": 270 },
|
||||||
|
"west": { "y": 90 }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"forge_marker": 1,
|
||||||
|
"defaults": {
|
||||||
|
"model": "create:block/harvester_blade"
|
||||||
|
},
|
||||||
|
"variants": {
|
||||||
|
"facing": {
|
||||||
|
"north": { "y": 180 },
|
||||||
|
"south": {},
|
||||||
|
"east": { "y": 270 },
|
||||||
|
"west": { "y": 90 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +1,41 @@
|
||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"variants": {
|
"defaults": {
|
||||||
"axis=x,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 90 },
|
"model": "block/cube_bottom_top",
|
||||||
"axis=x,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 90 },
|
"textures": {
|
||||||
"axis=x,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 90 },
|
"side": "create:block/translation_chassis_side"
|
||||||
"axis=x,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 90 },
|
},
|
||||||
"axis=y,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis" },
|
"transform": "forge:default-block"
|
||||||
"axis=y,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky" },
|
},
|
||||||
"axis=y,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky" },
|
"variants": {
|
||||||
"axis=y,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky" },
|
"axis": {
|
||||||
"axis=z,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 180 },
|
"x": { "x": 90, "y": 90 },
|
||||||
"axis=z,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 180 },
|
"y": { },
|
||||||
"axis=z,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 180 },
|
"z": { "x": 90, "y": 180 }
|
||||||
"axis=z,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 180 }
|
},
|
||||||
}
|
"sticky_top": {
|
||||||
|
"false": {
|
||||||
|
"textures": {
|
||||||
|
"top": "create:block/translation_chassis_top"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"true": {
|
||||||
|
"textures": {
|
||||||
|
"top": "create:block/translation_chassis_top_sticky"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sticky_bottom": {
|
||||||
|
"false": {
|
||||||
|
"textures": {
|
||||||
|
"bottom": "create:block/translation_chassis_top"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"true": {
|
||||||
|
"textures": {
|
||||||
|
"bottom": "create:block/translation_chassis_top_sticky"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,22 +1,41 @@
|
||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"textures": {
|
"model": "block/cube_bottom_top",
|
||||||
"side": "create:block/translation_chassis_side_alt"
|
"textures": {
|
||||||
}
|
"side": "create:block/translation_chassis_side_alt"
|
||||||
},
|
},
|
||||||
"variants": {
|
"transform": "forge:default-block"
|
||||||
"axis=x,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 90 },
|
},
|
||||||
"axis=x,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 90 },
|
"variants": {
|
||||||
"axis=x,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 90 },
|
"axis": {
|
||||||
"axis=x,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 90 },
|
"x": { "x": 90, "y": 90 },
|
||||||
"axis=y,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis" },
|
"y": { },
|
||||||
"axis=y,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky" },
|
"z": { "x": 90, "y": 180 }
|
||||||
"axis=y,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky" },
|
},
|
||||||
"axis=y,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky" },
|
"sticky_top": {
|
||||||
"axis=z,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 180 },
|
"false": {
|
||||||
"axis=z,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 180 },
|
"textures": {
|
||||||
"axis=z,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 180 },
|
"top": "create:block/translation_chassis_top"
|
||||||
"axis=z,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 180 }
|
}
|
||||||
}
|
},
|
||||||
|
"true": {
|
||||||
|
"textures": {
|
||||||
|
"top": "create:block/translation_chassis_top_sticky"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sticky_bottom": {
|
||||||
|
"false": {
|
||||||
|
"textures": {
|
||||||
|
"bottom": "create:block/translation_chassis_top"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"true": {
|
||||||
|
"textures": {
|
||||||
|
"bottom": "create:block/translation_chassis_top_sticky"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
10
src/main/resources/assets/create/models/block/block.json
Normal file
10
src/main/resources/assets/create/models/block/block.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"parent": "block/block",
|
||||||
|
"display": {
|
||||||
|
"gui": {
|
||||||
|
"rotation": [ 30, 45, 0 ],
|
||||||
|
"translation": [ 0, 0, 0],
|
||||||
|
"scale":[ 0.625, 0.625, 0.625 ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,179 +1,79 @@
|
||||||
{
|
{
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
"parent": "block/cube",
|
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "block/anvil",
|
"gearbox_top": "create:block/gearbox_top",
|
||||||
"0": "create:block/axis_top",
|
"anvil": "minecraft:block/anvil",
|
||||||
"1": "create:block/axis",
|
"gearbox": "create:block/gearbox",
|
||||||
"2": "block/anvil",
|
"axis_top": "create:block/axis_top",
|
||||||
"3": "block/smooth_stone",
|
"axis": "create:block/axis",
|
||||||
"4": "block/polished_andesite"
|
"andesite_casing_short": "create:block/andesite_casing_short"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"name": "Axle",
|
"name": "Drill",
|
||||||
"from": [ 6.0, 6.0, 0.0 ],
|
"from": [ 4, 4, 11 ],
|
||||||
"to": [ 10.0, 10.0, 4.0 ],
|
"to": [ 12, 12, 13 ],
|
||||||
"shade": false,
|
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
||||||
"east": { "texture": "#1", "uv": [ 6.0, 12.0, 10.0, 16.0 ], "rotation": 90 },
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 13 ] },
|
||||||
"west": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 4.0 ], "rotation": 270 },
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
||||||
"up": { "texture": "#1", "uv": [ 6.0, 12.0, 10.0, 16.0 ] },
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 12 ] },
|
||||||
"down": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 4.0 ], "rotation": 180 }
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 13, 7 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 12, 5 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Core",
|
"name": "Drill",
|
||||||
"from": [ 5.0, 5.0, 4.0 ],
|
"from": [ 5, 5, 13 ],
|
||||||
"to": [ 11.0, 11.0, 12.0 ],
|
"to": [ 11, 11, 15 ],
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 },
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 },
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 6.0 ] },
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 6.0 ] },
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 11 ] },
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 6.0 ] },
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 6.0 ] },
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 10 ] },
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 8.0 ] },
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 11, 7 ] },
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 10, 5 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Top",
|
"name": "Drill",
|
||||||
"from": [ 6.0, 11.0, 7.0 ],
|
"from": [ 6, 6, 15 ],
|
||||||
"to": [ 10.0, 13.0, 13.0 ],
|
"to": [ 10, 10, 17 ],
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 },
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 9 ] },
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 8 ] },
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] },
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 9, 7 ] },
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 8, 5 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Bottom",
|
"name": "Drill",
|
||||||
"from": [ 6.0, 3.0, 7.0 ],
|
"from": [ 7, 7, 17 ],
|
||||||
"to": [ 10.0, 5.0, 13.0 ],
|
"to": [ 9, 9, 19 ],
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 },
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 7 ] },
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 6 ] },
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] },
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 7, 7 ] },
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 6, 5 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Left",
|
"name": "Shaft",
|
||||||
"from": [ 3.0, 6.0, 7.0 ],
|
"from": [ 6, 6, 0 ],
|
||||||
"to": [ 5.0, 10.0, 13.0 ],
|
"to": [ 10, 10, 11 ],
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
"north": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ] },
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
"east": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ], "rotation": 90 },
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
"west": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ], "rotation": 270 },
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
"up": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ] },
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 6.0 ] },
|
"down": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ] }
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Right",
|
|
||||||
"from": [ 11.0, 6.0, 7.0 ],
|
|
||||||
"to": [ 13.0, 10.0, 13.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 6.0 ] },
|
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit1",
|
|
||||||
"from": [ 6.0, 6.0, 12.0 ],
|
|
||||||
"to": [ 10.0, 10.0, 16.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit2",
|
|
||||||
"from": [ 6.499999992549419, 6.499999992549419, 15.0 ],
|
|
||||||
"to": [ 9.49999999254942, 9.49999999254942, 19.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 3.0, 3.0 ] },
|
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 3.0 ] },
|
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 3.0, 3.0 ] },
|
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 3.0 ] },
|
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 3.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit3",
|
|
||||||
"from": [ 7.0, 7.0, 18.0 ],
|
|
||||||
"to": [ 9.0, 9.0, 22.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cross1",
|
|
||||||
"from": [ 6.0, 2.0, 3.0 ],
|
|
||||||
"to": [ 10.0, 14.0, 7.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"east": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"south": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"west": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cross2",
|
|
||||||
"from": [ 2.0, 6.0, 3.0 ],
|
|
||||||
"to": [ 14.0, 10.0, 7.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 270 },
|
|
||||||
"east": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"south": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 90 },
|
|
||||||
"west": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"up": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 90 },
|
|
||||||
"down": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Connector",
|
|
||||||
"from": [ 5.0, 5.0, 2.0 ],
|
|
||||||
"to": [ 11.0, 11.0, 4.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#3", "uv": [ 5.0, 5.0, 11.0, 11.0 ] },
|
|
||||||
"east": { "texture": "#4", "uv": [ 0.0, 6.0, 2.0, 12.0 ], "rotation": 180 },
|
|
||||||
"west": { "texture": "#4", "uv": [ 0.0, 5.0, 2.0, 11.0 ] },
|
|
||||||
"up": { "texture": "#4", "uv": [ 4.0, 0.0, 10.0, 2.0 ] },
|
|
||||||
"down": { "texture": "#4", "uv": [ 4.0, 0.0, 10.0, 2.0 ], "rotation": 180 }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
"textures": {
|
"textures": {
|
||||||
|
"particle": "create:block/gearbox_top",
|
||||||
"gearbox_top": "create:block/gearbox_top",
|
"gearbox_top": "create:block/gearbox_top",
|
||||||
"anvil": "minecraft:block/anvil",
|
"anvil": "minecraft:block/anvil",
|
||||||
"gearbox": "create:block/gearbox",
|
"gearbox": "create:block/gearbox",
|
||||||
|
@ -63,61 +64,6 @@
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
"south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 4, 4, 11 ],
|
|
||||||
"to": [ 12, 12, 13 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 13 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 12 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 13, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 12, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 5, 5, 13 ],
|
|
||||||
"to": [ 11, 11, 15 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 11 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 10 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 11, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 10, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 6, 6, 15 ],
|
|
||||||
"to": [ 10, 10, 17 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 9 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 8 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 9, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 8, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 7, 7, 17 ],
|
|
||||||
"to": [ 9, 9, 19 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 7 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 6 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 7, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 6, 5 ] }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,174 +0,0 @@
|
||||||
{
|
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
|
|
||||||
"parent": "block/cube",
|
|
||||||
"display": {
|
|
||||||
"gui": {
|
|
||||||
"rotation": [ 30, 45, 0 ],
|
|
||||||
"translation": [ 0, 0, 0],
|
|
||||||
"scale":[ 0.625, 0.625, 0.625 ]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"textures": {
|
|
||||||
"particle": "block/anvil",
|
|
||||||
"0": "block/anvil",
|
|
||||||
"1": "create:block/axis",
|
|
||||||
"2": "create:block/axis_top",
|
|
||||||
"3": "block/smooth_stone",
|
|
||||||
"4": "block/polished_andesite"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"name": "Core",
|
|
||||||
"from": [ 5.0, 5.0, 4.0 ],
|
|
||||||
"to": [ 11.0, 11.0, 12.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 8.0, 6.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 8.0, 6.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Top",
|
|
||||||
"from": [ 6.0, 11.0, 7.0 ],
|
|
||||||
"to": [ 10.0, 13.0, 13.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 6.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bottom",
|
|
||||||
"from": [ 6.0, 3.0, 7.0 ],
|
|
||||||
"to": [ 10.0, 5.0, 13.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 2.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 6.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Left",
|
|
||||||
"from": [ 3.0, 6.0, 7.0 ],
|
|
||||||
"to": [ 5.0, 10.0, 13.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 6.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Right",
|
|
||||||
"from": [ 11.0, 6.0, 7.0 ],
|
|
||||||
"to": [ 13.0, 10.0, 13.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 4.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 6.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 6.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit1",
|
|
||||||
"from": [ 6.0, 6.0, 12.0 ],
|
|
||||||
"to": [ 10.0, 10.0, 16.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit2",
|
|
||||||
"from": [ 6.499999992549419, 6.499999992549419, 15.0 ],
|
|
||||||
"to": [ 9.49999999254942, 9.49999999254942, 19.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 3.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 3.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 3.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 3.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bit3",
|
|
||||||
"from": [ 7.0, 7.0, 18.0 ],
|
|
||||||
"to": [ 9.0, 9.0, 22.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
|
||||||
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
|
||||||
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 2.0 ] },
|
|
||||||
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cross1",
|
|
||||||
"from": [ 6.0, 2.0, 3.0 ],
|
|
||||||
"to": [ 10.0, 14.0, 7.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"east": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"south": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"west": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ] },
|
|
||||||
"up": { "texture": "#2", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"down": { "texture": "#2", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cross2",
|
|
||||||
"from": [ 2.0, 6.0, 3.0 ],
|
|
||||||
"to": [ 14.0, 10.0, 7.0 ],
|
|
||||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 270 },
|
|
||||||
"east": { "texture": "#2", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"south": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 90 },
|
|
||||||
"west": { "texture": "#2", "uv": [ 6.0, 6.0, 10.0, 10.0 ] },
|
|
||||||
"up": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 90 },
|
|
||||||
"down": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 16.0 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Connector",
|
|
||||||
"from": [ 4.0, 4.0, 0.0 ],
|
|
||||||
"to": [ 12.0, 12.0, 4.0 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#3", "uv": [ 4.0, 4.0, 12.0, 12.0 ] },
|
|
||||||
"east": { "texture": "#4", "uv": [ 0.0, 4.0, 4.0, 12.0 ], "rotation": 180 },
|
|
||||||
"south": { "texture": "#4", "uv": [ 4.0, 4.0, 12.0, 12.0 ] },
|
|
||||||
"west": { "texture": "#4", "uv": [ 0.0, 4.0, 4.0, 12.0 ] },
|
|
||||||
"up": { "texture": "#4", "uv": [ 4.0, 0.0, 12.0, 4.0 ] },
|
|
||||||
"down": { "texture": "#4", "uv": [ 4.0, 0.0, 12.0, 4.0 ], "rotation": 180 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,54 +1,51 @@
|
||||||
{
|
{
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
"parent": "block/cube",
|
|
||||||
"display": {
|
|
||||||
"gui": {
|
|
||||||
"rotation": [ 30, 45, 0 ],
|
|
||||||
"translation": [ 0, 0, 0],
|
|
||||||
"scale":[ 0.625, 0.625, 0.625 ]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "block/anvil",
|
"harvester": "create:block/harvester",
|
||||||
"0": "block/smooth_stone",
|
"anvil": "minecraft:block/anvil",
|
||||||
"1": "block/polished_andesite",
|
"andesite_casing_short": "create:block/andesite_casing_short",
|
||||||
"2": "block/anvil",
|
"particle": "create:block/andesite_casing_short"
|
||||||
"3": "block/stonecutter_saw"
|
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"name": "Connector",
|
"name": "Core",
|
||||||
"from": [ 1.0, 4.0, 0.0 ],
|
"from": [ 0, 2, 0 ],
|
||||||
"to": [ 15.0, 12.0, 4.0 ],
|
"to": [ 16, 14, 2.9 ],
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 12.0 ] },
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
||||||
"east": { "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ], "rotation": 180 },
|
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 0, 14, 3 ], "rotation": 270 },
|
||||||
"south": { "texture": "#1", "uv": [ 1.0, 4.0, 15.0, 12.0 ] },
|
"south": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
||||||
"west": { "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] },
|
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 0, 14, 3 ], "rotation": 90 },
|
||||||
"up": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 4.0 ] },
|
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 16, 2.9 ], "rotation": 180 },
|
||||||
"down": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 4.0 ], "rotation": 180 }
|
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 16, 2.9 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Body",
|
"name": "Attachment",
|
||||||
"from": [ 0.0, 6.0, 2.0 ],
|
"from": [ 0.1, 7, 3 ],
|
||||||
"to": [ 16.0, 10.0, 6.0 ],
|
"to": [ 2, 10, 11 ],
|
||||||
|
"rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 },
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 1.9, 3 ] },
|
||||||
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
|
"south": { "texture": "#andesite_casing_short", "uv": [ 0.1, 8, 2, 11 ] },
|
||||||
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] },
|
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
|
"up": { "texture": "#andesite_casing_short", "uv": [ 0.1, 6, 2, 14 ] },
|
||||||
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] }
|
"down": { "texture": "#andesite_casing_short", "uv": [ 0.1, 6, 2, 14 ] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Saw",
|
"name": "Attachment",
|
||||||
"from": [ 1.0, 8.0, 6.0 ],
|
"from": [ 14, 7, 3 ],
|
||||||
"to": [ 15.0, 8.100000001490116, 13.0 ],
|
"to": [ 15.9, 10, 11 ],
|
||||||
|
"rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 },
|
||||||
"faces": {
|
"faces": {
|
||||||
"up": { "texture": "#3", "uv": [ 1.0, 9.0, 15.0, 16.0 ], "rotation": 180 },
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 1.9, 3 ] },
|
||||||
"down": { "texture": "#3", "uv": [ 1.0, 9.0, 15.0, 16.0 ] }
|
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"south": { "texture": "#andesite_casing_short", "uv": [ 14, 8, 15.9, 11 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"up": { "texture": "#andesite_casing_short", "uv": [ 14, 6, 15.9, 14 ] },
|
||||||
|
"down": { "texture": "#andesite_casing_short", "uv": [ 14, 6, 15.9, 14 ] }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
{
|
||||||
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
|
"textures": {
|
||||||
|
"harvester": "create:block/harvester",
|
||||||
|
"anvil": "minecraft:block/anvil",
|
||||||
|
"andesite_casing_short": "create:block/andesite_casing_short"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Wheel",
|
||||||
|
"from": [ 1, 0, 3 ],
|
||||||
|
"to": [ 1.0625, 12, 15 ],
|
||||||
|
"rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 },
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] },
|
||||||
|
"west": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 0, 11 ],
|
||||||
|
"to": [ 16, 2, 12 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 10, 6 ],
|
||||||
|
"to": [ 16, 12, 7 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 8, 13 ],
|
||||||
|
"to": [ 16, 9, 15 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 9, 16, 10 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 3, 3 ],
|
||||||
|
"to": [ 16, 4, 5 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 6, 15 ],
|
||||||
|
"to": [ 16, 8, 15.0625 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 },
|
||||||
|
"south": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ], "rotation": 180 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wheel",
|
||||||
|
"from": [ 15, 0, 3 ],
|
||||||
|
"to": [ 15.0625, 12, 15 ],
|
||||||
|
"rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 },
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] },
|
||||||
|
"west": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 4, 3 ],
|
||||||
|
"to": [ 16, 6, 3.0625 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] },
|
||||||
|
"south": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 12, 7 ],
|
||||||
|
"to": [ 16, 12.0625, 9 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 },
|
||||||
|
"down": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 0.0625, 9 ],
|
||||||
|
"to": [ 16, 0.125, 11 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] },
|
||||||
|
"down": { "texture": "#harvester", "uv": [ 16, 12, 0, 14 ], "rotation": 180 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,137 +0,0 @@
|
||||||
{
|
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
|
||||||
"textures": {
|
|
||||||
"gearbox_top": "create:block/gearbox_top",
|
|
||||||
"anvil": "minecraft:block/anvil",
|
|
||||||
"gearbox": "create:block/gearbox",
|
|
||||||
"axis_top": "create:block/axis_top",
|
|
||||||
"axis": "create:block/axis",
|
|
||||||
"andesite_casing_short": "create:block/andesite_casing_short"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"name": "Body",
|
|
||||||
"from": [ 2, 2, 1 ],
|
|
||||||
"to": [ 14, 14, 11 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] },
|
|
||||||
"south": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bottom",
|
|
||||||
"from": [ 0, 0, 0 ],
|
|
||||||
"to": [ 16, 2, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
|
||||||
"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": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
|
||||||
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
|
||||||
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Side",
|
|
||||||
"from": [ 0, 2, 0 ],
|
|
||||||
"to": [ 2, 14, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Side",
|
|
||||||
"from": [ 14, 2, 0 ],
|
|
||||||
"to": [ 16, 14, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 4, 4, 11 ],
|
|
||||||
"to": [ 12, 12, 13 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 13 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 12 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 13, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 12, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 5, 5, 13 ],
|
|
||||||
"to": [ 11, 11, 15 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 11 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 10 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 11, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 10, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 6, 6, 15 ],
|
|
||||||
"to": [ 10, 10, 17 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 9 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 8 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 9, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 8, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 7, 7, 17 ],
|
|
||||||
"to": [ 9, 9, 19 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 7 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 6 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 7, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 6, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Shaft",
|
|
||||||
"from": [ 6, 6, 0 ],
|
|
||||||
"to": [ 10, 10, 11 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ] },
|
|
||||||
"east": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ], "rotation": 90 },
|
|
||||||
"west": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ], "rotation": 270 },
|
|
||||||
"up": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ] },
|
|
||||||
"down": { "texture": "#axis", "uv": [ 6, 0, 10, 11 ] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/saw",
|
||||||
|
"textures": {
|
||||||
|
"stonecutter_saw": "create:block/static_saw",
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,124 @@
|
||||||
{
|
{
|
||||||
"parent": "create:block/drill_fixated",
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
"display": {
|
"textures": {
|
||||||
"fixed": {
|
"gearbox_top": "create:block/gearbox_top",
|
||||||
"rotation": [ 0, 180, 0 ],
|
"anvil": "minecraft:block/anvil",
|
||||||
"translation": [ 0, 0, -3],
|
"gearbox": "create:block/gearbox",
|
||||||
"scale":[ 0.5, 0.5, 0.5 ]
|
"andesite_casing_short": "create:block/andesite_casing_short"
|
||||||
|
},
|
||||||
|
"parent": "create:block/block",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Body",
|
||||||
|
"from": [ 2, 2, 1 ],
|
||||||
|
"to": [ 14, 14, 11 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] },
|
||||||
|
"south": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bottom",
|
||||||
|
"from": [ 0, 0, 0 ],
|
||||||
|
"to": [ 16, 2, 12 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
||||||
|
"south": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
||||||
|
"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": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
||||||
|
"south": { "texture": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
||||||
|
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
||||||
|
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Side",
|
||||||
|
"from": [ 0, 2, 0 ],
|
||||||
|
"to": [ 2, 14, 12 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
||||||
|
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Side",
|
||||||
|
"from": [ 14, 2, 0 ],
|
||||||
|
"to": [ 16, 14, 12 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
||||||
|
"south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Drill",
|
||||||
|
"from": [ 4, 4, 11 ],
|
||||||
|
"to": [ 12, 12, 13 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 13 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 12 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 13, 7 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 12, 5 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Drill",
|
||||||
|
"from": [ 5, 5, 13 ],
|
||||||
|
"to": [ 11, 11, 15 ],
|
||||||
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 },
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 11 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 10 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 11, 7 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 10, 5 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Drill",
|
||||||
|
"from": [ 6, 6, 15 ],
|
||||||
|
"to": [ 10, 10, 17 ],
|
||||||
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 },
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 9 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 8 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 9, 7 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 8, 5 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Drill",
|
||||||
|
"from": [ 7, 7, 17 ],
|
||||||
|
"to": [ 9, 9, 19 ],
|
||||||
|
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 },
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 7 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 6 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 5, 5, 7, 7 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 4, 3, 6, 5 ] }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
}
|
}
|
|
@ -1,10 +1,161 @@
|
||||||
{
|
{
|
||||||
"parent": "create:block/harvester",
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
"display": {
|
"parent": "create:block/block",
|
||||||
"fixed": {
|
"textures": {
|
||||||
"rotation": [ 0, 180, 0 ],
|
"harvester": "create:block/harvester",
|
||||||
"translation": [ 0, 0, -3],
|
"anvil": "minecraft:block/anvil",
|
||||||
"scale":[ 0.5, 0.5, 0.5 ]
|
"andesite_casing_short": "create:block/andesite_casing_short",
|
||||||
|
"particle": "create:block/andesite_casing_short"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Core",
|
||||||
|
"from": [ 0, 2, 0 ],
|
||||||
|
"to": [ 16, 14, 2.9 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 0, 14, 3 ], "rotation": 270 },
|
||||||
|
"south": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 0, 14, 3 ], "rotation": 90 },
|
||||||
|
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 16, 2.9 ], "rotation": 180 },
|
||||||
|
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 16, 2.9 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wheel",
|
||||||
|
"from": [ 1, 0, 3 ],
|
||||||
|
"to": [ 1, 12, 15 ],
|
||||||
|
"rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 },
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] },
|
||||||
|
"west": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 0, 11 ],
|
||||||
|
"to": [ 16, 2, 12 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 10, 6 ],
|
||||||
|
"to": [ 16, 12, 7 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 1, 2 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 8, 13 ],
|
||||||
|
"to": [ 16, 9, 15 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 9, 16, 10 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trim",
|
||||||
|
"from": [ 0, 3, 3 ],
|
||||||
|
"to": [ 16, 4, 5 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"east": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"south": { "texture": "#anvil", "uv": [ 0, 0, 16, 1 ] },
|
||||||
|
"west": { "texture": "#anvil", "uv": [ 0, 0, 2, 1 ] },
|
||||||
|
"up": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] },
|
||||||
|
"down": { "texture": "#anvil", "uv": [ 0, 0, 16, 2 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 6, 15 ],
|
||||||
|
"to": [ 16, 8, 15 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 },
|
||||||
|
"south": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wheel",
|
||||||
|
"from": [ 15, 0, 3 ],
|
||||||
|
"to": [ 15, 12, 15 ],
|
||||||
|
"rotation": { "origin": [ 8, 6, 9 ], "axis": "x", "angle": -22.5 },
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] },
|
||||||
|
"west": { "texture": "#harvester", "uv": [ 0, 0, 12, 12 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 4, 3 ],
|
||||||
|
"to": [ 16, 6, 3 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] },
|
||||||
|
"south": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 12, 7 ],
|
||||||
|
"to": [ 16, 12, 9 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 },
|
||||||
|
"down": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Blade",
|
||||||
|
"from": [ 0, 0, 9 ],
|
||||||
|
"to": [ 16, 0, 11 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ] },
|
||||||
|
"down": { "texture": "#harvester", "uv": [ 0, 12, 16, 14 ], "rotation": 180 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Attachment",
|
||||||
|
"from": [ 0.1, 7, 3 ],
|
||||||
|
"to": [ 2, 10, 11 ],
|
||||||
|
"rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 },
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 1.9, 3 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"south": { "texture": "#andesite_casing_short", "uv": [ 0.1, 8, 2, 11 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"up": { "texture": "#andesite_casing_short", "uv": [ 0.1, 6, 2, 14 ] },
|
||||||
|
"down": { "texture": "#andesite_casing_short", "uv": [ 0.1, 6, 2, 14 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Attachment",
|
||||||
|
"from": [ 14, 7, 3 ],
|
||||||
|
"to": [ 15.9, 10, 11 ],
|
||||||
|
"rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 },
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 1.9, 3 ] },
|
||||||
|
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"south": { "texture": "#andesite_casing_short", "uv": [ 14, 8, 15.9, 11 ] },
|
||||||
|
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 0, 8, 3 ] },
|
||||||
|
"up": { "texture": "#andesite_casing_short", "uv": [ 14, 6, 15.9, 14 ] },
|
||||||
|
"down": { "texture": "#andesite_casing_short", "uv": [ 14, 6, 15.9, 14 ] }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
}
|
}
|
|
@ -1,123 +0,0 @@
|
||||||
{
|
|
||||||
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
|
||||||
"textures": {
|
|
||||||
"gearbox_top": "create:block/gearbox_top",
|
|
||||||
"anvil": "minecraft:block/anvil",
|
|
||||||
"gearbox": "create:block/gearbox",
|
|
||||||
"andesite_casing_short": "create:block/andesite_casing_short"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"name": "Body",
|
|
||||||
"from": [ 2, 2, 1 ],
|
|
||||||
"to": [ 14, 14, 11 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] },
|
|
||||||
"south": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bottom",
|
|
||||||
"from": [ 0, 0, 0 ],
|
|
||||||
"to": [ 16, 2, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 14, 16, 16 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 2, 16 ], "rotation": 270 },
|
|
||||||
"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": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 0, 16, 2 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 14, 4, 16, 16 ], "rotation": 270 },
|
|
||||||
"up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] },
|
|
||||||
"down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Side",
|
|
||||||
"from": [ 0, 2, 0 ],
|
|
||||||
"to": [ 2, 14, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Side",
|
|
||||||
"from": [ 14, 2, 0 ],
|
|
||||||
"to": [ 16, 14, 12 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] },
|
|
||||||
"east": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 90 },
|
|
||||||
"south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] },
|
|
||||||
"west": { "texture": "#andesite_casing_short", "uv": [ 2, 4, 14, 16 ], "rotation": 270 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 4, 4, 11 ],
|
|
||||||
"to": [ 12, 12, 13 ],
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 13 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 11, 11 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 12 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 13, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 12, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 5, 5, 13 ],
|
|
||||||
"to": [ 11, 11, 15 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 11 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 9, 9 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 10 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 11, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 10, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 6, 6, 15 ],
|
|
||||||
"to": [ 10, 10, 17 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 9 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 7, 7 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 8 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 9, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 8, 5 ] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Drill",
|
|
||||||
"from": [ 7, 7, 17 ],
|
|
||||||
"to": [ 9, 9, 19 ],
|
|
||||||
"rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 },
|
|
||||||
"faces": {
|
|
||||||
"north": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"east": { "texture": "#anvil", "uv": [ 10, 5, 12, 7 ] },
|
|
||||||
"south": { "texture": "#anvil", "uv": [ 3, 3, 5, 5 ] },
|
|
||||||
"west": { "texture": "#anvil", "uv": [ 8, 4, 10, 6 ] },
|
|
||||||
"up": { "texture": "#anvil", "uv": [ 5, 5, 7, 7 ] },
|
|
||||||
"down": { "texture": "#anvil", "uv": [ 4, 3, 6, 5 ] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 465 B After Width: | Height: | Size: 551 B |
BIN
src/main/resources/assets/create/textures/block/harvester.png
Normal file
BIN
src/main/resources/assets/create/textures/block/harvester.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 495 B |
BIN
src/main/resources/assets/create/textures/block/static_saw.png
Normal file
BIN
src/main/resources/assets/create/textures/block/static_saw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 246 B |
Loading…
Reference in a new issue