文档托管解决方案

11.方块(二)

前言

上期,我们成功向附加包中添加了方块,了解了方块组件。这一期,我们将类比学习物品组件地学习方块组件。

1. 组件列表

geometry

模型组件:指定方块的模型

  • 决定方块的模型、骨骼可见性、剔除面设置和渲染设置
  • 必须与minecraft:material_instances组件配合使用
  • 模型路径:resource_pack/models/blocks/*.geo.json
"minecraft:geometry": {
  "identifier": "geometry.custom_block",
  "bone_visibility": {
    "bone_name": "q.block_state('complementary:lit_bit')"
  },
  "culling": "complementary:test_cull"
}
字段功能描述类型
identifier方块模型ID字符串
bone_visibility骨骼可见性设置对象
culling剔除规则ID字符串

原版模型ID

  • minecraft:geometry.full_block (替代unit_cube)
  • minecraft:geometry.cross (交叉模型)

material_instances

材质实例组件:指定方块的渲染设置

"minecraft:material_instances": {
  "*": {
    "texture": "atlas_texture",
    "render_method": "alpha_test"
  },
  "up": { "texture": "top_texture" }
}
参数说明类型
texture纹理短名字符串
render_method渲染方法字符串
ambient_occlusion环境光遮蔽强度浮点数

渲染方法性能排序
blend > alpha_test > double_sided > opaque


transformation

变换组件:变换方块的模型

"minecraft:transformation": {
  "translation": [0.0, 0.125, -0.125],
  "scale": [0.5, 0.1, 0.5],
  "rotation": [0, 90, 90]
}
字段功能描述类型
translation平移距离(单位:方块)浮点数组
scale缩放比例浮点数组
rotation旋转角度(90的倍数)整数数组

⚠️ 使用minecraft:geometry.full_block时:

  • 禁止使用平移/缩放
  • 仅支持90度整数倍旋转

item_visual

物品外观组件

"minecraft:item_visual": {
  "geometry": "geometry.custom_item",
  "material_instances": {
    "*": { "texture": "item_texture" }
  }
}
字段对应组件描述
geometrygeometry物品模型设置
material_instancesmaterial_instances物品材质设置

map_color

地图颜色组件

// 完整写法
"minecraft:map_color": {
  "color": "#FF5733",
  "tint_method": "grass"
}

// 简写
"minecraft:map_color": "#FF5733"
格式示例说明
十六进制#RRGGBB直接定义颜色
染色方法"grass"使用生态染色

可用染色方法

  • grass(草地)
  • water(水域)
  • default_foliage(默认植被)

selection_box

判定箱组件

"minecraft:selection_box": {
  "origin": [-8, 0, -8],
  "size": [16, 16, 16]
}
参数单位限制
origin像素(1/16方块)[-8, -8, -8] 到 [8, 8, 8]
size像素总尺寸 ≤16

collision_box

碰撞箱组件

"minecraft:collision_box": {
  "origin": [0, 0, 0],
  "size": [16, 16, 16]
}

特殊特性

  • 允许通过transformation突破尺寸限制
  • 与流体交互时优先使用碰撞箱

destructible_by_mining

挖掘属性组件

"minecraft:destructible_by_mining": {
  "seconds_to_destroy": 3.0,
  "item_specific_speeds": [
    {"item": "pickaxe", "speed": 5}
  ]
}
字段默认值说明
seconds_to_destroy0.05(瞬间破坏)基础挖掘时间
item_specific_speeds工具加速倍率

flammable

燃烧属性组件

"minecraft:flammable": {
  "catch_chance_modifier": 30,
  "destroy_chance_modifier": 20
}
参数效果范围
catch_chance_modifier引燃概率0-100
destroy_chance_modifier烧毁概率0-100

light_emission

发光组件

"minecraft:light_emission": 15
值域效果
0无光源
15最大亮度

crafting_table

工作台组件

"minecraft:crafting_table": {
  "crafting_tags": ["custom_table"],
  "table_name": "ui.custom_workbench"
}
字段本地化要求用途
table_name需在.lang文件定义界面显示名称

tick

计划刻组件

"minecraft:tick": {
  "interval_range": [20, 40],
  "looping": true
}

时间计算

  • 1秒 = 20 ticks
  • 随机范围示例:1-2秒触发

custom_components

自定义组件

"minecraft:custom_components": [
  "custom:growth_stage"
]

开发说明

  • 需配合脚本使用
  • 命名建议使用命名空间
  • 可堆叠多个组件

entity_fall_on

坠落事件组件

"minecraft:entity_fall_on": {
  "min_fall_distance": 4
}

触发条件

  • 方块高度 ≥4像素(0.25方块)
  • 坠落距离 ≥设定值

    中场休息

    以上就是所有可用的组件了。有可能会有遗漏,我会尽力补充。也可以给方块添加标签,标签和组件同级。标签应该是下面这样的。

    "tag:标签名字": {} //这里的标签名字最好使用命名空间ID。

::: info
标签似乎没有现成的用途。

自定义方块的标签会被原版物品忽略。

添加特定的标签可能可以给这个方块一些原版方块拥有的功能,然而不确定这样的标签的存在。

目前还没有已知办法给自定义方块加上合成标签,使其被配方文档中的{"tag":"..."}识别。

对于此功能,请创建方块物品。
:::

以下是方块的开发计划,可能不准确或不会实现。

  • 移除blocks.json。
  • 发布自定义重力方块的教程文档。
  • 同步 Java 版的方块标签。
  • 添加改变原版方块战利品表的功能。(短期)
  • 使自定义组件可以传参,并使其看起来更像其他组件,很可能需要脚本v2.0.0。(2025 年)
  • 添加colormap对自定义方块的支持,例如树叶和草地颜色。(2025 年,中长期)
  • 添加数据驱动原版方块模型ID。原版方块模型可能用了一些硬编码功能,也将添加这些功能。(长期)
  • 重新添加minecraft:unwalkable和minecraft:immovable这样的组件。
  • 通过minecraft:material_instances组件设置方块的纹理变种。(长期)
  • 自定义方块音效。(长期)
  • 添加“一个方块有多个碰撞箱”的功能。(长期)
  • 进一步设置方块红石属性,如定义接收红石信号的反应/发出红石信号。
  • 添加onBlockDestroyed触发器。(很久之后)
  • 尝试添加beforeOnPlayerInteract触发器。
  • 使方块可以含雪或含熔岩。
  • 逐渐实现原版所有方块的数据驱动。
  • 目前不会添加onBlockUpdate触发器,遇到了技术困难。
  • 目前不会添加通过SAPI修改方块模型的功能。
  • 绝对不会添加方块模型的polymesh。

2.触发器组件

::: danger
注意:此段落所述功能已被移除,请使用脚本代替其功能。
然而,出于学习并理解旧版附加包的必要性,我保留了这个段落。
:::

on_fall_on

坠落事件触发器

"minecraft:on_fall_on": {
  "min_fall_distance": 4,
  "condition": "q.is_sneaking",
  "event": "trigger_fall",
  "target": "self"
}
字段必填说明
min_fall_distance最小触发高度(单位:方块)
conditionMolang条件表达式
event事件名称(需在事件表中定义)
target目标对象(self/other)

实现要求

  • 方块高度 ≥4像素(0.25方块)
  • 需配合minecraft:entity_fall_on组件使用

on_interact

交互事件触发器

"minecraft:on_interact": {
  "condition": "q.has_item('minecraft:stick')", 
  "event": "activate_lever",
  "target": "other"
}

典型应用场景

  • 开关类方块(拉杆/按钮)
  • 可交互道具(工作台/熔炉)

on_placed

放置事件触发器

"minecraft:on_placed": {
  "event": "init_block_data",
  "target": "self"
}

应用案例

  • 初始化方块NBT数据
  • 触发连锁放置事件

random_ticking

随机刻触发器

"minecraft:random_ticking": {
  "on_tick": {
    "event": "grow_plant" 
  }
}

特性

  • 平均每1-60秒触发一次
  • 适用于自然生长类逻辑

queued_ticking

计划刻触发器

"minecraft:queued_ticking": {
  "interval_range": [20, 40],
  "looping": false,
  "on_tick": {
    "event": "countdown_explode"
  }
}
参数单位说明
interval_rangetick[最小值, 最大值]
looping-是否循环执行

应用场景

  • 倒计时爆炸(TNT)
  • 阶段性状态变化

    总结

    这一期,我把所有方块组件罗列了一遍。下一期,我们不讲方块事件,而是先把模型讲了,因为这篇教程里多次提到了模型。下下期讲战利品表,然后再讲方块事件

目录导航

更多文档