# 自定义方块Demo详解
# 概要
示例Demo中的CustomBlockDemo包含客户端Mod
客户端Mod自定义了四种方块:
custom:custom_block_squirrel
使用了自定义松鼠模型的方块
custom:my_block1
破坏时间为10s的自定义方块
custom:my_block2
自发光方块,发光强度为1.0
custom:my_block3
四面向方块,根据玩家摆放方向不同而不同
# 开发流程
自定义方块1-3
参照自定义方块实体概述 、自定义方块Json组件,增加对应方块定义、Json组件
使用原生Spigot命令,获取带SkullOwner的头颅
``` /give @s minecraft:skull 64 3 {SkullOwner: { "Name" : "geyser_custom_block_custom:my_block1"}} /give @s minecraft:skull 64 3 {SkullOwner: { "Name" : "geyser_custom_block_custom:my_block2"}} /give @s minecraft:skull 64 3 {SkullOwner: { "Name" : "geyser_custom_block_custom:my_block3"}} ```
- 最终效果如下:
自定义松鼠方块
参照自定义方块实体外观,定义方块实体、动画controller、动画、骨骼模型、贴图等
需要注意的是,基于头颅换皮的情况下,方块本身即带有服务端方块实体。若加上netease:block_entity字段,则同时会生成客户端方块实体;不加netease:block_entity字段则无客户端方块实体。
``` "netease:block_entity": { "tick": true, // 无效字段,可以不填 "movable": false // 无效字段,可以不填 }, ```
- 使用Spigot原生命令
``` /give @s minecraft:skull 64 3 {SkullOwner: { "Name" : "geyser_custom_block_custom:custom_block_squirrel"}} ```
- 最终效果如下:
# 目前支持组件详解
Q: netease:aabb 组件在使用上有没有限制?
A: 由于方块实际上为头颅换皮,因此目前netease:aabb设置值应大于头颅的aabb,否则会出现服务端客户端不一致的挖掘表现,头颅aabb具体为
{ "netease:aabb": { "collision": { "min": [0.25, 0.0, 0.25], "max": [0.75, 0.5, 0.75] }, "clip": { "min": [0.25, 0.0, 0.25], "max": [0.75, 0.5, 0.75] } } }
PS:另外需要注意的是,在apollo2.0中collision和clip均为必须字段,缺少时Geyser会报错!
Q: netease:face_directional 组件在使用上有没有限制?
A: 由于头颅方块并没有细致到上下朝向的区分,因此目前组件只支持四方向类型,即只支持 type: "direction"
Q:netease:block_entity使用时有什么需要注意的地方?
A:对于Apollo2.0来说,服务端本身就自带了Skull方块实体,而只需要有这个组件即可保证客户端同时生成方块实体。
由于子字段中的 tick 、 moveable 为服务端逻辑,在Apollo2.0中为无效字段,需要自行通过Spigot插件的方式,修改Skull方块实体进行兼容。
tick 、 moveable 为无效字段可以理解成不配置相应字段也不会出现问题
Q:minecraft:destory_time使用时有什么需要注意的地方吗?
A:目前destory_time 可以设置方块所需的挖掘时间,由于服务端仍然是头颅 destory_time设置小于原生头颅时,会出现挖掘纹理和挖掘时间不一致问题。
因此,不建议destory_time值小于 1.5