# 了解方块实体外观

在行为包定义了方块实体的组件之后,我们还可以在客户端定义方块实体所使用的客户端实体。

# 定义实体及其外观

我们像第八章中讲的实体那样制作一个客户端实体定义文件,包括实体的各种资源,然后将其准备在资源包中。为了让实体挂接在方块实体上,我们需要修改资源包根目录下的blocks.json文件。

{
  "format_version": [ 1, 1, 0 ],
  ///...
  "customblocks:custom_block_entity": {
    "sound": "grass",
     // 可与netease_model字段一起使用,定义方块的方块模型
    "netease_model": "customblocks:customblocks_model_decoration",
     // --- 实体模型配置 ---
     // 这个方块实体将会使用到实体模型
    "client_entity": {
       // 对应custom_block_entity.entity.json里面的identifier
      "identifier": "customblocks:custom_block_entity",
       // 这个方块实体的手持模型或掉落时模型是否使用该实体模型。
      "hand_model_use_client_entity": true, 
       // 这个方块实体的物品icon贴图
      "block_icon": "test_block_icon", 
       // 方块实体被破坏时使用的贴图
      "destoryed_textures":"destroy_entity" 
    },
  },
  ///...
}

这是一个示例的方块实体的实体挂接定义。我们可以看到,client_entity字段将负责将实体挂接到方块上。

  • identifier:字符串,实体的标识符,需要与实体的客户端定义中标识符相一致。
  • hand_model_use_client_entity:可选,布尔值,玩家的手持模型和该方块的掉落物模型是否适用实体的模型,若为false,则仅仅在方块被放置在世界中时使用实体的模型,其余情况(手持和掉落物)使用netease_model定义的模型或原版的方块形状。
  • block_icon:可选,字符串,方块在物品栏中作为物品时的图标纹理的短名称。事实上,由于游戏机制,物品的图标并不能渲染一个实体,因而对于方块来说只能渲染一个平面图标、按照微软方块形状渲染或按照自定义的方块模型渲染。如果这里没有定义,则会自动渲染netease_model定义的方块模型或原版方块形状作为图标。短名称在资源包的纹理图集定义文件textures/terrain_texture.json中定义。
  • destoryed_textures:可选,字符串,方块破坏粒子的纹理短名称。方块被破坏时会产生旧版粒子(介绍见第二章)中的terrain粒子,而terrain粒子会从方块的地形图集(定义见第十章)中指定UV处选取纹理作为其贴图。这里可以通过更改地形图集中的短名称来变相地指定产生的terrain粒子的纹理UV。若未定义,则自动依次检测block_icon字段中定义的纹理、netease_model字段中定义的模型中定义的纹理、textures字段中定义的纹理的存在性并使用最先检测到的那个。该字段的短名称也在资源包的纹理图集定义文件textures/terrain_texture.json中定义。

至此,我们便定义好了方块实体对应的实体,而方块实体的包括模型在内的各种资源将交由该实体来进行控制,这样,我们便可以将我们的方块玩出更多的“花样”。

# 连接模组SDK

方块实体的服务端实体定义完成后,我们又多出了很多接口来对接这个实体。与上一节中的接口不同的是,针对于方块实体的实体部分的接口全都位于客户端。这也很容易理解,毕竟这是在代表客户端的资源包中定义的实体。

接口 所属端 用处
SetBlockEntityModelPosOffset 客户端 设置自定义方块实体的实体模型的位置偏移。
SetBlockEntityModelRotation 客户端 设置自定义方块实体的实体模型在各个轴上的旋转。
SetBlockEntityModelScale 客户端 设置自定义方块实体的实体模型的尺度。
SetEnableBlockEntityAnimations 客户端 设置是否开启自定义方块实体的动画。
SetBlockEntityMolangValue 客户端 设置自定义方块实体的Molang变量的值。
GetBlockEntityMolangValue 客户端 获取自定义方块实体的Molang变量的值。