Files
netease-bedrock-wiki/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md
2025-09-26 17:47:57 +08:00

30 KiB
Raw Blame History

front, hard, time
front hard time
入门 分钟

JSON组件

format_version

基岩版自定义方块的json结构曾经过多次调整当填写format_version时需要按照对应版本的json结构编写components。

例如minecraft:destroy_time在1.10.0中为

"minecraft:destroy_time": {
    "value": 4.0
}

而在1.16.0的版本中为

"minecraft:destroy_time": 4.0

而在1.19.20以上的版本中为

"minecraft:destructible_by_mining": {
    "seconds_to_destroy": 4.0
}

description

类型 默认值 解释
identifier str 包括命名空间及物品名。需要全局唯一。建议使用mod名称作为命名空间
register_to_create_menu bool false 是否注册到创造栏
category str Nature 注册到创造栏的分类,可选的值有:
Construction
Nature
Equipment
Items

components

目前行为包中自定义方块json中支持的component包括原版component和网易独有的component。minecraft开头的为原版componentnetease开头的为网易独有component。

对于原版component你可以在上方的format_version解释中找到更多的参数及解释。

minecraft:loot

可用于使用loot table控制掉落物

可参考CustomBlocksMod的customblocks:customblocks_test_ore方块

minecraft:friction

可用于设置方块的摩擦力,取值范围为(0.0-0.9)。注意此摩擦力和原版方块的摩擦力不是同一个摩擦力

minecraft:max_stack_size

可用于设置方块物品最大堆叠数量,注意该值不能超过64

minecraft:destroy_time

可用于控制挖掘所需的时间。该值的含义与官方wiki的“硬度”一致

主要用于挖掘的功能

minecraft:destructible_by_mining

可用于控制挖掘所需的时间。该值的含义与官方wiki的“硬度”一致

  • 如果设置为 true,方块会采用默认的破坏时间。
  • 如果设置为 false,方块将不可被挖掘破坏。
  • 如果省略该组件,则方块同样会使用默认的破坏时间。
  • 如果类型为object则是以下参数
类型 默认值 解释
seconds_to_destroy 浮点数 0.0 设置方块的硬度,实际破坏时间 = 1.5 × seconds_to_destroy。

此组件需要在format_version大于等于1.19.20的方块行为中代替minecraft:destroy_time使用。

主要用于挖掘的功能

minecraft:block_light_emission

可用于设置方块亮度,取值范围为[0, 1]。关于亮度及方块光源可参考官方wiki

主要用于亮度的功能

minecraft:light_emission

可用于设置方块亮度, 取值范围为[0, 15]。此组件需要在format_version大于等于1.19.20的方块行为中代替 minecraft:block_light_emission使用。 关于亮度及方块光源可参考官方wiki

主要用于亮度的功能

minecraft:explosion_resistance

可用于设置爆炸抗性。原版方块的爆炸抗性见官方wiki

minecraft:destructible_by_explosion

可用于控制挖掘所需的时间。该值的含义与官方wiki的“硬度”一致

  • 如果设置为 true,方块会采用默认的爆炸抗性。
  • 如果设置为 false,方块将不可被爆炸破坏。
  • 如果省略该组件,则方块同样会使用默认的爆炸抗性。
  • 如果类型为object则是以下参数
类型 默认值 解释
explosion_resistance 浮点数 0.0 设置方块的爆炸抗性,实际爆炸抗性 = 5 × explosion_resistance。

此组件需要在format_version大于等于1.19.20的方块行为中代替minecraft:explosion_resistance使用。

原版方块的爆炸抗性见官方wiki

minecraft:block_light_absorption

可用于设置方块的透光率。具体可参考官方wiki

默认为不透光。

主要用于亮度的功能

minecraft:light_dampening

可用于设置方块吸光程度, 取值范围为[0, 15]。此组件需要在 format_version大于等于1.19.20的方块行为中代替minecraft:block_light_absorption使用。 关于亮度及方块光源可参考官方wiki

主要用于亮度的功能

minecraft:map_color

可用于设置方块显示在地图上的颜色

minecraft:display_name

指定语言文件键,用于映射鼠标悬停在物品栏和快捷栏中的方块物品上时显示的文本。如果给定的字符串无法解析为本地字符串,则将显示给定的原始字符串。使用需要方块行为的 format_version大于等于1.19.60。

netease:tier

用于设置与挖掘相关的属性

主要用于挖掘的功能

