diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 3a7613f1c..de698f685 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -5,6 +5,7 @@ import com.simibubi.create.foundation.block.RenderUtilityAxisBlock; import com.simibubi.create.foundation.block.RenderUtilityBlock; import com.simibubi.create.modules.contraptions.base.HalfAxisBlock; import com.simibubi.create.modules.contraptions.generators.MotorBlock; +import com.simibubi.create.modules.contraptions.generators.WaterWheelBlock; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelBlock; import com.simibubi.create.modules.contraptions.receivers.DrillBlock; import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock; @@ -60,6 +61,7 @@ public enum AllBlocks { BELT_ANIMATION(new RenderUtilityBlock()), MOTOR(new MotorBlock()), + WATER_WHEEL(new WaterWheelBlock()), TURNTABLE(new TurntableBlock()), HALF_AXIS(new HalfAxisBlock()), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index c50c70d53..2929ced8e 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -5,6 +5,7 @@ import java.util.function.Supplier; import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.MotorTileEntity; import com.simibubi.create.modules.contraptions.generators.MotorTileEntityRenderer; +import com.simibubi.create.modules.contraptions.generators.WaterWheelTileEntity; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelTileEntity; import com.simibubi.create.modules.contraptions.receivers.DrillTileEntity; import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity; @@ -52,6 +53,7 @@ public enum AllTileEntities { MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON), DRILL(DrillTileEntity::new, AllBlocks.DRILL), CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL), + WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL), ; @@ -92,6 +94,7 @@ public enum AllTileEntities { bind(MechanicalPistonTileEntity.class, new MechanicalPistonTileEntityRenderer()); bind(DrillTileEntity.class, new KineticTileEntityRenderer()); bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer()); + bind(WaterWheelTileEntity.class, new KineticTileEntityRenderer()); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java new file mode 100644 index 000000000..d249c6724 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java @@ -0,0 +1,142 @@ +package com.simibubi.create.modules.contraptions.generators; + +import static net.minecraft.util.Direction.DOWN; +import static net.minecraft.util.Direction.EAST; +import static net.minecraft.util.Direction.NORTH; +import static net.minecraft.util.Direction.SOUTH; +import static net.minecraft.util.Direction.UP; +import static net.minecraft.util.Direction.WEST; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.fluid.IFluidState; +import net.minecraft.item.BlockItemUseContext; +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.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public class WaterWheelBlock extends HorizontalKineticBlock { + + public WaterWheelBlock() { + super(Properties.from(Blocks.STRIPPED_SPRUCE_WOOD)); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new WaterWheelTileEntity(); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + + @Override + protected boolean hasStaticPart() { + return false; + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + for (Direction direction : Direction.values()) { + BlockPos neighbourPos = pos.offset(direction); + BlockState neighbourState = worldIn.getBlockState(neighbourPos); + if (!AllBlocks.WATER_WHEEL.typeOf(neighbourState)) + continue; + if (neighbourState.get(HORIZONTAL_FACING).getAxis() != state.get(HORIZONTAL_FACING).getAxis() + || state.get(HORIZONTAL_FACING).getAxis() != direction.getAxis()) + return false; + } + + return true; + } + + @Override + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + BlockPos currentPos, BlockPos facingPos) { + updateFlowAt(stateIn, worldIn.getWorld(), currentPos, facing); + updateWheelSpeed(worldIn, currentPos); + return stateIn; + } + + @Override + public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + for (Direction d : Direction.values()) + updateFlowAt(state, worldIn, pos, d); + updateWheelSpeed(worldIn, pos); + } + + private void updateFlowAt(BlockState state, World world, BlockPos pos, Direction f) { + WaterWheelTileEntity te = (WaterWheelTileEntity) world.getTileEntity(pos); + if (te == null) + return; + if (f.getAxis() == state.get(HORIZONTAL_FACING).getAxis()) + return; + IFluidState fluid = world.getFluidState(pos.offset(f)); + Vec3d flowVec = fluid.getFlow(world, pos.offset(f)); + Direction wf = state.get(HORIZONTAL_FACING); + double flow = 0; + + flowVec = flowVec.scale(f.getAxisDirection().getOffset()); + boolean clockwise = wf.getAxisDirection() == AxisDirection.POSITIVE; + + if (wf.getAxis() == Axis.Z) { + if (f.getAxis() == Axis.Y) + flow = flowVec.x > 0 ^ !clockwise ? -flowVec.x * 2 : -flowVec.x; + if (f.getAxis() == Axis.X) + flow = flowVec.y < 0 ^ !clockwise ? flowVec.y * 2 : flowVec.y; + } + + if (wf.getAxis() == Axis.X) { + if (f.getAxis() == Axis.Y) + flow = flowVec.z < 0 ^ !clockwise ? flowVec.z * 2 : flowVec.z; + if (f.getAxis() == Axis.Z) + flow = flowVec.y > 0 ^ !clockwise ? -flowVec.y * 2 : -flowVec.y; + } + + te.setFlow(f, (int) (flow * 10)); + } + + private void updateWheelSpeed(IWorld world, BlockPos pos) { + WaterWheelTileEntity te = (WaterWheelTileEntity) world.getTileEntity(pos); + if (te == null) + return; + te.updateSpeed(); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + Direction facing = context.getFace(); + BlockState placedOn = context.getWorld().getBlockState(context.getPos().offset(facing.getOpposite())); + if (AllBlocks.WATER_WHEEL.typeOf(placedOn)) + return getDefaultState().with(HORIZONTAL_FACING, placedOn.get(HORIZONTAL_FACING)); + if (facing.getAxis().isHorizontal()) + return getDefaultState().with(HORIZONTAL_FACING, + context.isPlacerSneaking() ? facing.getOpposite() : facing); + + return super.getStateForPlacement(context); + } + + @Override + public boolean isAxisTowards(World world, BlockPos pos, BlockState state, Direction face) { + return state.get(HORIZONTAL_FACING).getAxis() == face.getAxis(); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(HORIZONTAL_FACING).getAxis(); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java new file mode 100644 index 000000000..cdf96b969 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java @@ -0,0 +1,76 @@ +package com.simibubi.create.modules.contraptions.generators; + +import java.util.HashMap; +import java.util.Map; + +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.modules.contraptions.RotationPropagator; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; + +public class WaterWheelTileEntity extends KineticTileEntity { + + private Map flows; + private boolean hasFlows; + + public WaterWheelTileEntity() { + super(AllTileEntities.WATER_WHEEL.type); + flows = new HashMap(); + for (Direction d : Direction.values()) + setFlow(d, 0); + + } + + @Override + public void read(CompoundNBT compound) { + super.read(compound); + if (compound.contains("Flows")) { + for (Direction d : Direction.values()) + setFlow(d, compound.getCompound("Flows").getInt(d.getName())); + } + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + + CompoundNBT flows = new CompoundNBT(); + for (Direction d : Direction.values()) + flows.putInt(d.getName(), this.flows.get(d)); + compound.put("Flows", flows); + + return super.write(compound); + } + + public void setFlow(Direction direction, int speed) { + flows.put(direction, speed); + } + + @Override + public void onLoad() { + super.onLoad(); +// updateSpeed(); + } + + public void updateSpeed() { + float speed = 0; + for (Integer i : flows.values()) + speed += i; + + if (this.speed != speed) { + this.setSpeed(speed); + hasFlows = speed != 0; + notifyBlockUpdate(); + RotationPropagator.handleRemoved(world, pos, this); + RotationPropagator.handleAdded(world, pos, this); + } + + } + + @Override + public boolean isSource() { + return hasFlows; + } + +} diff --git a/src/main/resources/assets/create/blockstates/water_wheel.json b/src/main/resources/assets/create/blockstates/water_wheel.json new file mode 100644 index 000000000..17a156d98 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/water_wheel.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "create:block/water_wheel" + }, + "variants": { + "facing": { + "north": { "x": 90 }, + "east": { "x": 90, "y": 90 }, + "south": { "x": 90, "y": 180 }, + "west": { "x": 90, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index a39a3a92b..0f300febd 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -24,6 +24,7 @@ "block.create.drill": "Mechanical Drill", "block.create.harvester": "Mechanical Harvester", "block.create.contact": "Redstone Contact", + "block.create.water_wheel": "Water Wheel", "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", "block.create.mechanical_piston": "Mechanical Piston", diff --git a/src/main/resources/assets/create/models/block/water_wheel.json b/src/main/resources/assets/create/models/block/water_wheel.json new file mode 100644 index 000000000..f5a66e9d5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/water_wheel.json @@ -0,0 +1,450 @@ +{ + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", + "parent": "block/cube", + "textures": { + "axis": "create:block/axis", + "axis_top": "create:block/axis_top", + "particle": "minecraft:block/stripped_spruce_log", + "wheel": "create:block/wheel", + "spruce_planks": "minecraft:block/spruce_planks", + "stripped_spruce_log": "minecraft:block/stripped_spruce_log", + "spruce_log": "minecraft:block/spruce_log" + }, + "elements": [ + { + "name": "Axis", + "from": [ 6, 0, 6 ], + "to": [ 10, 16, 10 ], + "shade": false, + "faces": { + "north": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "east": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "south": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "west": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "up": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ], "rotation": 90 }, + "down": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ], "rotation": 90 } + } + }, + { + "name": "Segment1", + "from": [ 13, -1, -8 ], + "to": [ 14, 17, 0 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } + } + }, + { + "name": "Segment1", + "from": [ 13, -1, -8 ], + "to": [ 14, 17, 0 ], + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } + } + }, + { + "name": "Segment1", + "from": [ 13, -1, -8 ], + "to": [ 14, 17, 0 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } + } + }, + { + "name": "Segment1", + "from": [ 13, -1, -8 ], + "to": [ 14, 17, 0 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } + } + }, + { + "name": "Segment3", + "from": [ 2, -1, 16 ], + "to": [ 3, 17, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } + } + }, + { + "name": "Segment3", + "from": [ 2, -1, 16 ], + "to": [ 3, 17, 24 ], + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } + } + }, + { + "name": "Segment3", + "from": [ 2, -1, 16 ], + "to": [ 3, 17, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } + } + }, + { + "name": "Segment3", + "from": [ 2, -1, 16 ], + "to": [ 3, 17, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } + } + }, + { + "name": "Segment2", + "from": [ -8, -1, 2 ], + "to": [ 0, 17, 3 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } + } + }, + { + "name": "Segment2", + "from": [ -8, -1, 2 ], + "to": [ 0, 17, 3 ], + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } + } + }, + { + "name": "Segment2", + "from": [ -8, -1, 2 ], + "to": [ 0, 17, 3 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } + } + }, + { + "name": "Segment2", + "from": [ -8, -1, 2 ], + "to": [ 0, 17, 3 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } + } + }, + { + "name": "Segment4", + "from": [ 16, -1, 13 ], + "to": [ 24, 17, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } + } + }, + { + "name": "Segment4", + "from": [ 16, -1, 13 ], + "to": [ 24, 17, 14 ], + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } + } + }, + { + "name": "Segment4", + "from": [ 16, -1, 13 ], + "to": [ 24, 17, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } + } + }, + { + "name": "Segment4", + "from": [ 16, -1, 13 ], + "to": [ 24, 17, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, + "west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, + "up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, + "down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } + } + }, + { + "name": "SmallRim", + "from": [ -2, -0.8, -2 ], + "to": [ 18, 16.8, 18 ], + "faces": { + "up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, + "down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } + } + }, + { + "name": "LargeRim", + "from": [ -5, -0.7, -5 ], + "to": [ 21, -0.7, 21 ], + "faces": { + "up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, + "down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } + } + }, + { + "name": "LargeRim2", + "from": [ -5, 16.7, -5 ], + "to": [ 21, 16.7, 21 ], + "faces": { + "up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, + "down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } + } + }, + { + "name": "InnerSegment", + "from": [ -2, -0.6, 4 ], + "to": [ 0, 16.6, 12 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ -2, -0.6, 4 ], + "to": [ 0, 16.6, 12 ], + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ -2, -0.6, 4 ], + "to": [ 0, 16.6, 12 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -45.0 }, + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ 16, -0.6, 4 ], + "to": [ 18, 16.6, 12 ], + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ 16, -0.6, 4 ], + "to": [ 18, 16.6, 12 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ 16, -0.6, 4 ], + "to": [ 18, 16.6, 12 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -45.0 }, + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } + } + }, + { + "name": "InnerSegment", + "from": [ 4, -0.6, -2 ], + "to": [ 12, 16.6, 0 ], + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 } + } + }, + { + "name": "InnerSegment", + "from": [ 4, -0.6, 16 ], + "to": [ 12, 16.6, 18 ], + "faces": { + "north": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, + "east": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "south": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, + "west": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, + "up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 }, + "down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 } + } + }, + { + "name": "AxisCoat", + "from": [ 5, 1, 5 ], + "to": [ 11, 15, 11 ], + "shade": false, + "faces": { + "north": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, + "east": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, + "south": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, + "west": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, + "up": { "texture": "#spruce_log", "uv": [ 5, 5, 11, 11 ], "rotation": 90 }, + "down": { "texture": "#spruce_log", "uv": [ 5, 5, 11, 11 ], "rotation": 90 } + } + }, + { + "name": "Connector", + "from": [ 6.5, 2, -1 ], + "to": [ 9.5, 14, 17 ], + "shade": false, + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "east": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "west": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "up": { "texture": "#spruce_log", "uv": [ 3, 0, 6, 16 ] }, + "down": { "texture": "#spruce_log", "uv": [ 6, 0, 9, 16 ] } + } + }, + { + "name": "Connector", + "from": [ 6.5, 2, -1 ], + "to": [ 9.5, 14, 17 ], + "shade": false, + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "east": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "west": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "up": { "texture": "#spruce_log", "uv": [ 9, 0, 12, 16 ] }, + "down": { "texture": "#spruce_log", "uv": [ 2, 0, 5, 16 ] } + } + }, + { + "name": "Connector", + "from": [ -1, 2, 6.5 ], + "to": [ 17, 14, 9.5 ], + "shade": false, + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, + "faces": { + "north": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "south": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "up": { "texture": "#spruce_log", "uv": [ 4, 0, 7, 16 ], "rotation": 90 }, + "down": { "texture": "#spruce_log", "uv": [ 8, 0, 11, 16 ], "rotation": 90 } + } + }, + { + "name": "Connector", + "from": [ -1, 2, 6.5 ], + "to": [ 17, 14, 9.5 ], + "shade": false, + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, + "faces": { + "north": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "south": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, + "up": { "texture": "#spruce_log", "uv": [ 9, 0, 12, 16 ], "rotation": 90 }, + "down": { "texture": "#spruce_log", "uv": [ 2, 0, 5, 16 ], "rotation": 90 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/water_wheel.json b/src/main/resources/assets/create/models/item/water_wheel.json new file mode 100644 index 000000000..a5d775067 --- /dev/null +++ b/src/main/resources/assets/create/models/item/water_wheel.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/water_wheel" +} diff --git a/src/main/resources/assets/create/textures/block/wheel.png b/src/main/resources/assets/create/textures/block/wheel.png new file mode 100644 index 000000000..3167ef46e Binary files /dev/null and b/src/main/resources/assets/create/textures/block/wheel.png differ