ru:tutorial:directionalblock
Table of Contents
Создание направленного блока
Создание блоков направленными (обращенными в определенных направлениях) также выполняется с использованием состояний блоков. В этом примере описывается вертикальная версия андезитовой плиты.
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<Block, BlockState> 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()); } }
Определение состояния блока
- src/main/resources/assets/tutorial/blockstates/polished_andesite_side_block.json
{ "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 } } }
Определение модели блока
- src/main/resources/assets/tutorial/models/block/side.json
{ "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" } } } ] }
- src/main/resources/assets/tutorial/models/block/polished_andesite_side_block.json
{ "parent": "tutorial:block/side", "textures": { "bottom": "block/polished_andesite", "top": "block/polished_andesite", "side": "block/polished_andesite" } }
Определение поворота и зеркального отображения блоков
Для направленных блоков вам, возможно, придется переопределить методы rotate
и mirror
, чтобы в структурных блоках (и модах, связанных со структурой, таких как WorldEdit), они могли быть правильно повернуты или зеркально отражены. Однако в данном случае класс HorizontalFacingBlock
уже сделал это за вас.
ru/tutorial/directionalblock.txt · Last modified: 2022/03/30 14:10 by furnygo