This is the 1.14 version of this tutorial. For the latest version, see Manipulating a Block's appearance.
You may have noticed that even if your block's texture is transparent, it still looks opaque.
To fix this, override getRenderLayer
and return BlockRenderLayer.TRANSLUCENT
:
class MyBlock extends Block { @Environment(EnvType.CLIENT) @Override public BlockRenderLayer getRenderLayer() { return BlockRenderLayer.TRANSLUCENT; } [...] }
You probably also want to make your block transparent. To do that, use the Material
constructor to set blocksLight
to false.
class MyBlock extends Block { private static final Material MY_MATERIAL = 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(MY_MATERIAL)); } [...] }
First we need to make the block appear invisible.
To do this we override getRenderType
in our block class and return BlockRenderType.INVISIBLE
:
@Override public BlockRenderType getRenderType(BlockState blockState) { return BlockRenderType.INVISIBLE; }
We then need to make our block unselectable by making its outline shape be non-existent.
So override getOutlineShape
and return an empty VoxelShape
:
@Override public VoxelShape getOutlineShape(BlockState blockState, BlockView blockView, BlockPos blockPos, EntityContext entityContext) { return VoxelShapes.empty; }