User Tools

Site Tools


zh_cn: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
zh_cn:tutorial:blockappearance [2022/12/16 02:19] – [使方块透明] solidblockzh_cn:tutorial:blockappearance [2024/08/27 04:22] (current) solidblock
Line 1: Line 1:
 ====== 操纵方块的外观 ====== ====== 操纵方块的外观 ======
-//这是教程的1.15版本。如需1.14版本,请参考[[zh_cn:tutorial:1.14:blockappearance|操纵方块的外观(1.14)]]。// +//这是教程的 1.15版本。如需 1.14 版本,请参考[[tutorial:1.14:blockappearance|操纵方块的外观(1.14)(英文)]]。// 
-===== 使方块透明 ===== +===== 使方块透明或半透明 ===== 
-可能已经注意到,即使方块的材质是透明的,它仍然看起来是不透明的。如需解决,请将方块的渲染层设为 cutout 或 transparent。+可能已经注意到,即使方块的纹理透明或半透明的,看起来是不透明的。如需解决,请将方块的渲染层设为 cutout 或 transparent。
  
 在[[zh_cn:documentation:entrypoint|客户端模组初始化器]]中,添加: 在[[zh_cn:documentation:entrypoint|客户端模组初始化器]]中,添加:
Line 9: Line 9:
 public class ExampleModClient implements ClientModInitializer() { public class ExampleModClient implements ClientModInitializer() {
     public void onInitializeClient() {     public void onInitializeClient() {
-         BlockRenderLayerMap.INSTANCE.putBlock(ExampleMod.MY_BLOCK, class_1921.method_23581()); +        // 如果方块一些部分是透明的(例如玻璃、树苗、门): 
-         // 如果半透明纹理,可以将`class_1921.method_23581()` 替换为 `class_1921.method_23583()`。+        BlockRenderLayerMap.INSTANCE.putBlock(TutorialBlocks.MY_BLOCK, class_1921.method_23581()); 
 +         
 +        // 如果方块一些部分是半透明的(例如冰、染色玻璃、传送门): 
 +        BlockRenderLayerMap.INSTANCE.putBlock(TutorialBlocks.MY_BLOCK, class_1921.method_23583());
     }     }
 } }
 </yarncode> </yarncode>
  
-您可能还想使方块透明。为此,可在方块设置中使用 ''<yarn method_22488>'' 方法。+您可能还想使方块非不透明。为此,可在方块设置中使用 ''<yarn method_22488>'' 方法,这也会使方块内部也渲染 
 <yarncode java> <yarncode java>
-     public static final Block MY_BLOCK = new Block(FabricBlockSettings.of(...).method_22488());+     public static final Block MY_BLOCK = new Block(AbstractBlock.Settings.create().method_22488());
 </yarncode> </yarncode>
 +
 如果你不像这样把方块标记为非不透明的,则方块后面的面不会渲染,你将会“看穿”整个世界(到虚空或渲染范围之外之类的)。 如果你不像这样把方块标记为非不透明的,则方块后面的面不会渲染,你将会“看穿”整个世界(到虚空或渲染范围之外之类的)。
 +
 +确保在 [[documentation:fabric_mod_json|fabric.mod.json]] 中添加了客户端入口点,你可以这样做:
 +<code javascript>
 +{
 +  [...]
 +  "entrypoints": {
 +    "main": [
 +      "net.fabricmc.example.ExampleMod"
 +    ],
 +    "client": [
 +      "net.fabricmc.example.ExampleModClient"
 +    ]
 +  },
 +  [...]
 +}
 +</code>
 +注意:对于不透明但不完整的方块,你可能需要覆盖 ''<yarn method_9530>'' 方法并返回非完整的图形,以避免看穿整个世界。
  
 ===== 使方块不可见 ===== ===== 使方块不可见 =====
-首先,我们需要使该方块看起来不可见。 +首先,我们需要使该方块看起来不可见。为此,我们在方块类中重写 ''<yarn method_9604>'' 并返回 ''<yarn class_2464>.<yarn field_11455>'': 
-为此,我们在方块类中重写''getRenderType''并返回''BlockRenderType.INVISIBLE'': +<yarncode java>
-<code 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> 
-然后,我们需要通过使其''outlineShape''不存在使我们的方块不能被选中。 + 
-因此,覆盖''getOutlineShape''并返回一个空的''VoxelShape'': +然后,我们需要通过使其形状不存在,从而使方块不能被选中。因此,覆盖 ''<yarn method_9530>'' 并返回一个空的 ''<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>
zh_cn/tutorial/blockappearance.1671157166.txt.gz · Last modified: 2022/12/16 02:19 by solidblock