自定义方块(碰撞箱)
约 274 字小于 1 分钟
2025-09-30
自定义碰撞箱,因为是不规则方块,所以每个朝向的碰撞箱不一样
private final static VoxelShape SHAPE_NORTH= Block.box(5, 0, 6, 11, 14, 10);
private final static VoxelShape SHAPE_EAST= Block.box(6, 0, 5, 10, 14, 11);
@Override
public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) {
switch (blockState.getValue(FACING)){
case SOUTH, NORTH:
default:
return SHAPE_NORTH;
case WEST, EAST:
return SHAPE_EAST;
}
}
VoxelShape可以从Blockbench中Model Utils插件中导出带有VoxelShape的java源代码文件,加以修改即可
新建net.emtips.leespeaker.CustomBlock包 Speaker_Block类
package net.emtips.leespeaker.CustomBlock;
import net.minecraft.core.BlockPos;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation;
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.block.state.properties.DirectionProperty;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
public class Speaker_Block extends HorizontalDirectionalBlock {
public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
public Speaker_Block(Properties properties) {
super(properties);
}
private final static VoxelShape SHAPE_NORTH= Block.box(5, 0, 6, 11, 14, 10);
private final static VoxelShape SHAPE_EAST= Block.box(6, 0, 5, 10, 14, 11);
@Override
public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) {
switch (blockState.getValue(FACING)){
case SOUTH, NORTH:
default:
return SHAPE_NORTH;
case WEST, EAST:
return SHAPE_EAST;
}
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext pContext){
return this.defaultBlockState().setValue(FACING,pContext.getHorizontalDirection().getOpposite());
}
@Override
public BlockState rotate(BlockState pState, Rotation pRotation){
return pState.setValue(FACING,pRotation.rotate(pState.getValue(FACING)));
}
@Override
public BlockState mirror(BlockState pState, Mirror pMirror){
return pState.rotate(pMirror.getRotation(pState.getValue(FACING)));
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder ) {
builder.add(FACING);
}
}
版权所有
版权归属:Ashley Lee