类型 默认值 解释
digger string 必须设置。表示方块使用此工具挖掘时有速度加成。
可选的值有:
shovel
pickaxe
hatchet
hoe
destroy_special bool false 可选。当设置为true时表示只有使用digger设置的工具进行挖掘才会产生掉落物。
level int 0 可选。当destroy_special为true时才会生效。表示挖掘所需的工具等级若手持工具等级小于该值则不会产生掉落物。
原版工具的等级:
空手/其他非工具物品0
木制/金制工具0
石制工具1
铁制工具2
钻石工具3

netease:aabb

用于设置方块的碰撞盒

注意事项:

  1. 无碰撞箱的方块请将collision的每个项都设置为0
  2. 有碰撞箱的方块clip的范围需要小于或等于collision的范围否则弹射物命中时会异常
  3. aabb的min不要小于[-1, -1, -1]max不要大于[2, 2, 2]

可参考CustomBlocksMod的customblocks_model_flower及customblocks_model_wire方块。

类型 默认值 解释
collision object或array 计算与物体碰撞时用的碰撞盒
clip object或array 计算射线检测时用的碰撞盒。如准心选取及弹射物碰撞。那么当该AABB没有体积时准心与弹射物都会无视这个方块

当collision或clip为object时用于表示恒定大小的单一碰撞盒结构为

类型 默认值 解释
min array(float) [0, 0, 0] min的三个值必须小于等于max的三个值
max array(float) [1, 1, 1]

当collision或clip为array时用于可变化的多个碰撞盒的组合通常用于可变化的自定义方块模型。元素的结构为

类型 默认值 解释
enable molang true 控制是否开启该碰撞箱目前仅支持is_connect查询详见netease:connection
min array(float) [0, 0, 0] min的三个值必须小于等于max的三个值
max array(float) [1, 1, 1]

netease:face_directional

用于设置方块的多面向

主要用于多面向的功能

类型 默认值 解释
type string direction四面向方块facing_direction六面向方块

netease:fuel

可燃类物品组件。允许该方块物品作为燃料在熔炉中燃烧

类型 默认值 解释
duration float 0 可填, 该物品可提供的熔炉燃烧时长(秒)。

netease:render_layer

用于设置方块渲染时使用的材质

可参考CustomBlocksMod的customblocks:customblocks_model_flower方块。

类型 默认值 解释
value string 目前支持的材质有:
opaque不透明即“terrain_opaque”材质。默认为此项
alpha全透明即“terrain_alpha”材质如火焰该材质用于异形方块用在方块类上但与其他方块重合时会出现闪烁可以使用no_crop_face_block组件避免闪烁。
blend半透明即“terrain_blend”材质如彩色玻璃。
optionalAlpha局部透明与alpha不同alpha超过一定距离将不渲染而optionalAlpha不会能配合no_crop_face_block组件实现原版叶子效果。

netease:solid

用于设置方块是否为实心方块主要与生物在方块内时是否受到窒息伤害有关。

使用了这个组件,自定义方块将不会产生阴影。

可参考CustomBlocksMod的customblocks:customblocks_model_flower方块。

类型 默认值 解释
value bool true 为true时生物在方块内会受到窒息伤害为false时生物在方块内不会受到窒息伤害

netease:pathable

用于设置游戏内AI在进行寻路时方块是否被当作障碍物。

可参考CustomBlocksMod的customblocks:customblocks_model_flower方块。

类型 默认值 解释
value bool false 为true时寻路时被当作空气为false时寻路时被当作障碍物并且可在其上方行走

netease:block_entity

用于给自定义方块添加自定义方块实体

可参考CustomBlocksMod的customblocks:customblocks_test_block_entity方块。

类型 默认值 解释
tick bool false 为true时当玩家进入方块tick范围时该方块每秒会发送20次ServerBlockEntityTickEvent事件
为false时该方块不会发送ServerBlockEntityTickEvent事件
client_tick bool false 为true时当玩家进入方块tick范围时该方块每秒会发送20次ModBlockEntityTickClientEvent事件
为false时该方块不会发送ModBlockEntityTickClientEvent事件
movable bool true 为true时该方块可被粘性活塞拉回为false时该方块不可被粘性活塞拉回

netease:random_tick

用于给自定义方块定义是否可以随机tick并且设置该tick事件是否发送到脚本层。

类型 默认值 解释
enable bool false 方块是否随机tick
tick_to_script bool false 是否发送事件 BlockRandomTickServerEvent 到python脚本

netease:block_animate_random_tick

频率更高的方块tick用于实现类似樱花树叶的方块特效。给自定义方块配置该组件后开发者可以在客户端监听 BlockAnimateRandomTickEvent 事件给方块附加逻辑。

类型 默认值 解释
trigger_rate float 0.1 触发率
send_event bool true 触发BlockAnimateRandomTickEvent事件

