diff --git a/common/src/main/kotlin/quaedam/misc/cts/CTSBlock.kt b/common/src/main/kotlin/quaedam/misc/cts/CTSBlock.kt index 2002d2e..89ec2ba 100644 --- a/common/src/main/kotlin/quaedam/misc/cts/CTSBlock.kt +++ b/common/src/main/kotlin/quaedam/misc/cts/CTSBlock.kt @@ -1,15 +1,90 @@ package quaedam.misc.cts import net.minecraft.core.BlockPos -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.EntityBlock +import net.minecraft.core.Direction +import net.minecraft.world.item.context.BlockPlaceContext +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.LevelAccessor +import net.minecraft.world.level.block.* import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.block.state.StateDefinition +import net.minecraft.world.level.block.state.properties.BlockStateProperties +import net.minecraft.world.level.material.FluidState +import net.minecraft.world.level.material.Fluids +import net.minecraft.world.phys.shapes.CollisionContext +import net.minecraft.world.phys.shapes.Shapes +import net.minecraft.world.phys.shapes.VoxelShape -object CTSBlock : Block( +object CTSBlock : HorizontalDirectionalBlock( Properties.of() .lightLevel { 2 } -), EntityBlock { + .noOcclusion() +), EntityBlock, SimpleWaterloggedBlock { + + val shapes = getShapeForEachState(::createVoxelShape) + + init { + registerDefaultState( + defaultBlockState() + .setValue(FACING, Direction.EAST) + .setValue(BlockStateProperties.WATERLOGGED, false) + ) + } override fun newBlockEntity(pos: BlockPos, state: BlockState) = CTSBlockEntity(pos, state) + override fun createBlockStateDefinition(builder: StateDefinition.Builder) { + super.createBlockStateDefinition(builder) + builder.add(FACING, BlockStateProperties.WATERLOGGED) + } + + override fun getStateForPlacement(context: BlockPlaceContext): BlockState? { + if (context.level.getBlockState(context.clickedPos.below()).isAir) return null + return super.defaultBlockState().setValue(FACING, context.horizontalDirection) + } + + @Suppress("OVERRIDE_DEPRECATION") + override fun getRenderShape(state: BlockState) = RenderShape.MODEL + + @Suppress("OVERRIDE_DEPRECATION") + override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext) = + shapes[state]!! + + private fun createVoxelShape(state: BlockState): VoxelShape = + when (state.getValue(FACING)) { + Direction.WEST, Direction.EAST -> Shapes.or( + box(0.0, 0.0, 0.0, 16.0, 12.0, 16.0), + box(6.0, 13.0, 7.0, 10.0, 15.0, 9.0), + ) + + Direction.SOUTH, Direction.NORTH -> Shapes.or( + box(0.0, 0.0, 0.0, 16.0, 12.0, 16.0), + box(7.0, 13.0, 6.0, 9.0, 15.0, 10.0), + ) + + else -> throw IllegalStateException(state.getValue(FACING).name) + } + + @Suppress("OVERRIDE_DEPRECATION", "DEPRECATION") + override fun updateShape( + state: BlockState, + direction: Direction, + neighborState: BlockState, + level: LevelAccessor, + pos: BlockPos, + neighborPos: BlockPos + ): BlockState { + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)) + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos) + } + + @Suppress("OVERRIDE_DEPRECATION", "DEPRECATION") + override fun getFluidState(state: BlockState): FluidState = if (state.getValue(BlockStateProperties.WATERLOGGED)) { + Fluids.WATER.getSource(false) + } else { + super.getFluidState(state) + } + } \ No newline at end of file diff --git a/common/src/main/resources/assets/quaedam/blockstates/cts.json b/common/src/main/resources/assets/quaedam/blockstates/cts.json new file mode 100644 index 0000000..b6ff8e9 --- /dev/null +++ b/common/src/main/resources/assets/quaedam/blockstates/cts.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "quaedam:block/cts" + }, + "facing=south": { + "model": "quaedam:block/cts", + "y": 90 + }, + "facing=west": { + "model": "quaedam:block/cts", + "y": 180 + }, + "facing=north": { + "model": "quaedam:block/cts", + "y": 270 + } + } +} diff --git a/common/src/main/resources/assets/quaedam/models/block/cts.json b/common/src/main/resources/assets/quaedam/models/block/cts.json new file mode 100644 index 0000000..fe5d004 --- /dev/null +++ b/common/src/main/resources/assets/quaedam/models/block/cts.json @@ -0,0 +1,541 @@ +{ + "parent": "minecraft:block/block", + "texture_size": [ + 64, + 64 + ], + "textures": { + "0": "quaedam:block/cts", + "particle": "quaedam:block/cts" + }, + "elements": [ + { + "name": "s2", + "from": [ + 13, + -6, + 14 + ], + "to": [ + 15, + 6, + 16 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + -1, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 4, + 4.5, + 7 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 4, + 5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 5, + 0.5, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 5, + 1, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.75, + 7.5, + 5.25, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 5.5, + 7, + 6 + ], + "texture": "#0" + } + } + }, + { + "name": "s3", + "from": [ + 1, + -6, + 14 + ], + "to": [ + 3, + 6, + 16 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 1, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 5, + 1.5, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 5, + 2, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 5, + 2.5, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 5, + 3, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.25, + 7.5, + 5.75, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 6, + 7, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "name": "s4", + "from": [ + 1, + 0, + -1 + ], + "to": [ + 3, + 12, + 1 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 1, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 5, + 3.5, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 5, + 4, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 4, + 5.5, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 4, + 6, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.75, + 7.5, + 6.25, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 6.5, + 7, + 7 + ], + "texture": "#0" + } + } + }, + { + "name": "s1", + "from": [ + 13, + 0, + -1 + ], + "to": [ + 15, + 12, + 1 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + -1, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 0, + 6.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 4, + 6.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 0, + 7, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 4, + 7, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.25, + 7.5, + 6.75, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 4, + 7.25, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "name": "platform", + "from": [ + 0, + 10, + 3 + ], + "to": [ + 16, + 12, + 13 + ], + "faces": { + "north": { + "uv": [ + 4, + 3, + 8, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 0, + 9.5, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 3.5, + 8, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 0.5, + 9.5, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 2.5, + 0, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 2.5, + 0, + 5 + ], + "texture": "#0" + } + } + }, + { + "name": "core", + "from": [ + 6, + 13, + 7 + ], + "to": [ + 10, + 15, + 9 + ], + "faces": { + "north": { + "uv": [ + 7, + 1.5, + 8, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.25, + 4.5, + 7.75, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7, + 2, + 8, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.25, + 5, + 7.75, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 3, + 7, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 7, + 4, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "name": "screen", + "from": [ + 4, + 6, + -2 + ], + "to": [ + 12, + 12, + -1 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 0, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 0, + 6, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 4, + 7.25, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 1.5, + 6, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 7, + 5.25, + 8.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 1.25, + 7, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9, + 1.25, + 7, + 1.5 + ], + "texture": "#0" + } + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/quaedam/models/item/cts.json b/common/src/main/resources/assets/quaedam/models/item/cts.json new file mode 100644 index 0000000..b221a8b --- /dev/null +++ b/common/src/main/resources/assets/quaedam/models/item/cts.json @@ -0,0 +1,3 @@ +{ + "parent": "quaedam:block/cts" +} \ No newline at end of file diff --git a/common/src/main/resources/assets/quaedam/textures/block/cts.png b/common/src/main/resources/assets/quaedam/textures/block/cts.png new file mode 100644 index 0000000..7d015da Binary files /dev/null and b/common/src/main/resources/assets/quaedam/textures/block/cts.png differ