====== Manipulating a Block's appearance (1.14) ======
//This is the 1.14 version of this tutorial. For the latest version, see [[tutorial:blockappearance|Manipulating a Block's appearance]].//
===== Making a block transparent =====
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));
}
[...]
}
===== Making a block invisible =====
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;
}