该组件采用了和原版樱花树叶/末地烛相同的逻辑支持无需方块实体即可tick且性能开销低。不建议在事件里将数据传给服务端因为每个玩家客户端tick到的方块都是随机的可能相同也可能不同。

方块离玩家越近,触发频率越大当方块距离玩家16个方块以内时如果设置trigger_rate为1几乎每秒都能触发原版樱花树叶的触发率为0.1约等于总是10%的概率触发落叶。随着方块离玩家越远触发几率也会递减。最大触发距离为32-40格32是玩家静止不动时的值玩家移动时最多可能有8个方块距离的偏移。

设备性能越好,触发频率越大游戏引擎会记录帧耗时超时的tick不会触发Python事件避免大量方块同时tick导致卡顿。

netease:redstone_property

用于给自定义方块设置红石属性

类型 默认值 解释
value str None 目前只支持break_on_push设置之后方块可以被活塞破坏变成掉落物否则方块会被活塞推动而不破坏

netease:neighborchanged_sendto_script

类型 默认值 解释
value bool false 方块周围环境变化是否发送事件 BlockNeighborChangedServerEvent 到脚本层

netease:connection

用于给自定义方块定义“连接”属性

使用枚举的方式配置该方块与哪些方块具有“连接”属性,并且此属性是单向的。不支持附加值。

由于方块更新的特性,“床”和“旗帜”方块在区块边缘放置时,与其他方块会出现连接失败。

可参考CustomBlocksMod的customblocks_model_wire方块。

类型 解释
blocks array(string) 数组元素为方块的identifier

目前该属性只用于netease:aabb自定义方块模型的is_connect查询

名称 解释
query.is_connect 传入一个参数返回该方块与对应临面上的方块是否有connection属性参数取值与对应的面
0-down面
1-up面
2-north面
3-south面
4-west面
5-east面。

netease:redstone

用于配置自定义红石源与自定义红石机械元件;

可以配置自定义红石的类型,如红石源或者红石机械元件;

可以配置初始信号强度默认为15。

类型 默认值 说明
type str 红石类型:
producer红石源
consumer红石机械元件
strength int 15 红石信号值,范围[0,15]

netease:listen_block_remove

用于配置自定义方块是否监听方块的 BlockRemoveServerEvent 事件

类型 默认值 说明
value bool false 是否监听事件

netease:may_place_on

用于配置自定义方块可存在于哪些方块的上面。

会生效于玩家右键放置方块时;以及已存在的方块下方的方块发生改变时。

可参考CustomBlocksMod示例中的customblocks_model_flower

类型 默认值 说明
block list(str) 方块identifier的列表。这些方块的所有方块状态都可放置
block_state list(object) 方块状态的列表。每个元素只对应一个特定的方块状态如果方块有多个种类的状态需要考虑排列组合的所有情况最终可在上面放置的方块是block字段与block_state字段的并集
spawn_resources bool true 已存在的方块因下方的方块发生改变而被破坏时,是否生成掉落物

netease:fire_resistant

用于配置自定义方块是否防火。

设置为防火时,方块的掉落物会与下界合金一样,不会被火烧毁,掉进岩浆时会弹走。

可参考CustomBlocksMod示例中的customblocks_test_ore

类型 默认值 说明
value bool 是否防火

netease:block_properties

用于配置自定义方块的方块属性

这些方块属性可以叠加,主要用于引擎对一些方块特性逻辑的判断

可参考CustomBlocksMod示例中的customblocks_slime、customblocks_flower_extend

类型 默认值 说明
properties array 所有属性字符串

其中properties数组目前支持以下字符串填充

说明
piston_block_grabber 被活塞推动时是否带动旁边方块
slime 主要用于变为移动方块(例如被活塞推)时修改对实体力的计算
breaks_when_fallen_on_by_heavy 当重力方块结束下落在该方块位置后,自身是否被毁坏

如果方块碰撞盒体积使用netease:aabb或minecraft:entity_collision改小可能会导致无法触发目前可参考范围是边长0.4以下不会触发)。

netease:on_stand_on

用于触发实体站在方块上的事件

可参考CustomBlocksMod示例中的customblocks_slime利用了该事件组合做出了个模拟原版粘液块的效果。

类型 默认值 说明
send_python_event bool 是否发送事件至python

当send_python_event为true时该方块会触发OnStandOnBlockClientEvent、OnStandOnBlockServerEvent事件。

如果方块碰撞盒体积使用netease:aabb或minecraft:entity_collision改小可能会导致无法触发目前可参考范围是边长0.4以下不会触发)。

netease:on_before_fall_on

