User Tools

Site Tools


tutorial:blockappearance

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tutorial:blockappearance [2019/08/06 18:34]
fudge
tutorial:blockappearance [2020/04/04 20:25] (current)
earthcomputer [Making a block transparent] Move paragraph outside code, oops
Line 1: Line 1:
 ====== Manipulating a Block'​s appearance ====== ====== Manipulating a Block'​s appearance ======
 +
 +//This is the 1.15 version of this tutorial. For the 1.14 version, see [[tutorial:​1.14:​blockappearance|Manipulating a Block'​s appearance (1.14)]].//
 +
 ===== Making a block transparent ===== ===== Making a block transparent =====
 You may have noticed that even if your block'​s texture is transparent,​ it still looks opaque. 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''​:+To fix this, you need to set your block's render layer to cutout or transparent. 
 + 
 +In a client-sided mod initializer,​ add:
 <code java> <code java>
-class MyBlock extends Block { +BlockRenderLayerMap.INSTANCE.putBlock(ExampleMod.MY_BLOCK, RenderLayer.getCutout())
-    @Override +// Replace `RenderLayer.getCutout()` with `RenderLayer.getTranslucent()` if you have a translucent texture.
-    public BlockRenderLayer getRenderLayer() { +
-        return BlockRenderLayer.TRANSLUCENT+
-    } +
- +
-    [...+
-+
 </​code>​ </​code>​
  
-You probably also want to make your block transparent. To do that, use the ''​Material'' ​constructor to set ''​blocksLight''​ to false.+You probably also want to make your block transparent. To do that, use the ''​nonOpaque'' ​method on your block settings.
 <code java> <code java>
 class MyBlock extends Block { 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() {     public MyBlock() {
-        super(Settings.of(myMaterial);+        super(Settings.of(Material.STONE).nonOpaque());
     }     }
  
Line 38: Line 24:
  
 </​code>​ </​code>​
 +
 +If you do not mark your block as non-opaque like this, then block faces behind the block will not render and you will be able to see through the world.
  
 ===== Making a block invisible ===== ===== Making a block invisible =====
Line 48: Line 36:
     }     }
 </​code>​ </​code>​
-We then need to make our block unselectable by making its `outlineShape` ​be non-existent. +We then need to make our block unselectable by making its outline shape be non-existent. 
-So override ''​getOutlineShape'​ and return an empty ''​VoxelShape'':​+So override ''​getOutlineShape'' and return an empty ''​VoxelShape'':​
 <code java> <code java>
     @Override     @Override
     public VoxelShape getOutlineShape(BlockState blockState, BlockView blockView, BlockPos blockPos, EntityContext entityContext) {     public VoxelShape getOutlineShape(BlockState blockState, BlockView blockView, BlockPos blockPos, EntityContext entityContext) {
-       ​return VoxelShapes.cuboid(0,0,0,0,0,0);+       ​return VoxelShapes.empty();
     }     }
 </​code>​ </​code>​
tutorial/blockappearance.1565116498.txt.gz · Last modified: 2019/08/06 18:34 by fudge