From ee7546871919ad7900d8befcd4c9824522a5c2a9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 19 Oct 2019 23:42:44 +0200 Subject: [PATCH] Saw it - Added the Mechanical Saw - Bunch of fixes for mechanical blocks --- .../java/com/simibubi/create/AllBlocks.java | 2 + .../java/com/simibubi/create/AllItems.java | 2 + .../com/simibubi/create/AllTileEntities.java | 4 + .../foundation/utility/VoxelShaper.java | 22 ++-- .../foundation/utility/VoxelShapers.java | 10 ++ .../base/DirectionalAxisKineticBlock.java | 96 +++++++++++++++++ .../contraptions/receivers/DrillBlock.java | 19 +--- .../receivers/HarvesterBlock.java | 20 +--- .../contraptions/receivers/SawBlock.java | 90 ++++++++++++++++ .../contraptions/receivers/SawTileEntity.java | 22 ++++ .../receivers/SawTileEntityRenderer.java | 24 +++++ .../constructs/MechanicalPistonBlock.java | 83 +-------------- .../MechanicalPistonTileEntity.java | 4 + .../constructs/TranslationConstruct.java | 3 + .../logistics/item/CardboardBoxItem.java | 5 + .../assets/create/blockstates/saw.json | 33 ++++++ .../resources/assets/create/lang/en_us.json | 3 + .../assets/create/models/block/drill.json | 15 +-- .../assets/create/models/block/saw.json | 13 +-- .../create/models/block/saw_horizontal.json | 98 ++++++++++++++++++ .../models/block/saw_horizontal_inactive.json | 6 ++ .../create/models/block/saw_inactive.json | 2 +- .../create/models/item/crushed_gold.json | 6 ++ .../create/models/item/crushed_iron.json | 6 ++ .../assets/create/models/item/drill.json | 15 +-- .../assets/create/models/item/saw.json | 3 + .../textures/block/mechanical_saw_top.png | Bin 557 -> 547 bytes .../textures/block/noisy_iron_block.png | Bin 0 -> 631 bytes .../create/textures/item/crushed_iron.png | Bin 409 -> 410 bytes .../create/recipes/crushing/gold_ore.json | 8 +- .../create/recipes/crushing/iron_ore.json | 8 +- .../create/recipes/smelting/crushed_gold.json | 15 +++ .../create/recipes/smelting/crushed_iron.json | 15 +++ .../recipes/splashing/crushed_gold.json | 22 ++++ .../recipes/splashing/crushed_iron.json | 22 ++++ 35 files changed, 545 insertions(+), 151 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/utility/VoxelShapers.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/base/DirectionalAxisKineticBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/SawBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntityRenderer.java create mode 100644 src/main/resources/assets/create/blockstates/saw.json create mode 100644 src/main/resources/assets/create/models/block/saw_horizontal.json create mode 100644 src/main/resources/assets/create/models/block/saw_horizontal_inactive.json create mode 100644 src/main/resources/assets/create/models/item/crushed_gold.json create mode 100644 src/main/resources/assets/create/models/item/crushed_iron.json create mode 100644 src/main/resources/assets/create/models/item/saw.json create mode 100644 src/main/resources/assets/create/textures/block/noisy_iron_block.png create mode 100644 src/main/resources/data/create/recipes/smelting/crushed_gold.json create mode 100644 src/main/resources/data/create/recipes/smelting/crushed_iron.json create mode 100644 src/main/resources/data/create/recipes/splashing/crushed_gold.json create mode 100644 src/main/resources/data/create/recipes/splashing/crushed_iron.json diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 89dd33218..03d479a7e 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -16,6 +16,7 @@ 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.SawBlock; import com.simibubi.create.modules.contraptions.receivers.TurntableBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock; @@ -121,6 +122,7 @@ public enum AllBlocks { ROTATION_CHASSIS(new RotationChassisBlock()), DRILL(new DrillBlock()), DRILL_HEAD(new DrillHeadBlock()), + SAW(new SawBlock()), HARVESTER(new HarvesterBlock()), HARVESTER_BLADE(new HarvesterBladeBlock()), diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 3f886bdb6..2e50fd542 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -79,6 +79,8 @@ public enum AllItems { FLOUR(ingredient()), DOUGH(ingredient()), PROPELLER(ingredient()), + CRUSHED_IRON(ingredient()), + CRUSHED_GOLD(ingredient()), __LOGISTICS__(), CARDBOARD_BOX_1616(new CardboardBoxItem(standardItemProperties())), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index c6d6abc4d..68b77d198 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -16,6 +16,8 @@ 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.SawTileEntity; +import com.simibubi.create.modules.contraptions.receivers.SawTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity; import com.simibubi.create.modules.contraptions.receivers.constructs.ChassisTileEntity; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingTileEntity; @@ -97,6 +99,7 @@ public enum AllTileEntities { CHASSIS(ChassisTileEntity::new, AllBlocks.ROTATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS, AllBlocks.TRANSLATION_CHASSIS_SECONDARY), DRILL(DrillTileEntity::new, AllBlocks.DRILL), + SAW(SawTileEntity::new, AllBlocks.SAW), HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER), CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL), CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER), @@ -163,6 +166,7 @@ public enum AllTileEntities { bind(MotorTileEntity.class, new MotorTileEntityRenderer()); bind(EncasedShaftTileEntity.class, new EncasedShaftTileEntityRenderer()); bind(DrillTileEntity.class, new DrillTileEntityRenderer()); + bind(SawTileEntity.class, new SawTileEntityRenderer()); bind(EncasedFanTileEntity.class, new EncasedFanTileEntityRenderer()); bind(GearboxTileEntity.class, new GearboxTileEntityRenderer()); bind(GearshiftTileEntity.class, new SplitShaftTileEntityRenderer()); diff --git a/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java b/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java index 5493a35dd..9df7baa4a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.utility; +import java.util.HashMap; import java.util.Map; import net.minecraft.block.Block; @@ -10,7 +11,7 @@ import net.minecraft.util.math.shapes.VoxelShape; public class VoxelShaper { - private Map shapes; + private Map shapes = new HashMap<>(); public VoxelShape get(Direction direction) { return shapes.get(direction); @@ -21,7 +22,7 @@ public class VoxelShaper { for (Direction facing : Direction.values()) { if (facing.getAxis().isVertical()) continue; - voxelShaper.shapes.put(facing, rotatedCopy(southShape, (int) facing.getHorizontalAngle(), 0)); + voxelShaper.shapes.put(facing, rotatedCopy(southShape, 0, (int) -facing.getHorizontalAngle())); } return voxelShaper; } @@ -29,13 +30,13 @@ public class VoxelShaper { public static VoxelShaper forDirectionalBlock(VoxelShape southShape) { VoxelShaper voxelShaper = new VoxelShaper(); for (Direction facing : Direction.values()) { - int rotX = facing.getAxis().isVertical() ? 0 : (int) facing.getHorizontalAngle(); - int rotY = facing.getAxis().isVertical() ? (facing == Direction.UP ? 90 : 270) : 0; + int rotX = facing.getAxis().isVertical() ? (facing == Direction.UP ? 270 : 90) : 0; + int rotY = facing.getAxis().isVertical() ? 0 : (int) -facing.getHorizontalAngle(); voxelShaper.shapes.put(facing, rotatedCopy(southShape, rotX, rotY)); } return voxelShaper; } - + public VoxelShaper withVerticalShapes(VoxelShape upShape) { shapes.put(Direction.UP, upShape); shapes.put(Direction.DOWN, rotatedCopy(upShape, 180, 0)); @@ -43,13 +44,16 @@ public class VoxelShaper { } public static VoxelShape rotatedCopy(VoxelShape shape, int rotX, int rotY) { - Vec3d v1 = new Vec3d(shape.getStart(Axis.X), shape.getStart(Axis.Y), shape.getStart(Axis.Z)).scale(16); - Vec3d v2 = new Vec3d(shape.getEnd(Axis.X), shape.getEnd(Axis.Y), shape.getEnd(Axis.Z)).scale(16); + Vec3d center = new Vec3d(8, 8, 8); + Vec3d v1 = new Vec3d(shape.getStart(Axis.X), shape.getStart(Axis.Y), shape.getStart(Axis.Z)).scale(16) + .subtract(center); + Vec3d v2 = new Vec3d(shape.getEnd(Axis.X), shape.getEnd(Axis.Y), shape.getEnd(Axis.Z)).scale(16) + .subtract(center); v1 = VecHelper.rotate(v1, rotX, Axis.X); - v1 = VecHelper.rotate(v1, rotY, Axis.Y); + v1 = VecHelper.rotate(v1, rotY, Axis.Y).add(center); v2 = VecHelper.rotate(v2, rotX, Axis.X); - v2 = VecHelper.rotate(v2, rotY, Axis.Y); + v2 = VecHelper.rotate(v2, rotY, Axis.Y).add(center); return Block.makeCuboidShape(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VoxelShapers.java b/src/main/java/com/simibubi/create/foundation/utility/VoxelShapers.java new file mode 100644 index 000000000..aeac7583e --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/VoxelShapers.java @@ -0,0 +1,10 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.block.Block; + +public class VoxelShapers { + + public static final VoxelShaper SHORT_CASING = VoxelShaper + .forDirectionalBlock(Block.makeCuboidShape(0, 0, 0, 16, 16, 12)); + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/DirectionalAxisKineticBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/base/DirectionalAxisKineticBlock.java new file mode 100644 index 000000000..5c303dada --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/DirectionalAxisKineticBlock.java @@ -0,0 +1,96 @@ +package com.simibubi.create.modules.contraptions.base; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock { + + public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first"); + + public DirectionalAxisKineticBlock(Properties properties) { + super(properties); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(AXIS_ALONG_FIRST_COORDINATE); + super.fillStateContainer(builder); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + Direction facing = context.getNearestLookingDirection().getOpposite(); + BlockPos pos = context.getPos(); + World world = context.getWorld(); + boolean alongFirst = false; + if (context.isPlacerSneaking()) + facing = facing.getOpposite(); + + if (facing.getAxis().isHorizontal()) { + alongFirst = facing.getAxis() == Axis.Z; + + Block blockAbove = world.getBlockState(pos.offset(Direction.UP)).getBlock(); + boolean shaftAbove = blockAbove instanceof IRotate && ((IRotate) blockAbove).hasShaftTowards(world, + pos.up(), world.getBlockState(pos.up()), Direction.DOWN); + Block blockBelow = world.getBlockState(pos.offset(Direction.DOWN)).getBlock(); + boolean shaftBelow = blockBelow instanceof IRotate && ((IRotate) blockBelow).hasShaftTowards(world, + pos.down(), world.getBlockState(pos.down()), Direction.UP); + + if (shaftAbove || shaftBelow) + alongFirst = facing.getAxis() == Axis.X; + } + + if (facing.getAxis().isVertical()) { + alongFirst = context.getPlacementHorizontalFacing().getAxis() == Axis.X; + Direction prefferedSide = null; + for (Direction side : Direction.values()) { + if (side.getAxis().isVertical()) + continue; + BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(side)); + if (blockState.getBlock() instanceof IRotate) { + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), + context.getPos().offset(side), blockState, side.getOpposite())) + if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { + prefferedSide = null; + break; + } else { + prefferedSide = side; + } + } + } + if (prefferedSide != null) { + alongFirst = prefferedSide.getAxis() == Axis.X; + } + } + + return this.getDefaultState().with(FACING, facing).with(AXIS_ALONG_FIRST_COORDINATE, alongFirst); + } + + @Override + public Axis getRotationAxis(BlockState state) { + Axis pistonAxis = state.get(FACING).getAxis(); + boolean alongFirst = state.get(AXIS_ALONG_FIRST_COORDINATE); + + if (pistonAxis == Axis.X) + return alongFirst ? Axis.Y : Axis.Z; + if (pistonAxis == Axis.Y) + return alongFirst ? Axis.X : Axis.Z; + if (pistonAxis == Axis.Z) + return alongFirst ? Axis.X : Axis.Y; + + return super.getRotationAxis(state); + } + + @Override + public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) { + return face.getAxis() == getRotationAxis(state); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillBlock.java index 5f918c158..ba22574aa 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/DrillBlock.java @@ -4,9 +4,9 @@ import java.util.List; import com.simibubi.create.foundation.block.IRenderUtilityBlock; import com.simibubi.create.foundation.block.IWithTileEntity; +import com.simibubi.create.foundation.utility.VoxelShapers; import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior; -import com.simibubi.create.modules.contraptions.relays.ShaftBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -24,7 +24,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; @@ -34,11 +33,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class DrillBlock extends DirectionalKineticBlock implements IHaveMovementBehavior, IWithTileEntity { - 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 DrillBlock() { super(Properties.from(Blocks.IRON_BLOCK)); } @@ -55,16 +49,7 @@ public class DrillBlock extends DirectionalKineticBlock @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - Axis axis = state.get(FACING).getAxis(); - - if (axis == Axis.X) - return DRILL_SHAPE_X; - if (axis == Axis.Y) - return DRILL_SHAPE_Y; - if (axis == Axis.Z) - return DRILL_SHAPE_Z; - - return CORE_SHAPE; + return VoxelShapers.SHORT_CASING.get(state.get(FACING)); } @Override 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 d031720f9..81b5f58c8 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 @@ -4,6 +4,7 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.block.IRenderUtilityBlock; +import com.simibubi.create.foundation.utility.VoxelShaper; import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior; import net.minecraft.block.Block; @@ -28,7 +29,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; @@ -39,9 +39,7 @@ import net.minecraftforge.common.IPlantable; public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior { - public static final VoxelShape SHAPE_SOUTH = makeCuboidShape(0, 4, 0, 16, 12, 6), - SHAPE_NORTH = makeCuboidShape(0, 4, 10, 16, 12, 16), SHAPE_WEST = makeCuboidShape(10, 4, 0, 16, 12, 16), - SHAPE_EAST = makeCuboidShape(0, 4, 0, 6, 12, 16); + private static VoxelShaper SHAPER = VoxelShaper.forHorizontalBlock(Block.makeCuboidShape(0, 2, 0, 16, 14, 3)); public HarvesterBlock() { super(Properties.from(Blocks.IRON_BLOCK)); @@ -65,17 +63,7 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { Direction direction = state.get(HORIZONTAL_FACING); - - if (direction == Direction.NORTH) - return SHAPE_NORTH; - if (direction == Direction.SOUTH) - return SHAPE_SOUTH; - if (direction == Direction.EAST) - return SHAPE_EAST; - if (direction == Direction.WEST) - return SHAPE_WEST; - - return VoxelShapes.empty(); + return SHAPER.get(direction); } @Override @@ -83,7 +71,7 @@ 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) { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawBlock.java new file mode 100644 index 000000000..d2301ba22 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawBlock.java @@ -0,0 +1,90 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import com.simibubi.create.foundation.block.IWithTileEntity; +import com.simibubi.create.foundation.utility.VoxelShapers; +import com.simibubi.create.modules.contraptions.base.DirectionalAxisKineticBlock; +import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.material.PushReaction; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +public class SawBlock extends DirectionalAxisKineticBlock + implements IWithTileEntity, IHaveMovementBehavior { + + public static final BooleanProperty RUNNING = BooleanProperty.create("running"); + + public SawBlock() { + super(Properties.from(Blocks.ANDESITE)); + setDefaultState(getDefaultState().with(RUNNING, false)); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockState stateForPlacement = super.getStateForPlacement(context); + Direction facing = stateForPlacement.get(FACING); + if (facing.getAxis().isVertical()) + return stateForPlacement; + return stateForPlacement.with(AXIS_ALONG_FIRST_COORDINATE, facing.getAxis() == Axis.X); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(RUNNING); + super.fillStateContainer(builder); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new SawTileEntity(); + } + + @Override + protected boolean hasStaticPart() { + return true; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return VoxelShapers.SHORT_CASING.get(state.get(FACING)); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.PUSH_ONLY; + } + + public boolean isHorizontal(BlockState state) { + return state.get(FACING).getAxis().isHorizontal(); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return isHorizontal(state) ? state.get(FACING).getAxis() : super.getRotationAxis(state); + } + + @Override + public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) { + return isHorizontal(state) ? face == state.get(FACING).getOpposite() + : super.hasShaftTowards(world, pos, state, face); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntity.java new file mode 100644 index 000000000..88be6d034 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntity.java @@ -0,0 +1,22 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import static com.simibubi.create.modules.contraptions.receivers.SawBlock.RUNNING; + +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; + +public class SawTileEntity extends KineticTileEntity { + + public SawTileEntity() { + super(AllTileEntities.SAW.type); + } + + @Override + public void onSpeedChanged() { + boolean shouldRun = Math.abs(speed) > 1 / 64f; + boolean running = getBlockState().get(RUNNING); + if (shouldRun != running) + world.setBlockState(pos, getBlockState().with(RUNNING, shouldRun)); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntityRenderer.java new file mode 100644 index 000000000..83b67b487 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/SawTileEntityRenderer.java @@ -0,0 +1,24 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import static net.minecraft.state.properties.BlockStateProperties.AXIS; +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 net.minecraft.block.BlockState; + +public class SawTileEntityRenderer extends KineticTileEntityRenderer { + + @Override + protected BlockState getRenderedBlockState(KineticTileEntity te) { + BlockState state = te.getBlockState(); + if (state.get(FACING).getAxis().isHorizontal()) { + return AllBlocks.SHAFT_HALF.block.getDefaultState().with(FACING, state.get(FACING).getOpposite()); + } + return AllBlocks.SHAFT.block.getDefaultState().with(AXIS, ((IRotate) state.getBlock()).getRotationAxis(state)); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java index 0dd807fc2..4b9b2ae7c 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java @@ -2,23 +2,18 @@ package com.simibubi.create.modules.contraptions.receivers.constructs; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateConfig; -import com.simibubi.create.modules.contraptions.base.IRotate; -import com.simibubi.create.modules.contraptions.base.KineticBlock; +import com.simibubi.create.modules.contraptions.base.DirectionalAxisKineticBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItemUseContext; import net.minecraft.particles.ParticleTypes; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.DirectionProperty; import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; import net.minecraft.util.Hand; import net.minecraft.util.IStringSerializable; import net.minecraft.util.SoundCategory; @@ -33,11 +28,9 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.common.Tags; -public class MechanicalPistonBlock extends KineticBlock { +public class MechanicalPistonBlock extends DirectionalAxisKineticBlock { public static final EnumProperty STATE = EnumProperty.create("state", PistonState.class); - public static final DirectionProperty FACING = BlockStateProperties.FACING; - public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first"); protected static final VoxelShape BASE_SHAPE_UP = makeCuboidShape(0, 0, 0, 16, 12, 16), BASE_SHAPE_DOWN = makeCuboidShape(0, 4, 0, 16, 16, 16), @@ -63,60 +56,10 @@ public class MechanicalPistonBlock extends KineticBlock { @Override protected void fillStateContainer(Builder builder) { - builder.add(STATE, FACING, AXIS_ALONG_FIRST_COORDINATE); + builder.add(STATE); super.fillStateContainer(builder); } - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - Direction facing = context.getNearestLookingDirection().getOpposite(); - BlockPos pos = context.getPos(); - World world = context.getWorld(); - boolean alongFirst = false; - if (context.isPlacerSneaking()) - facing = facing.getOpposite(); - - if (facing.getAxis().isHorizontal()) { - alongFirst = facing.getAxis() == Axis.Z; - - Block blockAbove = world.getBlockState(pos.offset(Direction.UP)).getBlock(); - boolean shaftAbove = blockAbove instanceof IRotate && ((IRotate) blockAbove).hasShaftTowards(world, - pos.up(), world.getBlockState(pos.up()), Direction.DOWN); - Block blockBelow = world.getBlockState(pos.offset(Direction.DOWN)).getBlock(); - boolean shaftBelow = blockBelow instanceof IRotate && ((IRotate) blockBelow).hasShaftTowards(world, - pos.down(), world.getBlockState(pos.down()), Direction.UP); - - if (shaftAbove || shaftBelow) - alongFirst = facing.getAxis() == Axis.X; - } - - if (facing.getAxis().isVertical()) { - alongFirst = context.getPlacementHorizontalFacing().getAxis() == Axis.X; - Direction prefferedSide = null; - for (Direction side : Direction.values()) { - if (side.getAxis().isVertical()) - continue; - BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(side)); - if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), - context.getPos().offset(side), blockState, side.getOpposite())) - if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { - prefferedSide = null; - break; - } else { - prefferedSide = side; - } - } - } - if (prefferedSide != null) { - alongFirst = prefferedSide.getAxis() == Axis.X; - } - } - - return this.getDefaultState().with(FACING, facing).with(STATE, PistonState.RETRACTED) - .with(AXIS_ALONG_FIRST_COORDINATE, alongFirst); - } - @Override public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { @@ -154,26 +97,6 @@ public class MechanicalPistonBlock extends KineticBlock { return true; } - @Override - public Axis getRotationAxis(BlockState state) { - Axis pistonAxis = state.get(FACING).getAxis(); - boolean alongFirst = state.get(AXIS_ALONG_FIRST_COORDINATE); - - if (pistonAxis == Axis.X) - return alongFirst ? Axis.Y : Axis.Z; - if (pistonAxis == Axis.Y) - return alongFirst ? Axis.X : Axis.Z; - if (pistonAxis == Axis.Z) - return alongFirst ? Axis.X : Axis.Y; - - return super.getRotationAxis(state); - } - - @Override - public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == getRotationAxis(state); - } - public enum PistonState implements IStringSerializable { RETRACTED, MOVING, EXTENDED; 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 92250cd48..cdc2d6721 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 @@ -11,6 +11,7 @@ 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.SawBlock; 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; @@ -180,6 +181,9 @@ public class MechanicalPistonTileEntity extends KineticTileEntity implements ITi state = state.updatePostPlacement(face, world.getBlockState(targetPos.offset(face)), world, targetPos, targetPos.offset(face)); + if (AllBlocks.SAW.typeOf(state)) + state = state.with(SawBlock.RUNNING, false); + world.destroyBlock(targetPos, world.getBlockState(targetPos).getCollisionShape(world, targetPos).isEmpty()); getWorld().setBlockState(targetPos, state, 3); TileEntity tileEntity = world.getTileEntity(targetPos); 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 a4ae58e18..391a026e9 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 @@ -20,6 +20,7 @@ import org.apache.commons.lang3.tuple.MutablePair; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateConfig; +import com.simibubi.create.modules.contraptions.receivers.SawBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior.MovementContext; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState; @@ -419,6 +420,8 @@ public class TranslationConstruct { private static BlockInfo capture(World world, BlockPos pos) { BlockState blockstate = world.getBlockState(pos); + if (AllBlocks.SAW.typeOf(blockstate)) + blockstate = blockstate.with(SawBlock.RUNNING, true); TileEntity tileentity = world.getTileEntity(pos); CompoundNBT compoundnbt = null; if (tileentity != null) { diff --git a/src/main/java/com/simibubi/create/modules/logistics/item/CardboardBoxItem.java b/src/main/java/com/simibubi/create/modules/logistics/item/CardboardBoxItem.java index 4f0c78616..7c1c18737 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/item/CardboardBoxItem.java +++ b/src/main/java/com/simibubi/create/modules/logistics/item/CardboardBoxItem.java @@ -8,6 +8,7 @@ import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResult; @@ -60,6 +61,10 @@ public class CardboardBoxItem extends Item { return box; } + @Override + public void fillItemGroup(ItemGroup group, NonNullList items) { + } + public static void addAddress(ItemStack box, String address) { box.getOrCreateTag().putString("Address", address); } diff --git a/src/main/resources/assets/create/blockstates/saw.json b/src/main/resources/assets/create/blockstates/saw.json new file mode 100644 index 000000000..253d2bdeb --- /dev/null +++ b/src/main/resources/assets/create/blockstates/saw.json @@ -0,0 +1,33 @@ +{ + "forge_marker": 1, + "variants": { + + "axis_along_first=true,running=true,facing=up": { "model": "create:block/saw", "y": 90 }, + "axis_along_first=false,running=true,facing=up": { "model": "create:block/saw" }, + "axis_along_first=true,running=true,facing=down": { "model": "create:block/saw", "x": 180, "y": 90 }, + "axis_along_first=false,running=true,facing=down": { "model": "create:block/saw", "x": 180 }, + "axis_along_first=true,running=false,facing=up": { "model": "create:block/saw_inactive", "y": 90 }, + "axis_along_first=false,running=false,facing=up": { "model": "create:block/saw_inactive" }, + "axis_along_first=true,running=false,facing=down": { "model": "create:block/saw_inactive", "x": 180, "y": 90 }, + "axis_along_first=false,running=false,facing=down": { "model": "create:block/saw_inactive", "x": 180 }, + + "axis_along_first=false,running=true,facing=south": { "model": "create:block/saw_horizontal", "y": 0 }, + "axis_along_first=false,running=true,facing=north": { "model": "create:block/saw_horizontal", "y": 180 }, + "axis_along_first=false,running=true,facing=west": { "model": "create:block/saw_horizontal", "y": 90 }, + "axis_along_first=false,running=true,facing=east": { "model": "create:block/saw_horizontal", "y": 270 }, + "axis_along_first=true,running=true,facing=south": { "model": "create:block/saw_horizontal", "y": 0 }, + "axis_along_first=true,running=true,facing=north": { "model": "create:block/saw_horizontal", "y": 180 }, + "axis_along_first=true,running=true,facing=west": { "model": "create:block/saw_horizontal", "y": 90 }, + "axis_along_first=true,running=true,facing=east": { "model": "create:block/saw_horizontal", "y": 270 }, + + "axis_along_first=false,running=false,facing=south": { "model": "create:block/saw_horizontal_inactive", "y": 0 }, + "axis_along_first=false,running=false,facing=north": { "model": "create:block/saw_horizontal_inactive", "y": 180 }, + "axis_along_first=false,running=false,facing=west": { "model": "create:block/saw_horizontal_inactive", "y": 90 }, + "axis_along_first=false,running=false,facing=east": { "model": "create:block/saw_horizontal_inactive", "y": 270 }, + "axis_along_first=true,running=false,facing=south": { "model": "create:block/saw_horizontal_inactive", "y": 0 }, + "axis_along_first=true,running=false,facing=north": { "model": "create:block/saw_horizontal_inactive", "y": 180 }, + "axis_along_first=true,running=false,facing=west": { "model": "create:block/saw_horizontal_inactive", "y": 90 }, + "axis_along_first=true,running=false,facing=east": { "model": "create:block/saw_horizontal_inactive", "y": 270 } + + } +} diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index a35709602..3fc28dde2 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -23,6 +23,8 @@ "item.create.propeller": "Propeller", "item.create.flour": "Wheat Flour", "item.create.dough": "Dough", + "item.create.crushed_iron": "Crushed Iron Ore", + "item.create.crushed_gold": "Crushed Gold Ore", "item.create.logistical_controller_supply": "Item Supply", "item.create.logistical_controller_request": "Item Request", @@ -60,6 +62,7 @@ "block.create.crushing_wheel": "Crushing Wheel", "block.create.drill": "Mechanical Drill", "block.create.harvester": "Mechanical Harvester", + "block.create.saw": "Mechanical Saw", "block.create.water_wheel": "Water Wheel", "block.create.belt_support": "Belt Support", "block.create.mechanical_press": "Mechanical Press", diff --git a/src/main/resources/assets/create/models/block/drill.json b/src/main/resources/assets/create/models/block/drill.json index 50afdd458..b68f2ef3e 100644 --- a/src/main/resources/assets/create/models/block/drill.json +++ b/src/main/resources/assets/create/models/block/drill.json @@ -2,7 +2,8 @@ "__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", + "anvil": "create:block/noisy_iron_block", + "anvil2": "minecraft:block/anvil", "gearbox": "create:block/gearbox", "axis_top": "create:block/axis_top", "axis": "create:block/axis", @@ -14,12 +15,12 @@ "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 ] } + "north": { "texture": "#anvil2", "uv": [ 3, 3, 11, 11 ] }, + "east": { "texture": "#anvil2", "uv": [ 10, 5, 12, 13 ] }, + "south": { "texture": "#anvil2", "uv": [ 3, 3, 11, 11 ] }, + "west": { "texture": "#anvil2", "uv": [ 8, 4, 10, 12 ] }, + "up": { "texture": "#anvil2", "uv": [ 5, 5, 13, 7 ] }, + "down": { "texture": "#anvil2", "uv": [ 4, 3, 12, 5 ] } } }, { diff --git a/src/main/resources/assets/create/models/block/saw.json b/src/main/resources/assets/create/models/block/saw.json index 82d9a4215..931155c43 100644 --- a/src/main/resources/assets/create/models/block/saw.json +++ b/src/main/resources/assets/create/models/block/saw.json @@ -5,7 +5,8 @@ "gearbox": "create:block/gearbox", "stonecutter_saw": "minecraft:block/stonecutter_saw", "andesite_casing_short": "create:block/andesite_casing_short", - "mechanical_saw_top": "create:block/mechanical_saw_top" + "mechanical_saw_top": "create:block/mechanical_saw_top", + "particle": "create:block/mechanical_saw_top" }, "elements": [ { @@ -67,14 +68,14 @@ }, { "name": "Top", - "from": [ 0, 12, 3 ], - "to": [ 16, 13, 13 ], + "from": [ 0, 12, 2 ], + "to": [ 16, 13, 14 ], "faces": { - "north": { "texture": "#mechanical_saw_top", "uv": [ 0, 12, 16, 13 ] }, + "north": { "texture": "#mechanical_saw_top", "uv": [ 0, 13, 16, 14 ] }, "east": { "texture": "#mechanical_saw_top", "uv": [ 0, 3, 1, 13 ], "rotation": 90 }, - "south": { "texture": "#mechanical_saw_top", "uv": [ 0, 3, 16, 4 ] }, + "south": { "texture": "#mechanical_saw_top", "uv": [ 0, 2, 16, 3 ] }, "west": { "texture": "#mechanical_saw_top", "uv": [ 15, 3, 16, 13 ], "rotation": 270 }, - "up": { "texture": "#mechanical_saw_top", "uv": [ 0, 3, 16, 13 ] } + "up": { "texture": "#mechanical_saw_top", "uv": [ 0, 2, 16, 14 ] } } } ] diff --git a/src/main/resources/assets/create/models/block/saw_horizontal.json b/src/main/resources/assets/create/models/block/saw_horizontal.json new file mode 100644 index 000000000..7750da4cb --- /dev/null +++ b/src/main/resources/assets/create/models/block/saw_horizontal.json @@ -0,0 +1,98 @@ +{ + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", + "textures": { + "particle": "create:block/gearbox_top", + "slit": "create:block/mechanical_saw_top", + "gearbox_top": "create:block/gearbox_top", + "encased_belt": "create:block/encased_belt", + "stonecutter_saw": "minecraft:block/stonecutter_saw", + "gearbox": "create:block/gearbox", + "andesite_casing_short": "create:block/andesite_casing_short" + }, + "parent": "create:block/block", + "elements": [ + { + "name": "Bottom", + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 12 ], + "faces": { + "north": { "texture": "#andesite_casing_short", "uv": [ 0, 14, 16, 16 ] }, + "east": { "texture": "#andesite_casing_short", "uv": [ 4, 14, 16, 16 ] }, + "south": { "texture": "#encased_belt", "uv": [ 0, 14, 16, 16 ] }, + "west": { "texture": "#andesite_casing_short", "uv": [ 0, 14, 12, 16 ] }, + "up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }, + "down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] } + } + }, + { + "name": "Top", + "from": [ 0, 14, 0 ], + "to": [ 16, 16, 12 ], + "faces": { + "north": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 6 ] }, + "east": { "texture": "#andesite_casing_short", "uv": [ 4, 4, 16, 6 ] }, + "south": { "texture": "#encased_belt", "uv": [ 0, 0, 16, 2 ] }, + "west": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 12, 6 ] }, + "up": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] }, + "down": { "texture": "#andesite_casing_short", "uv": [ 0, 4, 16, 16 ] } + } + }, + { + "name": "Back", + "from": [ 0, 2, 0 ], + "to": [ 2, 14, 2 ], + "faces": { + "north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] }, + "east": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] }, + "south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }, + "west": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] } + } + }, + { + "name": "Inner", + "from": [ 0, 2, 2 ], + "to": [ 16, 14, 11 ], + "faces": { + "east": { "texture": "#andesite_casing_short", "uv": [ 2, 6, 14, 15 ], "rotation": 90 }, + "south": { "texture": "#gearbox_top", "uv": [ 0, 2, 16, 14 ] }, + "west": { "texture": "#andesite_casing_short", "uv": [ 2, 6, 14, 15 ], "rotation": 270 } + } + }, + { + "name": "SawSlit", + "from": [ 1, 7, 11.062 ], + "to": [ 15, 9, 11.062 ], + "faces": { + "south": { "texture": "#slit", "uv": [ 1, 7, 15, 9 ] } + } + }, + { + "name": "Blade", + "from": [ 1, 8, 11 ], + "to": [ 15, 8.062, 18 ], + "faces": { + "up": { "texture": "#stonecutter_saw", "uv": [ 1, 9, 15, 16 ], "rotation": 180 }, + "down": { "texture": "#stonecutter_saw", "uv": [ 1, 9, 15, 16 ] } + } + }, + { + "name": "Back", + "from": [ 14, 2, 0 ], + "to": [ 16, 14, 2 ], + "faces": { + "north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }, + "east": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] }, + "south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }, + "west": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] } + } + }, + { + "name": "Back", + "from": [ 2, 2, 1 ], + "to": [ 14, 14, 2 ], + "faces": { + "north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 14 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/saw_horizontal_inactive.json b/src/main/resources/assets/create/models/block/saw_horizontal_inactive.json new file mode 100644 index 000000000..22466a8b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/saw_horizontal_inactive.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/saw_horizontal", + "textures": { + "stonecutter_saw": "create:block/static_saw" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/saw_inactive.json b/src/main/resources/assets/create/models/block/saw_inactive.json index ff935f448..6faac8d79 100644 --- a/src/main/resources/assets/create/models/block/saw_inactive.json +++ b/src/main/resources/assets/create/models/block/saw_inactive.json @@ -1,6 +1,6 @@ { "parent": "create:block/saw", "textures": { - "stonecutter_saw": "create:block/static_saw", + "stonecutter_saw": "create:block/static_saw" } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/crushed_gold.json b/src/main/resources/assets/create/models/item/crushed_gold.json new file mode 100644 index 000000000..d8b33543e --- /dev/null +++ b/src/main/resources/assets/create/models/item/crushed_gold.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/crushed_gold" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/crushed_iron.json b/src/main/resources/assets/create/models/item/crushed_iron.json new file mode 100644 index 000000000..80447ba62 --- /dev/null +++ b/src/main/resources/assets/create/models/item/crushed_iron.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/crushed_iron" + } +} \ 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 c1bbf271b..c5031bf2b 100644 --- a/src/main/resources/assets/create/models/item/drill.json +++ b/src/main/resources/assets/create/models/item/drill.json @@ -2,7 +2,8 @@ "__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", + "anvil": "create:block/noisy_iron_block", + "anvil2": "minecraft:block/anvil", "gearbox": "create:block/gearbox", "andesite_casing_short": "create:block/andesite_casing_short" }, @@ -70,12 +71,12 @@ "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 ] } + "north": { "texture": "#anvil2", "uv": [ 3, 3, 11, 11 ] }, + "east": { "texture": "#anvil2", "uv": [ 10, 5, 12, 13 ] }, + "south": { "texture": "#anvil2", "uv": [ 3, 3, 11, 11 ] }, + "west": { "texture": "#anvil2", "uv": [ 8, 4, 10, 12 ] }, + "up": { "texture": "#anvil2", "uv": [ 5, 5, 13, 7 ] }, + "down": { "texture": "#anvil2", "uv": [ 4, 3, 12, 5 ] } } }, { diff --git a/src/main/resources/assets/create/models/item/saw.json b/src/main/resources/assets/create/models/item/saw.json new file mode 100644 index 000000000..ae9a74ff3 --- /dev/null +++ b/src/main/resources/assets/create/models/item/saw.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/saw_horizontal" +} diff --git a/src/main/resources/assets/create/textures/block/mechanical_saw_top.png b/src/main/resources/assets/create/textures/block/mechanical_saw_top.png index 805abf3660e5f2ef50814a9414a14d162c6d04eb..393d11f2c5f8cd848ba2d66eda1282aadacaa583 100644 GIT binary patch delta 484 zcmV1WjyR5D2#c(VfIT@WK7wDN?=-g_a zLLVr}GA;P==5<1egYx`<48oEm#pR!%!@vidr$~-bz;uQqSIA`ITVEp*V(h7n1j>vK z0Dj0I&M=7lDSrcZo&m%!p}unx@I>a==qC<`Gx5 zjeM4P>Ra3jZ0Re>gfjMgEiF1;D1$=ubx{u(88ia3qG6NJ6_fx(2W(Gz`5g4^0VWDT z7&aJ4qcen!1OVfU1_y^;#H275ninu1LJt^Rv>G(_*EO82d6RKy?xV?L5+s_i5vaZ%^hGi-ljT)_1l==tgbrCw2z@A>fMr!!TN5gH{a8H9=;$kI4{VTh;AJ&;S3 z@OohsbIJ3>?|(-m6bU9a2*fN707=Fmy)Z5ONd)fi2*3}ZJ`CX_7(igO-v(2`+$aSN zCZ@#4iWWB;)jxXxcn=xxVLa*krw0_;b$s-Ix?xP^xf@UqG`ivdo`%*`Wm+_B5@Uux zNCcob5R3#=OtnIghD~kUy@aqq0CZh176*r3#HO$o+GiK=JB8U`acuu!-&(fvhYQ?c zs{E<{P}|xm7KbaL@%f-{9sMydT(RlNtG=@K&Q@>>r9k6jMOjfiy6$-RnE2s_*vpc9 k=ybp!+Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T?7o^$R`RIOG^ zrIN?v>G%7AKp+~84u``~DCBm#ACJf1-yg+Vt>*Q5E0xM}xfIpw^>8@cYPE8?oZs)C z&1MdVgUa*yluD&cE*1;WKA-P+JZdx=(RRDt?RGYs&2G1EHXF0qO#61bsZ=UJ4d;wFa(3a$z;MjAkZjuxm<_C0Xm@~W-p~qr(>~Lkc5FqBtma6 z81NS-r_)KN(=o8$@2QKE$>e&y&StZe8jS`rn8zGF1YECIl(2R>oiYZ6L@t-d<8d_L zyId|qi4$f3-S2m$Qb|fAL7hjp+x>0814{~pg4Jrpu3oRF4dwUyWlY${W+cU8F)<(r z1efpk8%mT2;S`HS>~bQw=kqy|ekmad0f>WJp-}J`jYj+eLXuD+H+Hh^^?Hd-CKIn- zuZKDI!UU8D!K>A3_FOI(0Zohjzr&GWCX*p09t01Xk3uGs0s8;I0AsLA_*&BGH0N8b zR&e74-7o<1NycBAuaMqLqYgSTHVh9ThLooy;8bO)_ zxVacUeEr4%)4bs1Q<1P649LUH$*|}C4~ADy9+B4~7p=MSj^WGOhj3eEWMsgG+`E37 zA|zKoQ3s2G)W3TB z9&7+S5M5kcz>H6yJ~5aZsK9LiDP-XmWcc&-J%gCAAY9{t<7dHvIOH=E0|Nk&+NT{O SLt=*j0000 delta 267 zcmV+m0rdWw1DOMmNoT_V01m?e$8V@)0003lNkleV3K77ak)4Y7sA(5~f3@9ih#BlxbXNKpGACcE07wtH5h2hKFhj3eEWMsgG+`E37 zAv-e>lMn$MZ3B7n<+E2{eP9DlU$_F+400++AxIOl!dI_eF&sazi^0@D2P_6s|LW~~ zumSKuba8P3Gd_L##9(fq0=EIAkcC^2;m_Ci3}V89aE%9!p9Kfvkk3pE3;=))uz6Ui R4HEzW002ovPDHLkV1n+bZz})* diff --git a/src/main/resources/data/create/recipes/crushing/gold_ore.json b/src/main/resources/data/create/recipes/crushing/gold_ore.json index 5349bd92f..47a4d5bfd 100644 --- a/src/main/resources/data/create/recipes/crushing/gold_ore.json +++ b/src/main/resources/data/create/recipes/crushing/gold_ore.json @@ -8,13 +8,13 @@ ], "results": [ { - "item": "minecraft:gold_ingot", + "item": "create:crushed_gold", "count": 1 }, { - "item": "minecraft:gold_nugget", - "count": 9, - "chance": 0.5 + "item": "create:crushed_gold", + "count": 2, + "chance": 0.3 }, { "item": "minecraft:cobblestone", diff --git a/src/main/resources/data/create/recipes/crushing/iron_ore.json b/src/main/resources/data/create/recipes/crushing/iron_ore.json index 7665634dc..94ad9f91f 100644 --- a/src/main/resources/data/create/recipes/crushing/iron_ore.json +++ b/src/main/resources/data/create/recipes/crushing/iron_ore.json @@ -8,13 +8,13 @@ ], "results": [ { - "item": "minecraft:iron_ingot", + "item": "create:crushed_iron", "count": 1 }, { - "item": "minecraft:iron_nugget", - "count": 9, - "chance": 0.5 + "item": "create:crushed_iron", + "count": 2, + "chance": 0.3 }, { "item": "minecraft:cobblestone", diff --git a/src/main/resources/data/create/recipes/smelting/crushed_gold.json b/src/main/resources/data/create/recipes/smelting/crushed_gold.json new file mode 100644 index 000000000..e348b4120 --- /dev/null +++ b/src/main/resources/data/create/recipes/smelting/crushed_gold.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "create:crushed_gold" + }, + "result": "minecraft:gold_ingot", + "experience": 0.1, + "cookingtime": 200, + "conditions": [ + { + "type": "create:module", + "module": "contraptions" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/crushed_iron.json b/src/main/resources/data/create/recipes/smelting/crushed_iron.json new file mode 100644 index 000000000..a64f9a7b0 --- /dev/null +++ b/src/main/resources/data/create/recipes/smelting/crushed_iron.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "create:crushed_iron" + }, + "result": "minecraft:iron_ingot", + "experience": 0.1, + "cookingtime": 200, + "conditions": [ + { + "type": "create:module", + "module": "contraptions" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_gold.json b/src/main/resources/data/create/recipes/splashing/crushed_gold.json new file mode 100644 index 000000000..3e354b9f5 --- /dev/null +++ b/src/main/resources/data/create/recipes/splashing/crushed_gold.json @@ -0,0 +1,22 @@ +{ + "type": "create:splashing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "create:crushed_gold" + } + ], + "results": [ + { + "item": "minecraft:gold_nugget", + "count": 10, + "chance": 1 + }, + { + "item": "minecraft:gold_nugget", + "count": 5, + "chance": 0.5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_iron.json b/src/main/resources/data/create/recipes/splashing/crushed_iron.json new file mode 100644 index 000000000..86d4b64ae --- /dev/null +++ b/src/main/resources/data/create/recipes/splashing/crushed_iron.json @@ -0,0 +1,22 @@ +{ + "type": "create:splashing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "create:crushed_iron" + } + ], + "results": [ + { + "item": "minecraft:iron_nugget", + "count": 10, + "chance": 1 + }, + { + "item": "minecraft:iron_nugget", + "count": 5, + "chance": 0.5 + } + ], + "processingTime": 100 +} \ No newline at end of file