用于触发实体刚下落至方块的事件,主要用于伤害计算

可参考CustomBlocksMod示例中的customblocks_slime利用了该事件组合做出了个模拟原版粘液块的效果。

如果方块碰撞盒体积使用netease:aabb或minecraft:entity_collision改小可能会导致无法触发目前可参考范围是边长0.4以下不会触发)。

netease:on_after_fall_on

用于触发实体下落至方块后的事件,主要用于力的计算

可参考CustomBlocksMod示例中的customblocks_slime利用了该事件组合做出了个模拟原版粘液块的效果。

如果方块碰撞盒体积使用netease:aabb或minecraft:entity_collision改小可能会导致无法触发目前可参考范围是边长0.4以下不会触发)。

netease:on_entity_inside

用于触发实体碰撞盒所在位置有方块时的事件(判断位置逻辑有无方块,与方块碰撞盒大小无关)。

当send_python_event为true时该方块会触发OnEntityInsideBlockClientEvent、OnEntityInsideBlockServerEvent事件。

netease:on_step_on

用于触发实体刚移动至一个实心方块上的事件

可参考CustomBlocksMod示例中的customblocks_slime在触发该事件时进行了日志打印

netease:on_step_off

用于触发实体刚离开一个实心方块上的事件

可参考CustomBlocksMod示例中的customblocks_slime在触发该事件时进行了日志打印

netease:block_random_offset

用于设置方块的偏移,能实现原版花朵的偏移效果。

注意:制作可偏移方块时,请尽量配套使用方块模型,当使用贴图方块随机偏移时,若相邻方块是不透明方块,则该方块对应的面会被裁切渲染!!普通贴图方块的物品栏渲染也可能会有异常!!

该组件会把方块的材质设置为透明且不可与netease:render_layer的不透明材质一起共用否则会出现渲染错误

类型 默认值 解释
x_scope [float,float] [0,0] x轴方向的偏移范围size为2的array取值范围为0.0~1.0,如果两个值相同则为指定点
z_scope [float,float] [0,0] z轴方向的偏移范围size为2的array取值范围为0.0~1.0,如果两个值相同则为指定点

netease:block_chest

用于给方块添加箱子功能使用了该组件会创建一个block_entity方块会与其他block_entity逻辑有冲突请谨慎使用。

该组件会覆盖带有base_block及其相关组件的功能。

使用了这个组件后请勿再配置netease:face_directional。

使用SetBlockNew接口创建自定义箱子的时候需要先调用一次SetBlockNew将目标位置方块设置为Air再使用AddTimer延后调用SetBlockNew创建自定义箱子

类型 默认值 解释
custom_description str 箱子UI上面显示的箱子名称不填为空
chest_capacity int 必填箱子的容量行数取值范围1-8如果can_pair取值为true且该值大于4将自动变为4
can_pair bool false 是否可以与隔壁箱子组合,合成一个大箱子
is_shulker_box bool false 是否为潜影盒箱子,如果开启摧毁方块将不会掉落,与原版潜影盒功能相同,无法与隔壁箱子进行组合
mute bool true 是否关闭箱子开启与关闭时的音效
can_be_blocked bool false 是否能被阻挡,即箱子上面有阻挡的方块时能否打开箱子

netease:block_container

自定义容器组件使用时需要将base_block设为netease_container。相比netease:block_chest该组件支持使用资源包UI Json配置方块打开后的UI界面方便开发者制作自定义熔炉等界面而无需考虑复杂的交互逻辑数据同步逻辑等。

类型 默认值 解释
custom_description str 容器ui打开时的title复用原版ui时生效
screen_name str 交互方块时打开的ui形如namespace.screenName
container_size int 方块容器能够存放的物品槽位数量取值范围1-108需与ui槽位匹配。若ui槽位大于配置容量超过配置的部分无法放入物品若ui槽位小于配置容量按shift可放入但无法在ui中显示

netease:no_crop_face_block

该组件能实现当两个方块相邻时相邻面渲染其中一个方块的一面与原版2个叶子方块相邻效果一致不会把相邻面都裁剪掉

为了避免相邻面变黑需要在配置中新增minecraft:block_light_absorption组件并将值设置为0。

需要配合netease:render_layer使用使用 optionalAlpha 能实现原版的叶子方块效果,使用 alpha 超过一定距离后方块将不渲染。

该组件无参数直接在JSON按下面格式写即可调用

"components": {
   "netease:no_crop_face_block":{}
 }

netease:custom_tips

该组件用于自定义方块Item的物品信息描述与自定义物品中的 netease:customtips 作用相同

类型 默认值 解释
value str 物品名称 物品的描述信息