feat: model and textures for constant temporal sink block

This commit is contained in:
xtex 2023-07-27 16:21:01 +08:00
parent dc4a9764cd
commit d077704c05
Signed by: xtex
GPG Key ID: B918086ED8045B91
5 changed files with 642 additions and 4 deletions

View File

@ -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<Block, BlockState>) {
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)
}
}

View File

@ -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
}
}
}

View File

@ -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"
}
}
}
]
}

View File

@ -0,0 +1,3 @@
{
"parent": "quaedam:block/cts"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B