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 revisionPrevious revision
Next revision
Previous revision
tutorial:blockappearance [2022/08/14 04:00] – Use Yarn code blocks haykamtutorial:blockappearance [2025/06/10 16:40] (current) solidblock
Line 1: Line 1:
 ====== Manipulating a Block's appearance ====== ====== Manipulating a Block's appearance ======
  
-//This is the 1.15+ (1.16, 1.17, 1.18, and 1.19 work fine too) version of this tutorial. For the 1.14 version, see [[tutorial:1.14:blockappearance|Manipulating a Block's appearance (1.14)]].//+//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 or translucent ===== 
-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 or translucent, it still looks opaque. To fix this, you need to set your block's render layer to cutout or transparent.
-To fix this, you need to set your block's render layer to cutout or transparent.+
  
-In a [[documentation:entrypoint|client-sided mod initializer]], add:+In a [[documentation:entrypoint|client-sided mod initializer]]:
  
-<yarncode java> +//For version 1.21.5 and before:// 
-BlockRenderLayerMap.INSTANCE.putBlock(ExampleMod.MY_BLOCK, class_1921.method_23581()); +<yarncode java ExampleModClient.java> 
-// Replace `class_1921.method_23581()` with `class_1921.method_23583()` if you have a translucent texture.+@Environment(EnvType.CLIENT) 
 +public class ExampleModClient implements ClientModInitializer { 
 +    public void onInitializeClient() { 
 +        // To make some parts of the block transparent (like glass, saplings and doors): 
 +        BlockRenderLayerMap.INSTANCE.putBlock(TutorialBlocks.MY_BLOCK, RenderLayer.getCutout()); 
 +         
 +        // To make some parts of the block translucent (like ice, stained glass and portal) 
 +        BlockRenderLayerMap.INSTANCE.putBlock(TutorialBlocks.MY_BLOCK, RenderLayer.getTranslucent()); 
 +    } 
 +}
 </yarncode> </yarncode>
  
-You probably also want to make your block transparentTo do that, use the ''<yarn method_22488>'' method on your block settings. +//For version 1.21.6 and after: // 
- +<yarncode java ExampleModClient.java> 
-<yarncode java> +@Environment(EnvType.CLIENT) 
-class MyBlock extends class_2248 +public class ExampleModClient implements ClientModInitializer 
-    public MyBlock() { +    public void onInitializeClient() { 
-        super(class_2251.of(class_3614.field_15914).method_22488());+        // To make some parts of the block transparent (like glass, saplings and doors): 
 +        BlockRenderLayerMap.putBlock(TutorialBlocks.MY_BLOCK, BlockRenderLayer.CUTOUT); 
 +         
 +        // To make some parts of the block translucent (like ice, stained glass and portal) 
 +        BlockRenderLayerMap.putBlock(TutorialBlocks.MY_BLOCK, BlockRenderLayer.TRANSLUCENT);
     }     }
- 
-    [...] 
 } }
 </yarncode> </yarncode>
  
-If you do not mark your block as non-opaque like thisthen block faces behind the block will not render and you will be able to see through the world.+You probably also want to make your block non-opaque. To do thatuse the ''<yarn method_22488>'' method on your block settings. This will also make sides render inside.
  
-Be sure to add your client entrypoint to fabric.mod.jsonYou can do this like so:+<yarncode java> 
 +     public static final Block MY_BLOCK = new Block(AbstractBlock.Settings.create().method_22488()); 
 +</yarncode> 
 + 
 +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.
  
-<code json>+Be sure to add your client entrypoint to [[documentation:fabric_mod_json|fabric.mod.json]]. You can do this like so: 
 +<code javascript> 
 +
 +  [...]
   "entrypoints": {   "entrypoints": {
     "main": [     "main": [
-      "mod.fabricmc.examplemod.ExampleMod"+      "net.fabricmc.example.ExampleMod"
     ],     ],
     "client": [     "client": [
-      "mod.fabricmc.examplemod.ExampleModClient"+      "net.fabricmc.example.ExampleModClient"
     ]     ]
   },   },
 +  [...]
 +}
 </code> </code>
  
-Note: For non-transparent blocks that are not full, you may have to override the ''getOutlineShape'' method to return a non-full shape to avoid seeing through the world.+Note: For non-transparent blocks that are not full, you may have to override the ''<yarn method_9530>'' method to return a non-full shape to avoid seeing through the world.
  
 ===== Making a block invisible ===== ===== 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'':+First we need to make the block appear invisible. To do this, we override ''<yarn method_9604>'' in our block class and return ''<yarn class_2464>.<yarn field_11455>'':
  
 <yarncode java> <yarncode java>
Line 54: Line 73:
 </yarncode> </yarncode>
  
-We then need to make our block unselectable by making its outline shape be non-existent. So override ''getOutlineShape'' and return an empty ''VoxelShape'':+We may also need to make our block unselectable by making its outline shape be non-existent. So override ''<yarn method_9530>'' and return an empty ''<yarn class_265>'':
  
 <yarncode java> <yarncode java>
tutorial/blockappearance.1660449653.txt.gz · Last modified: 2022/08/14 04:00 by haykam