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 [2020/03/30 17:30] – [Making a block invisible] liachtutorial:blockappearance [2024/02/05 16:03] (current) – Fix typo in environment annotation haykam
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)]].//+//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)]].//
  
 ===== Making a block transparent ===== ===== Making a block transparent =====
Line 7: Line 7:
 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 client-sided mod initializer, add: +In a [[documentation:entrypoint|client-sided mod initializer]]:
-<code java> +
-BlockRenderLayerMap.INSTANCE.putBlock(ExampleMod.MY_BLOCK, RenderLayer.getCutout()); +
-// Replace `RenderLayer.getCutout()` with `RenderLayer.getTranslucent()` if you have a translucent texture. +
-</code>+
  
-You probably also want to make your block transparent. To do that, use the ''nonOpaque'' method on your block settings. +<yarncode java> 
-<code java> +@Environment(EnvType.CLIENT) 
-class MyBlock extends Block +public class ExampleModClient implements ClientModInitializer() 
-    public MyBlock() { +    public void onInitializeClient() { 
-        super(Settings.of(Material.STONE).nonOpaque());+         BlockRenderLayerMap.INSTANCE.putBlock(ExampleMod.MY_BLOCK, class_1921.method_23581()); 
 +         // Replace `class_1921.method_23581()` with `class_1921.method_23583()` if you have a translucent texture.
     }     }
- 
-    [...] 
 } }
 +</yarncode>
  
 +You probably also want to make your block transparent. To do that, use the ''<yarn method_22488>'' method on your block settings.
 +
 +<yarncode java>
 +     public static final Block MY_BLOCK = new Block(FabricBlockSettings.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.
 +
 +Be sure to add your client entrypoint to fabric.mod.json. You can do this like so:
 +
 +<code json>
 +  "entrypoints": {
 +    "main": [
 +      "mod.fabricmc.examplemod.ExampleMod"
 +    ],
 +    "client": [
 +      "mod.fabricmc.examplemod.ExampleModClient"
 +    ]
 +  },
 </code> </code>
 +
 +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 thiswe override ''<yarn method_9604>'' in our block class and return ''<yarn class_2464>.<yarn field_11455>'': 
-<code java>+ 
 +<yarncode java>
     @Override     @Override
-    public BlockRenderType getRenderType(BlockState blockState) { +    public class_2464 method_9604(class_2680 state) { 
-        return BlockRenderType.INVISIBLE;+        return class_2464.field_11455;
     }     }
-</code+</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 then 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>'': 
-<code java>+ 
 +<yarncode java>
     @Override     @Override
-    public VoxelShape getOutlineShape(BlockState blockStateBlockView blockView, BlockPos blockPosEntityContext entityContext) { +    public class_265 method_9530(class_2680 stateclass_1922 blockView, class_2338 posclass_3726 context) { 
-       return VoxelShapes.empty();+       return class_259.method_1073();
     }     }
-</code>+</yarncode>
tutorial/blockappearance.1585589433.txt.gz · Last modified: 2020/03/30 17:30 by liach