User Tools

Site Tools


zh_cn:tutorial:blockappearance

操纵方块的外观

使方块透明

您可能已经注意到,即使块的纹理是透明的,它仍然看起来是不透明的。 要解决此问题,请覆盖getRenderLayer并返回BlockRenderLayer.TRANSLUCENT

class MyBlock extends Block {
    @Override
    public BlockRenderLayer getRenderLayer() {
        return BlockRenderLayer.TRANSLUCENT;
    }
 
    [...]
}

您可能还想使方块透明。 为此,请使用Material构造函数将blocksLight设置为false。

class MyBlock extends Block {
     private static Material myMaterial = new Material(
            MaterialColor.AIR,   //materialColor,
            false,   //isLiquid,
            false, // isSolid,
            true, // blocksMovement,
            false,// blocksLight,  <----- Important part, the other parts change as you wish
            true,//  !requiresTool,
            false, //  burnable,
            false,//  replaceable,
            PistonBehavior.NORMAL//  pistonBehavior
    );
 
    public MyBlock() {
        super(Settings.of(myMaterial);
    }
 
    [...]
}

使方块不可见

首先,我们需要使该方块看起来不可见。 为此,我们在块类中重写getRenderType并返回BlockRenderType.INVISIBLE

    @Override
    public BlockRenderType getRenderType(BlockState blockState) {
        return BlockRenderType.INVISIBLE;
    }

然后,我们需要通过使其outlineShape不存在来使我们的块不可选择。 因此,覆盖getOutlineShape并返回一个空的VoxelShape

    @Override
    public VoxelShape getOutlineShape(BlockState blockState, BlockView blockView, BlockPos blockPos, EntityContext entityContext) {
       return VoxelShapes.cuboid(0,0,0,0,0,0);
    }
zh_cn/tutorial/blockappearance.txt · Last modified: 2019/12/19 05:53 by lightcolour