From d8ab5dc1227684e504a56a8418d7f7442f057c9f Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 19 Oct 2019 15:42:42 +0200 Subject: [PATCH] Dynamic Render to go - Added animation capabilities for blocks usable with the mechanical piston - New models for the harvester and the drill --- .../java/com/simibubi/create/AllBlocks.java | 4 + .../com/simibubi/create/AllTileEntities.java | 12 +- .../base/KineticTileEntityRenderer.java | 28 ++- .../contraptions/receivers/DrillBlock.java | 120 ++++------ .../receivers/DrillTileEntityRenderer.java | 46 ++++ .../receivers/HarvesterBlock.java | 61 ++++- .../receivers/HarvesterTileEntity.java | 17 ++ .../HarvesterTileEntityRenderer.java | 97 ++++++++ .../MechanicalPressTileEntityRenderer.java | 2 +- .../constructs/IHaveMovementBehavior.java | 40 +++- .../MechanicalBearingTileEntityRenderer.java | 11 +- .../MechanicalPistonTileEntity.java | 44 +++- .../MechanicalPistonTileEntityRenderer.java | 16 +- .../constructs/MovingConstructHandler.java | 24 +- .../constructs/TranslationConstruct.java | 41 +++- .../contraptions/redstone/ContactBlock.java | 16 +- .../relays/GearboxTileEntityRenderer.java | 4 +- .../relays/SplitShaftTileEntityRenderer.java | 4 +- .../relays/belt/BeltTileEntityRenderer.java | 2 +- .../assets/create/blockstates/drill.json | 29 ++- .../assets/create/blockstates/drill_head.json | 16 ++ .../assets/create/blockstates/harvester.json | 14 +- .../create/blockstates/harvester_blade.json | 14 ++ .../blockstates/translation_chassis.json | 54 +++-- .../translation_chassis_secondary.json | 59 +++-- .../assets/create/models/block/block.json | 10 + .../assets/create/models/block/drill.json | 208 +++++------------- ...anical_drill_base.json => drill_base.json} | 58 +---- .../create/models/block/drill_fixated.json | 174 --------------- .../assets/create/models/block/harvester.json | 71 +++--- .../create/models/block/harvester_blade.json | 118 ++++++++++ .../create/models/block/mechanical_drill.json | 137 ------------ .../{mechanical_harvester.json => saw.json} | 0 .../create/models/block/saw_inactive.json | 6 + .../assets/create/models/item/drill.json | 128 ++++++++++- .../assets/create/models/item/harvester.json | 165 +++++++++++++- .../create/models/item/mechanical_drill.json | 123 ----------- .../textures/block/andesite_casing_short.png | Bin 465 -> 551 bytes .../create/textures/block/harvester.png | Bin 0 -> 495 bytes .../create/textures/block/static_saw.png | Bin 0 -> 246 bytes 40 files changed, 1076 insertions(+), 897 deletions(-) create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillTileEntityRenderer.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntityRenderer.java create mode 100644 src/main/resources/assets/create/blockstates/drill_head.json create mode 100644 src/main/resources/assets/create/blockstates/harvester_blade.json create mode 100644 src/main/resources/assets/create/models/block/block.json rename src/main/resources/assets/create/models/block/{mechanical_drill_base.json => drill_base.json} (54%) delete mode 100644 src/main/resources/assets/create/models/block/drill_fixated.json create mode 100644 src/main/resources/assets/create/models/block/harvester_blade.json delete mode 100644 src/main/resources/assets/create/models/block/mechanical_drill.json rename src/main/resources/assets/create/models/block/{mechanical_harvester.json => saw.json} (100%) create mode 100644 src/main/resources/assets/create/models/block/saw_inactive.json delete mode 100644 src/main/resources/assets/create/models/item/mechanical_drill.json create mode 100644 src/main/resources/assets/create/textures/block/harvester.png create mode 100644 src/main/resources/assets/create/textures/block/static_saw.png diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index a53cc5b84..89dd33218 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -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.CrushingWheelControllerBlock; 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.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.TurntableBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingBlock; @@ -118,7 +120,9 @@ public enum AllBlocks { TRANSLATION_CHASSIS_SECONDARY(new TranslationChassisBlock()), ROTATION_CHASSIS(new RotationChassisBlock()), DRILL(new DrillBlock()), + DRILL_HEAD(new DrillHeadBlock()), HARVESTER(new HarvesterBlock()), + HARVESTER_BLADE(new HarvesterBladeBlock()), __LOGISTICS__(), CONTACT(new ContactBlock()), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index eea0f67df..c6d6abc4d 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -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.CrushingWheelTileEntity; 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.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.MechanicalPressTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity; @@ -91,12 +94,10 @@ public enum AllTileEntities { BELT(BeltTileEntity::new, AllBlocks.BELT), MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON), MECHANICAL_BEARING(MechanicalBearingTileEntity::new, AllBlocks.MECHANICAL_BEARING), - CHASSIS( - ChassisTileEntity::new, - AllBlocks.ROTATION_CHASSIS, - AllBlocks.TRANSLATION_CHASSIS, + CHASSIS(ChassisTileEntity::new, AllBlocks.ROTATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS_SECONDARY), DRILL(DrillTileEntity::new, AllBlocks.DRILL), + HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER), CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL), CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER), WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL), @@ -161,6 +162,7 @@ public enum AllTileEntities { bind(TurntableTileEntity.class, new KineticTileEntityRenderer()); bind(MotorTileEntity.class, new MotorTileEntityRenderer()); bind(EncasedShaftTileEntity.class, new EncasedShaftTileEntityRenderer()); + bind(DrillTileEntity.class, new DrillTileEntityRenderer()); bind(EncasedFanTileEntity.class, new EncasedFanTileEntityRenderer()); bind(GearboxTileEntity.class, new GearboxTileEntityRenderer()); bind(GearshiftTileEntity.class, new SplitShaftTileEntityRenderer()); @@ -168,7 +170,6 @@ public enum AllTileEntities { bind(BeltTileEntity.class, new BeltTileEntityRenderer()); bind(MechanicalPistonTileEntity.class, new MechanicalPistonTileEntityRenderer()); bind(MechanicalBearingTileEntity.class, new MechanicalBearingTileEntityRenderer()); - bind(DrillTileEntity.class, new KineticTileEntityRenderer()); bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer()); bind(WaterWheelTileEntity.class, new KineticTileEntityRenderer()); bind(RedstoneBridgeTileEntity.class, new LinkedTileEntityRenderer()); @@ -179,6 +180,7 @@ public enum AllTileEntities { bind(FlexpeaterTileEntity.class, new FlexpeaterTileEntityRenderer()); bind(LogisticalControllerTileEntity.class, new LogisticalControllerTileEntityRenderer()); bind(LogisticiansTableTileEntity.class, new LogisticiansTableTileEntityRenderer()); + bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer()); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java index 6d7b876ae..f402c9a9b 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java @@ -21,6 +21,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; 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.api.distmarker.Dist; import net.minecraftforge.client.model.animation.Animation; import net.minecraftforge.client.model.animation.TileEntityRendererFast; @@ -32,7 +33,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast cachedBuffers; - protected class BlockModelSpinner extends BufferManipulator { + protected static class BlockModelSpinner extends BufferManipulator { public BlockModelSpinner(ByteBuffer original) { super(original); @@ -50,7 +51,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast factory) { + public static BufferManipulator getBuffer(BlockState state) { + return cachedBuffers.get(state); + } + + public static void cacheIfMissing(final BlockState state, World world, + Function factory) { if (!cachedBuffers.containsKey(state)) { BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer(); @@ -97,7 +103,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast { 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_Y = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Y), DRILL_SHAPE_Z = VoxelShapes.or(CORE_SHAPE, ShaftBlock.AXIS_Z); - public static final BooleanProperty FIXATED = BooleanProperty.create("fixated"); - public DrillBlock() { super(Properties.from(Blocks.IRON_BLOCK)); - setDefaultState(getDefaultState().with(FIXATED, true)); - } - - @Override - protected void fillStateContainer(Builder builder) { - builder.add(FIXATED); - super.fillStateContainer(builder); } @Override public boolean hasTileEntity(BlockState state) { - return !state.get(FIXATED); + return true; } @Override @@ -75,6 +67,12 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement 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 public Axis getRotationAxis(BlockState state) { return state.get(FACING).getAxis(); @@ -82,78 +80,42 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement @Override public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) { - return !state.get(FIXATED) && 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; + return face == state.get(FACING).getOpposite(); } @Override public PushReaction getPushReaction(BlockState state) { - return state.get(FIXATED) ? PushReaction.NORMAL : PushReaction.BLOCK; - } - - @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; + return PushReaction.PUSH_ONLY; } @Override protected boolean hasStaticPart() { - return false; + return true; } @Override - public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement, - MechanicalPistonTileEntity piston) { - IMovementContext context = IdleMovementContext.INSTANCE; - - if (movement != block.get(FACING)) - return context; + @OnlyIn(value = Dist.CLIENT) + public void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) { + DrillTileEntityRenderer.renderInConstruct(context, x, y, z, buffer); + } + @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); BlockState stateVisited = world.getBlockState(pos); if (stateVisited.getCollisionShape(world, pos).isEmpty()) - return context; + return; if (stateVisited.getBlockHardness(world, pos) == -1) - return context; + return; world.playEvent(2001, pos, Block.getStateId(stateVisited)); List 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)); world.addEntity(itemEntity); } + } + + public static class DrillHeadBlock extends DirectionalBlock implements IRenderUtilityBlock { + + public DrillHeadBlock() { + super(Properties.from(Blocks.AIR)); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(FACING); + super.fillStateContainer(builder); + } - return context; } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillTileEntityRenderer.java new file mode 100644 index 000000000..b472f171c --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillTileEntityRenderer.java @@ -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); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterBlock.java index 04a7a9347..d031720f9 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterBlock.java @@ -3,8 +3,8 @@ package com.simibubi.create.modules.contraptions.receivers; import java.util.List; 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.MechanicalPistonTileEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -12,6 +12,8 @@ import net.minecraft.block.Blocks; import net.minecraft.block.CropsBlock; import net.minecraft.block.HorizontalBlock; 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.item.BlockItemUseContext; import net.minecraft.item.ItemStack; @@ -19,6 +21,7 @@ import net.minecraft.state.IProperty; import net.minecraft.state.IntegerProperty; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; @@ -30,6 +33,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.IPlantable; public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior { @@ -42,6 +47,21 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha 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 public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { Direction direction = state.get(HORIZONTAL_FACING); @@ -63,6 +83,12 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha builder.add(HORIZONTAL_FACING); 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 public BlockRenderLayer getRenderLayer() { @@ -93,12 +119,14 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha } @Override - public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement, - MechanicalPistonTileEntity piston) { - IMovementContext context = IdleMovementContext.INSTANCE; + public void visitPosition(MovementContext context) { + Direction movement = context.getMovementDirection(); + World world = context.world; + BlockState block = context.state; + BlockPos pos = context.currentGridPos; if (movement != block.get(HORIZONTAL_FACING)) - return context; + return; BlockState stateVisited = world.getBlockState(pos); boolean notCropButCuttable = false; @@ -113,7 +141,7 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha if (isValidOther(world, pos, stateVisited)) notCropButCuttable = true; else - return context; + return; } List 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)); world.addEntity(itemEntity); } - - return context; } private boolean isValidCrop(World world, BlockPos pos, BlockState state) { @@ -201,4 +227,23 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha return Blocks.AIR.getDefaultState(); } + public static class HarvesterBladeBlock extends HorizontalBlock implements IRenderUtilityBlock { + + public HarvesterBladeBlock() { + super(Properties.from(Blocks.AIR)); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(HORIZONTAL_FACING); + super.fillStateContainer(builder); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.SOLID; + } + + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntity.java new file mode 100644 index 000000000..20ce961ee --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntity.java @@ -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; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntityRenderer.java new file mode 100644 index 000000000..49fed62e0 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/HarvesterTileEntityRenderer.java @@ -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 { + + 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))); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java index 2104fd28d..1701f8fb1 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java @@ -40,7 +40,7 @@ public class MechanicalPressTileEntityRenderer extends KineticTileEntityRenderer super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer); final BlockState state = getRenderedHeadBlockState(te); - cacheIfMissing(state, HeadTranslator::new); + cacheIfMissing(state, getWorld(), HeadTranslator::new); final BlockPos pos = te.getPos(); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/IHaveMovementBehavior.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/IHaveMovementBehavior.java index d7902f70f..47c1daa7d 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/IHaveMovementBehavior.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/IHaveMovementBehavior.java @@ -1,15 +1,21 @@ package com.simibubi.create.modules.contraptions.receivers.constructs; import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public interface IHaveMovementBehavior { - default IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement, - MechanicalPistonTileEntity piston) { - return IdleMovementContext.INSTANCE; + public enum MoverType { + PISTON, BEARING, MINECART; + } + + default void visitPosition(MovementContext context) { } default void tick(MechanicalPistonTileEntity piston) { @@ -19,14 +25,32 @@ public interface IHaveMovementBehavior { return false; } - public interface IMovementContext { - default boolean isBlocking() { - return false; + public class MovementContext { + + 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 { - public static IdleMovementContext INSTANCE = new IdleMovementContext(); + @OnlyIn(value = Dist.CLIENT) + default void renderInConstruct(MovementContext context, double x, double y, double z, BufferBuilder buffer) { } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalBearingTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalBearingTileEntityRenderer.java index 85e72b108..806a0bcaa 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalBearingTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalBearingTileEntityRenderer.java @@ -45,8 +45,8 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender BlockState capState = AllBlocks.MECHANICAL_BEARING_TOP.get().getDefaultState().with(BlockStateProperties.FACING, facing); - cacheIfMissing(shaftState, BlockModelSpinner::new); - cacheIfMissing(capState, BlockModelSpinner::new); + cacheIfMissing(shaftState, getWorld(), BlockModelSpinner::new); + cacheIfMissing(capState, getWorld(), BlockModelSpinner::new); float offset = getRotationOffsetForPosition(te, pos, facing.getAxis()); float angle = (time * te.getSpeed()) % 360; @@ -55,8 +55,9 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender angle = angle / 180f * (float) Math.PI; float interpolatedAngle = bearingTe.getInterpolatedAngle(partialTicks); - renderFromCache(buffer, shaftState, (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, shaftState, getWorld(), (float) x, (float) y, (float) z, pos, facing.getAxis(), angle); + renderFromCache(buffer, capState, getWorld(), (float) x, (float) y, (float) z, pos, facing.getAxis(), + interpolatedAngle); if (!bearingTe.running) return; @@ -110,7 +111,7 @@ public class MechanicalBearingTileEntityRenderer extends KineticTileEntityRender return AllBlocks.SHAFT.block.getDefaultState().with(BlockStateProperties.AXIS, ((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState())); } - + public static void invalidateCache() { if (cachedConstructs != null) cachedConstructs.invalidateAll(); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntity.java index 68bfbe097..92250cd48 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntity.java @@ -5,10 +5,14 @@ import static com.simibubi.create.CreateConfig.parameters; import java.util.Arrays; import java.util.Iterator; +import org.apache.commons.lang3.tuple.MutablePair; + import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.Create; 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 net.minecraft.block.BlockState; @@ -78,8 +82,16 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi public void read(CompoundNBT tag) { running = tag.getBoolean("Running"); offset = tag.getFloat("Offset"); - if (running && !TranslationConstruct.isFrozen()) + if (running && !TranslationConstruct.isFrozen()) { movingConstruct = TranslationConstruct.fromNBT(tag.getCompound("Construct")); + for (MutablePair 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); } @@ -90,10 +102,15 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi Direction direction = getBlockState().get(BlockStateProperties.FACING); - for (BlockInfo block : movingConstruct.actors) { + for (MutablePair 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(); - actor.visitPosition(world, block.pos.offset(direction, getModulatedOffset(newOffset)), block.state, - getMovementSpeed() > 0 ? direction : direction.getOpposite(), this); + actor.visitPosition(context); } } @@ -132,6 +149,13 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi getWorld().setBlockState(startPos, Blocks.AIR.getDefaultState(), 67); } + for (MutablePair 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); } @@ -160,7 +184,10 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi getWorld().setBlockState(targetPos, state, 3); TileEntity tileEntity = world.getTileEntity(targetPos); 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 (speed == 0) disassembleConstruct(); + else { + for (MutablePair pair : movingConstruct.actors) + pair.right.movementVec = new Vec3d( + getBlockState().get(BlockStateProperties.FACING).getDirectionVec()) + .scale(getMovementSpeed()).normalize(); + sendData(); + } return; } assembleConstruct(); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntityRenderer.java index 9c3c1d68c..02e121c0b 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonTileEntityRenderer.java @@ -3,6 +3,7 @@ package com.simibubi.create.modules.contraptions.receivers.constructs; import java.util.Random; import java.util.concurrent.TimeUnit; +import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.opengl.GL11; 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.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; @@ -21,6 +23,7 @@ import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.client.model.data.EmptyModelData; @@ -43,6 +46,17 @@ public class MechanicalPistonTileEntityRenderer extends KineticTileEntityRendere cacheConstructIfMissing(pistonTe.movingConstruct); renderConstructFromCache(pistonTe.movingConstruct, pistonTe, x, y, z, partialTicks, buffer); + for (Pair 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, ((IRotate) te.getBlockState().getBlock()).getRotationAxis(te.getBlockState())); } - + public static void invalidateCache() { if (cachedConstructs != null) cachedConstructs.invalidateAll(); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MovingConstructHandler.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MovingConstructHandler.java index db1e88ad1..703c79265 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MovingConstructHandler.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MovingConstructHandler.java @@ -26,6 +26,8 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderWorldLastEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber @@ -53,14 +55,14 @@ public class MovingConstructHandler { Vec3d movementVec = new Vec3d(te.getBlockState().get(BlockStateProperties.FACING).getDirectionVec()); TranslationConstruct construct = te.movingConstruct; - if (world.isRemote) { - renderedBBs.clear(); -// if (construct.collisionBoxFront != null) -// renderedBBs.add(construct.collisionBoxFront.offset(te.getConstructOffset(0))); -// if (construct.collisionBoxBack != null) -// renderedBBs.add(construct.collisionBoxBack.offset(te.getConstructOffset(0))); - - } +// if (world.isRemote) { +// renderedBBs.clear(); +// if (construct.pistonCollisionBox != null) +// renderedBBs.add(construct.pistonCollisionBox.offset(te.getConstructOffset(0))); +// if (construct.constructCollisionBox != null) +// renderedBBs.add(construct.constructCollisionBox.offset(te.getConstructOffset(0))); +// +// } if (construct.getCollisionBoxFront() != null) { AxisAlignedBB constructBB = construct.getCollisionBoxFront().offset(te.getConstructOffset(0)).grow(.5f); @@ -164,8 +166,8 @@ public class MovingConstructHandler { return movingPistons.get(mechanicalPistonTileEntity.getWorld()); } -// @SubscribeEvent -// public static void onRenderWorld(RenderWorldLastEvent event) { + @SubscribeEvent + public static void onRenderWorld(RenderWorldLastEvent event) { // for (AxisAlignedBB bb : renderedBBs) { // TessellatorHelper.prepareForDrawing(); // GlStateManager.disableTexture(); @@ -177,6 +179,6 @@ public class MovingConstructHandler { // GlStateManager.enableTexture(); // TessellatorHelper.cleanUpAfterDrawing(); // } -// } + } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/TranslationConstruct.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/TranslationConstruct.java index 7208350c2..a4ae58e18 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/TranslationConstruct.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/TranslationConstruct.java @@ -16,8 +16,11 @@ import java.util.Map; import java.util.Set; import java.util.function.Function; +import org.apache.commons.lang3.tuple.MutablePair; + import com.simibubi.create.AllBlocks; 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 net.minecraft.block.BlockState; @@ -43,7 +46,7 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; public class TranslationConstruct { protected Map blocks; - protected List actors; + protected List> actors; protected AxisAlignedBB constructCollisionBox; protected AxisAlignedBB pistonCollisionBox; @@ -59,7 +62,7 @@ public class TranslationConstruct { blocks = new HashMap<>(); actors = new ArrayList<>(); } - + public static TranslationConstruct movePistonAt(World world, BlockPos pos, Direction direction, boolean retract) { if (isFrozen()) return null; @@ -157,7 +160,7 @@ public class TranslationConstruct { private boolean searchMovedStructure(World world, BlockPos pos, Direction direction) { List frontier = new ArrayList<>(); Set visited = new HashSet<>(); - constructCollisionBox = new AxisAlignedBB(pos); + constructCollisionBox = new AxisAlignedBB(pos.offset(direction, initialExtensionProgress)); frontier.add(pos); 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)) return false; if (state.getBlock() instanceof SlimeBlock) - for (Direction offset : Direction.values()) - frontier.add(pos.offset(offset)); + for (Direction offset : Direction.values()) { + 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)); return true; @@ -215,11 +228,15 @@ public class TranslationConstruct { private boolean moveChassis(World world, BlockPos pos, Direction movementDirection, List frontier, Set visited) { List cluster = getChassisClusterAt(world, pos); + if (cluster == null) return false; if (cluster.isEmpty()) return true; + Set validChassis = new HashSet<>(cluster.size()); + cluster.forEach(info -> validChassis.add(info.pos)); + BlockInfo anchorChassis = cluster.get(0); Axis chassisAxis = anchorChassis.state.get(AXIS); int chassisCoord = chassisAxis.getCoordinate(anchorChassis.pos.getX(), anchorChassis.pos.getY(), @@ -277,6 +294,10 @@ public class TranslationConstruct { if (!pushing && notInRange) continue; + // Chassis not part of cluster + if (!validChassis.contains(currentChassisPos)) + continue; + boolean isBaseChassis = currentPos.equals(currentChassisPos); if (!isBaseChassis) { // Don't pull if chassis not sticky @@ -373,7 +394,7 @@ public class TranslationConstruct { return state.get(BlockStateProperties.HORIZONTAL_FACING) == facing; return false; } - + private static boolean isChassis(BlockState state) { return TranslationChassisBlock.isChassis(state); } @@ -386,14 +407,14 @@ public class TranslationConstruct { return false; return PistonBlock.canPush(blockState, world, pos, direction, true, direction); } - + private void add(BlockPos pos, BlockInfo block) { BlockPos localPos = pos.offset(orientation, -initialExtensionProgress); BlockInfo blockInfo = new BlockInfo(localPos, block.state, block.nbt); blocks.put(localPos, blockInfo); if (block.state.getBlock() instanceof IHaveMovementBehavior) - actors.add(blockInfo); - constructCollisionBox.union(new AxisAlignedBB(localPos)); + actors.add(MutablePair.of(blockInfo, null)); + constructCollisionBox = constructCollisionBox.union(new AxisAlignedBB(localPos)); } private static BlockInfo capture(World world, BlockPos pos) { @@ -482,7 +503,7 @@ public class TranslationConstruct { // Find blocks with special movement behaviour construct.blocks.values().forEach(block -> { if (block.state.getBlock() instanceof IHaveMovementBehavior) - construct.actors.add(block); + construct.actors.add(MutablePair.of(block, null)); }); return construct; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/redstone/ContactBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/redstone/ContactBlock.java index db3d23170..d63a21bcf 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/redstone/ContactBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/redstone/ContactBlock.java @@ -101,16 +101,22 @@ public class ContactBlock extends ProperDirectionalBlock implements IHaveMovemen } @Override - public IMovementContext visitPosition(World world, BlockPos pos, BlockState block, Direction movement, - MechanicalPistonTileEntity piston) { + public void visitPosition(MovementContext context) { + BlockState block = context.state; + World world = context.world; + BlockPos pos = context.currentGridPos; + Direction direction = block.get(FACING); 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.getPendingBlockTicks().scheduleTick(pos.offset(direction), this, ticksToStayActive, TickPriority.NORMAL); - return IdleMovementContext.INSTANCE; + return; } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/GearboxTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/GearboxTileEntityRenderer.java index af1578c4d..55647ad63 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/GearboxTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/GearboxTileEntityRenderer.java @@ -31,7 +31,7 @@ public class GearboxTileEntityRenderer extends KineticTileEntityRenderer { continue; BlockState state = defaultState.with(BlockStateProperties.FACING, direction); - cacheIfMissing(state, BlockModelSpinner::new); + cacheIfMissing(state, getWorld(), BlockModelSpinner::new); float offset = getRotationOffsetForPosition(te, pos, axis); float angle = (time * te.getSpeed()) % 360; @@ -48,7 +48,7 @@ public class GearboxTileEntityRenderer extends KineticTileEntityRenderer { angle += offset; 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); } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/SplitShaftTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/SplitShaftTileEntityRenderer.java index 110d41c37..9a050d7df 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/SplitShaftTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/SplitShaftTileEntityRenderer.java @@ -29,7 +29,7 @@ public class SplitShaftTileEntityRenderer extends KineticTileEntityRenderer { continue; BlockState state = defaultState.with(BlockStateProperties.FACING, direction); - cacheIfMissing(state, BlockModelSpinner::new); + cacheIfMissing(state, getWorld(), BlockModelSpinner::new); float offset = getRotationOffsetForPosition(te, pos, axis); float angle = (time * te.getSpeed()) % 360; @@ -42,7 +42,7 @@ public class SplitShaftTileEntityRenderer extends KineticTileEntityRenderer { angle += offset; 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); } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java index 5680096b9..42023d77c 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java @@ -98,7 +98,7 @@ public class BeltTileEntityRenderer extends KineticTileEntityRenderer { if (beltEntity.hasPulley()) 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); } diff --git a/src/main/resources/assets/create/blockstates/drill.json b/src/main/resources/assets/create/blockstates/drill.json index a907ffe2b..e7aa10c50 100644 --- a/src/main/resources/assets/create/blockstates/drill.json +++ b/src/main/resources/assets/create/blockstates/drill.json @@ -1,17 +1,16 @@ { - "variants": { - "fixated=false,facing=up": { "model": "create:block/drill", "x": 90 }, - "fixated=false,facing=down": { "model": "create:block/drill", "x": 270 }, - "fixated=false,facing=north": { "model": "create:block/drill", "y": 180 }, - "fixated=false,facing=south": { "model": "create:block/drill" }, - "fixated=false,facing=east": { "model": "create:block/drill", "y": 270 }, - "fixated=false,facing=west": { "model": "create:block/drill", "y": 90 }, - - "fixated=true,facing=up": { "model": "create:block/drill_fixated", "x": 90 }, - "fixated=true,facing=down": { "model": "create:block/drill_fixated", "x": 270 }, - "fixated=true,facing=north": { "model": "create:block/drill_fixated", "y": 180 }, - "fixated=true,facing=south": { "model": "create:block/drill_fixated" }, - "fixated=true,facing=east": { "model": "create:block/drill_fixated", "y": 270 }, - "fixated=true,facing=west": { "model": "create:block/drill_fixated", "y": 90 } - } + "forge_marker": 1, + "defaults": { + "model": "create:block/drill_base" + }, + "variants": { + "facing": { + "north": { "y": 180 }, + "south": { }, + "west": { "y": 90 }, + "up": { "x": 90 }, + "down": { "x": 270 }, + "east": { "y": 270 } + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/drill_head.json b/src/main/resources/assets/create/blockstates/drill_head.json new file mode 100644 index 000000000..2b9ad04f1 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/drill_head.json @@ -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 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/harvester.json b/src/main/resources/assets/create/blockstates/harvester.json index 995a0b524..a689b3c59 100644 --- a/src/main/resources/assets/create/blockstates/harvester.json +++ b/src/main/resources/assets/create/blockstates/harvester.json @@ -1,8 +1,14 @@ { + "forge_marker": 1, + "defaults": { + "model": "create:block/harvester" + }, "variants": { - "facing=north": { "model": "create:block/harvester", "y": 180 }, - "facing=south": { "model": "create:block/harvester" }, - "facing=east": { "model": "create:block/harvester", "y": 270 }, - "facing=west": { "model": "create:block/harvester", "y": 90 } + "facing": { + "north": { "y": 180 }, + "south": {}, + "east": { "y": 270 }, + "west": { "y": 90 } + } } } \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/harvester_blade.json b/src/main/resources/assets/create/blockstates/harvester_blade.json new file mode 100644 index 000000000..9e2a60716 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/harvester_blade.json @@ -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 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/translation_chassis.json b/src/main/resources/assets/create/blockstates/translation_chassis.json index 1a45f99a8..c1f72124a 100644 --- a/src/main/resources/assets/create/blockstates/translation_chassis.json +++ b/src/main/resources/assets/create/blockstates/translation_chassis.json @@ -1,17 +1,41 @@ { - "forge_marker": 1, - "variants": { - "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 }, - "axis=x,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 90 }, - "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" }, - "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" }, - "axis=y,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky" }, - "axis=z,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 180 }, - "axis=z,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 180 }, - "axis=z,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 180 }, - "axis=z,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 180 } - } + "forge_marker": 1, + "defaults": { + "model": "block/cube_bottom_top", + "textures": { + "side": "create:block/translation_chassis_side" + }, + "transform": "forge:default-block" + }, + "variants": { + "axis": { + "x": { "x": 90, "y": 90 }, + "y": { }, + "z": { "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" + } + } + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/translation_chassis_secondary.json b/src/main/resources/assets/create/blockstates/translation_chassis_secondary.json index 2ff1e8526..b12587893 100644 --- a/src/main/resources/assets/create/blockstates/translation_chassis_secondary.json +++ b/src/main/resources/assets/create/blockstates/translation_chassis_secondary.json @@ -1,22 +1,41 @@ { - "forge_marker": 1, - "defaults": { - "textures": { - "side": "create:block/translation_chassis_side_alt" - } - }, - "variants": { - "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 }, - "axis=x,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 90 }, - "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" }, - "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" }, - "axis=y,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky" }, - "axis=z,sticky_top=false,sticky_bottom=false": { "model": "create:block/translation_chassis", "x": 90, "y": 180 }, - "axis=z,sticky_top=true,sticky_bottom=false": { "model": "create:block/translation_chassis_top_sticky", "x": 90, "y": 180 }, - "axis=z,sticky_top=false,sticky_bottom=true": { "model": "create:block/translation_chassis_bottom_sticky", "x": 90, "y": 180 }, - "axis=z,sticky_top=true,sticky_bottom=true": { "model": "create:block/translation_chassis_both_sticky", "x": 90, "y": 180 } - } + "forge_marker": 1, + "defaults": { + "model": "block/cube_bottom_top", + "textures": { + "side": "create:block/translation_chassis_side_alt" + }, + "transform": "forge:default-block" + }, + "variants": { + "axis": { + "x": { "x": 90, "y": 90 }, + "y": { }, + "z": { "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" + } + } + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/block.json b/src/main/resources/assets/create/models/block/block.json new file mode 100644 index 000000000..ac628b827 --- /dev/null +++ b/src/main/resources/assets/create/models/block/block.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/drill.json b/src/main/resources/assets/create/models/block/drill.json index 713143055..50afdd458 100644 --- a/src/main/resources/assets/create/models/block/drill.json +++ b/src/main/resources/assets/create/models/block/drill.json @@ -1,179 +1,79 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "block/cube", + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", "textures": { - "particle": "block/anvil", - "0": "create:block/axis_top", - "1": "create:block/axis", - "2": "block/anvil", - "3": "block/smooth_stone", - "4": "block/polished_andesite" + "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": "Axle", - "from": [ 6.0, 6.0, 0.0 ], - "to": [ 10.0, 10.0, 4.0 ], - "shade": false, + "name": "Drill", + "from": [ 4, 4, 11 ], + "to": [ 12, 12, 13 ], "faces": { - "north": { "texture": "#0", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }, - "east": { "texture": "#1", "uv": [ 6.0, 12.0, 10.0, 16.0 ], "rotation": 90 }, - "west": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 4.0 ], "rotation": 270 }, - "up": { "texture": "#1", "uv": [ 6.0, 12.0, 10.0, 16.0 ] }, - "down": { "texture": "#1", "uv": [ 6.0, 0.0, 10.0, 4.0 ], "rotation": 180 } + "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": "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 }, + "name": "Drill", + "from": [ 5, 5, 13 ], + "to": [ 11, 11, 15 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 6.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 8.0 ] } + "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": "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 }, + "name": "Drill", + "from": [ 6, 6, 15 ], + "to": [ 10, 10, 17 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] } + "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": "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 }, + "name": "Drill", + "from": [ 7, 7, 17 ], + "to": [ 9, 9, 19 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 6.0 ] } + "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": "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 }, + "name": "Shaft", + "from": [ 6, 6, 0 ], + "to": [ 10, 10, 11 ], "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": "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 } + "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 ] } } } ] diff --git a/src/main/resources/assets/create/models/block/mechanical_drill_base.json b/src/main/resources/assets/create/models/block/drill_base.json similarity index 54% rename from src/main/resources/assets/create/models/block/mechanical_drill_base.json rename to src/main/resources/assets/create/models/block/drill_base.json index 9c673f645..76b562376 100644 --- a/src/main/resources/assets/create/models/block/mechanical_drill_base.json +++ b/src/main/resources/assets/create/models/block/drill_base.json @@ -1,6 +1,7 @@ { "__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", "anvil": "minecraft:block/anvil", "gearbox": "create:block/gearbox", @@ -63,61 +64,6 @@ "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 ] } - } } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/drill_fixated.json b/src/main/resources/assets/create/models/block/drill_fixated.json deleted file mode 100644 index 673817222..000000000 --- a/src/main/resources/assets/create/models/block/drill_fixated.json +++ /dev/null @@ -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 } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/harvester.json b/src/main/resources/assets/create/models/block/harvester.json index f02f0ed6d..8eae4a571 100644 --- a/src/main/resources/assets/create/models/block/harvester.json +++ b/src/main/resources/assets/create/models/block/harvester.json @@ -1,54 +1,51 @@ { - "__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 ] - } - }, + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", "textures": { - "particle": "block/anvil", - "0": "block/smooth_stone", - "1": "block/polished_andesite", - "2": "block/anvil", - "3": "block/stonecutter_saw" + "harvester": "create:block/harvester", + "anvil": "minecraft:block/anvil", + "andesite_casing_short": "create:block/andesite_casing_short", + "particle": "create:block/andesite_casing_short" }, "elements": [ { - "name": "Connector", - "from": [ 1.0, 4.0, 0.0 ], - "to": [ 15.0, 12.0, 4.0 ], + "name": "Core", + "from": [ 0, 2, 0 ], + "to": [ 16, 14, 2.9 ], "faces": { - "north": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 12.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ], "rotation": 180 }, - "south": { "texture": "#1", "uv": [ 1.0, 4.0, 15.0, 12.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] }, - "up": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 4.0 ] }, - "down": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 4.0 ], "rotation": 180 } + "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": "Body", - "from": [ 0.0, 6.0, 2.0 ], - "to": [ 16.0, 10.0, 6.0 ], + "name": "Attachment", + "from": [ 0.1, 7, 3 ], + "to": [ 2, 10, 11 ], + "rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 4.0 ] } + "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": "Saw", - "from": [ 1.0, 8.0, 6.0 ], - "to": [ 15.0, 8.100000001490116, 13.0 ], + "name": "Attachment", + "from": [ 14, 7, 3 ], + "to": [ 15.9, 10, 11 ], + "rotation": { "origin": [ 0, 10, 3 ], "axis": "x", "angle": 22.5 }, "faces": { - "up": { "texture": "#3", "uv": [ 1.0, 9.0, 15.0, 16.0 ], "rotation": 180 }, - "down": { "texture": "#3", "uv": [ 1.0, 9.0, 15.0, 16.0 ] } + "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 ] } } } ] diff --git a/src/main/resources/assets/create/models/block/harvester_blade.json b/src/main/resources/assets/create/models/block/harvester_blade.json new file mode 100644 index 000000000..a15ba52c4 --- /dev/null +++ b/src/main/resources/assets/create/models/block/harvester_blade.json @@ -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 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_drill.json b/src/main/resources/assets/create/models/block/mechanical_drill.json deleted file mode 100644 index 8dd92c9d6..000000000 --- a/src/main/resources/assets/create/models/block/mechanical_drill.json +++ /dev/null @@ -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 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester.json b/src/main/resources/assets/create/models/block/saw.json similarity index 100% rename from src/main/resources/assets/create/models/block/mechanical_harvester.json rename to src/main/resources/assets/create/models/block/saw.json diff --git a/src/main/resources/assets/create/models/block/saw_inactive.json b/src/main/resources/assets/create/models/block/saw_inactive.json new file mode 100644 index 000000000..ff935f448 --- /dev/null +++ b/src/main/resources/assets/create/models/block/saw_inactive.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/saw", + "textures": { + "stonecutter_saw": "create:block/static_saw", + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/drill.json b/src/main/resources/assets/create/models/item/drill.json index 98c0b42a5..c1bbf271b 100644 --- a/src/main/resources/assets/create/models/item/drill.json +++ b/src/main/resources/assets/create/models/item/drill.json @@ -1,10 +1,124 @@ { - "parent": "create:block/drill_fixated", - "display": { - "fixed": { - "rotation": [ 0, 180, 0 ], - "translation": [ 0, 0, -3], - "scale":[ 0.5, 0.5, 0.5 ] + "__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" + }, + "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 ] } + } } - } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/harvester.json b/src/main/resources/assets/create/models/item/harvester.json index b5b75ca92..970dc1d27 100644 --- a/src/main/resources/assets/create/models/item/harvester.json +++ b/src/main/resources/assets/create/models/item/harvester.json @@ -1,10 +1,161 @@ { - "parent": "create:block/harvester", - "display": { - "fixed": { - "rotation": [ 0, 180, 0 ], - "translation": [ 0, 0, -3], - "scale":[ 0.5, 0.5, 0.5 ] + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", + "parent": "create:block/block", + "textures": { + "harvester": "create:block/harvester", + "anvil": "minecraft:block/anvil", + "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 ] } + } } - } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/mechanical_drill.json b/src/main/resources/assets/create/models/item/mechanical_drill.json deleted file mode 100644 index 9c673f645..000000000 --- a/src/main/resources/assets/create/models/item/mechanical_drill.json +++ /dev/null @@ -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 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_casing_short.png b/src/main/resources/assets/create/textures/block/andesite_casing_short.png index f7fa139002dc9c6f69972020a19a8d57df9c481e..f692c279609937046006bdae348c39702f09023d 100644 GIT binary patch delta 488 zcmVc_ip2lH zo`k>Q&(VX-@RSCR9zI6hjg@7I5Zm^qGs<9kH}8!kXqukP5UU#`ag2BG&wn>aKfl2! zONH22*RO|26Mql4QS!b#c#eyUkC1ao#u|%d)lIRDwzVj(>pnug+~wr*7%3r|-|Ozc zdaKiR-5JZuNgfbt!#X#m4^gow@N;p6Z>7brawWm_ryr}msMogV@EJB$Cub*KkEfV@ zfBR1!xCbx9M45nksEhh8uL|*inzyEfK!VHyJ6-sA~7CidwQ9N$S2#W$UQi` zFYAa#@D7v>L~GEYR1HH6aLsEF;odb6q@n!0yf-O@ldkp3B52T7QzY0oB(Vv`9>LmEyi{ zeA2ZhmDG~lQi-l_uD%A8A1(qR?{E-LY_A#5t8$b_qL0^C1vj@pF diff --git a/src/main/resources/assets/create/textures/block/harvester.png b/src/main/resources/assets/create/textures/block/harvester.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb98005a8fe439cfc550c7fda07128c8607d7cf GIT binary patch literal 495 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0fb3JK~y+TjZ(X+ z!axw61O=Nwn$(uIsqB=XUD8|VUszdN+1UF7f(q&v2$C{Iu(Z@hLj(z=5iIuR40ppu zlgm9YnfKYr>}o;?QZX8hIPiMC*xzoq8XFbJ2|UjejYfm*!C*i^5YXjvAsJgPm!(8Z zAe(L5rX)#dKA+R$@u0-EHRI?YVMK8!eybALP@3)gjXUlqOI@AK(6 zsS53On|IRfc8d!Gz`RBlcCjWX^_okQ@9Zo`r&ZUkT6a2H}nnc2a}fFLJc1zkH;fSf#S(z0-M(BwZQ1- z^ErQ5pU5AQ+;F{KC&zL4RN44`zsdLg>W8EPL?8kFYRoYl4w)e%0_c9fvu5u@qYiml zk6s<4?shv7h9N~!ByP7GYxw*9o;B*B(Tu#TM{g}nQ))JwbiH0tSkV88Yn@JqM=}h9 l13=k*%NS0Djpe3kN4JGxGCa{t`ce&tQ-+067K>wdF>bAjCvt_RsQ&uz{e zEq-5Xwet_JUOngL?Mde+C>WXte3&PG#3wjp0@!{`#zuzvL oGO5RKnRK#B%Z9HHSFMuY`ugSMc@i;~fzD#^boFyt=akR{0369&ng9R* literal 0 HcmV?d00001