====== Создание направленного блока ======
Создание блоков направленными (обращенными в определенных направлениях) также выполняется с использованием состояний блоков.
В этом примере описывается вертикальная версия андезитовой плиты.
{{:tutorial:vertslab.png?200|}}
public class VerticalSlabBlock extends HorizontalFacingBlock {
public VerticalSlabBlock(Settings settings) {
super(settings);
setDefaultState(this.stateManager.getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH));
}
@Override
protected void appendProperties(StateManager.Builder stateManager) {
stateManager.add(Properties.HORIZONTAL_FACING);
}
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ctx) {
Direction dir = state.get(FACING);
switch(dir) {
case NORTH:
return VoxelShapes.cuboid(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.5f);
case SOUTH:
return VoxelShapes.cuboid(0.0f, 0.0f, 0.5f, 1.0f, 1.0f, 1.0f);
case EAST:
return VoxelShapes.cuboid(0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
case WEST:
return VoxelShapes.cuboid(0.0f, 0.0f, 0.0f, 0.5f, 1.0f, 1.0f);
default:
return VoxelShapes.fullCube();
}
}
@Override
public BlockState getPlacementState(ItemPlacementContext ctx) {
return (BlockState)this.getDefaultState().with(Properties.HORIZONTAL_FACING, ctx.getPlayerFacing().getOpposite());
}
}
===== Определение состояния блока =====
{
"variants": {
"facing=north": { "model": "bitmod:block/polished_andesite_side_block", "uvlock": true },
"facing=east": { "model": "bitmod:block/polished_andesite_side_block", "y": 90, "uvlock": true },
"facing=south": { "model": "bitmod:block/polished_andesite_side_block", "y": 180, "uvlock": true },
"facing=west": { "model": "bitmod:block/polished_andesite_side_block", "y": 270, "uvlock": true }
}
}
===== Определение модели блока =====
{ "parent": "block/block",
"textures": {
"particle": "#side"
},
"elements": [
{ "from": [ 0, 0, 0 ],
"to": [ 16, 16, 8 ],
"faces": {
"down": { "texture": "#bottom", "cullface": "down" },
"up": { "texture": "#top", "cullface": "up" },
"north": { "texture": "#side", "cullface": "north" },
"south": { "texture": "#side", "cullface": "south" },
"west": { "texture": "#side", "cullface": "west" },
"east": { "texture": "#side", "cullface": "east" }
}
}
]
}
{
"parent": "tutorial:block/side",
"textures": {
"bottom": "block/polished_andesite",
"top": "block/polished_andesite",
"side": "block/polished_andesite"
}
}
===== Определение поворота и зеркального отображения блоков =====
Для направленных блоков вам, возможно, придется переопределить методы ''rotate'' и ''mirror'', чтобы в структурных блоках (и модах, связанных со структурой, таких как WorldEdit), они могли быть правильно повернуты или зеркально отражены. Однако в данном случае класс ''HorizontalFacingBlock'' уже сделал это за вас.