UID82897性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-7-23最后登录1970-1-1
| 本帖最后由 Cat_Anchor 于 2025-11-14 20:54 编辑
前言 | | 上期,我们成功向附加包中添加了方块,了解了方块组件。这一期,我们将类比学习物品组件地学习方块组件。 |  | 组件列表 | geometry 模型组件:指定方块的模型。
这个组件可以决定方块的模型(形状)、骨骼可见性(模型的一部分是否可见)、剔除面设置和渲染设置。要让方块正确显示,则必须添加此组件和 minecraft:material_instances 组件。
方块模型存储在资源包根目录下的 models 文件夹下的 blocks 文件夹下,后缀是 .json。
剔除面设置存储在资源包根目录下的 block_culling 文件夹下的 JSON 文件中。
- "minecraft:geometry": {
- "identifier": "geometry.custom_block",
- "bone_visibility": {
- "bone_name": "q.block_state('complementary:lit_bit')"
- },
- "culling": "complementary:test_cull",
- "culling_layer": "minecraft:culling_layer.leaves",
- "uv_lock": false
- }
复制代码 或简写为:- "minecraft:geometry": "geometry.custom_block"
复制代码 此时值代表 identifier 的功能。| 字段 | 功能描述 | 类型 | | identifier | 方块模型ID。也可以填写原版ID,见下。 | 字符串 | | bone_visibility | 骨骼可见性。其中的键(如 bone_name)填写骨骼名称,值是条件。可以有很多个这样的键值对。 | 对象 | | culling | 方块剔除规则的 ID。 | 字符串 | | culling_layer | 方块剔除层的 ID。 | 字符串 | | uv_lock | 设为 true 时,minecraft:transformation 组件旋转模型时不会旋转纹理。加入于 1.21.90.21。 | 布尔值 | 所有原版ID:
minecraft:geometry.full_block 就是一个完整的方块,于 1.20.60.23 版本添加,取代了 minecraft:unit_cube 组件。添加后,方块不再被视为固体,也没有相邻面剔除效果。
minecraft:geometry.cross 类似于草丛或滴水石锥的交叉模型,有双面模型——如果指定渲染方法为 alpha_test,两个面的纹理会相互冲突,因此请使用 alpha_test_single_sided。
骨骼可见性中,条件的值可以是true(默认,渲染),false(不渲染),Molang表达式(根据情况决定渲不渲染)。
Molang表达式被限制了上下文,目前已知只能用q.block_state这个函数查询方块状态。还能用数学符号及函数,但不能使用会生成随机数的函数,例如math.random。
方块剔除规则可以控制方块的面是否渲染,而方块剔除层是一种管理是否应该渲染(或剔除)方块面的方法。使用 minecraft:culling_layer.undefined 时,这个方块不会导致相邻方块的面被剔除;使用 minecraft:culling_layer.leaves 时,会有类似于原版树叶的效果。可以在这里自定义新的剔除层 ID,这个 ID 可以没有命名空间,但最好指定一个命名空间,例如 complementary:culling_layer.test。方块剔除层功能要求格式版本大于等于 1.21.80。
方块带有此组件时,无论使用了什么模型(包括原版的 minecraft:geometry.full_block),它都不会遮挡光,除非使用 minecraft:light_dampening 组件单独设置。 |
material_instances 材质实例组件:指定方块的渲染设置。
如果使用半透明或透明纹理,那些纹理在游戏内会默认显示不透明的颜色,可以更改渲染方法来解决这个问题。这个组件指定了一个方块的纹理、渲染方法、渲染面等等设置。
这个组件必须与minecraft:geometry一起使用。- "minecraft:material_instances": {
- "*": {
- "texture": "atlas_texture",
- "render_method": "alpha_test",
- "tint_method": "water",
- "ambient_occlusion": 1.0,
- "face_dimming": false,
- "isotropic": true,
- "alpha_masked_tint": false
- },
- "custom_sides": {
- "texture": "side_texture"
- },
- "up": {
- "texture": "top_texture"
- },
- "down": {
- "texture": "bottom_texture"
- },
- "north": "custom_sides",
- "south": "custom_sides",
- "east": "custom_sides",
- "west": "custom_sides"
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:material_instances | 可以在其中填写多个键值对。键决定材质实例设置应用的对象,值是具体的设置。键可以填写逐面UV模型中某一面的UV设置中的material_instance字段,也可以填写在这里定义好的材质实例名称。 | 对象 | | * | 将材质实例设置应用到任意模型,而且指定了破坏方块时的纹理。 | 对象 | | texture | 纹理短名。 | 字符串 | | render_method | 渲染方法。所有渲染方法及其效果见下。 | 字符串 | | tint_method | 染色方法。此字段添加于 1.21.70.24。所有染色方法见下。 | 字符串 | | face_dimming | 是否应该因其所面向的方向而变暗。 | 布尔值 | | ambient_occlusion | 在被光照射时环境光遮蔽(方块周围和下面的阴影)的强度,即照明后应用于AO值的指数。 | 浮点数 | | isotropic | 方块纹理是否根据方块位置随机旋转。 | 布尔值 | | alpha_masked_tint | 设为 true 时,纹理的 alpha 通道(不透明度通道)将用于将着色与纹理相乘混合。需要:render_method 为 opaque,tint_method 不为 none,format_version ≥ 1.21.120 和“即将到来的创作者功能”实验性玩法。 | 布尔值 | | custom_sides | 一个材质实例的名称。这里的custom_sides可以是任意字符串。现在custom_sides可以被其他同级字段使用。 | 对象 | | north | 使用指定的材质实例名称。north是内置的方向,即北方,同理有其他 5 个方向。 | 字符串 | 以下是所有可用的渲染方法:
opaque:只允许不透明纹理。透明纹理将失去它的 alpha 图层,一般会导致它完全变黑(#000000)。它启用背面剔除,这会导致在同一时间同一地点内最多只能看到它的 3 个面。背对你的方块面,或者与使用同样渲染方法的方块相邻的面,将被剔除(也就是移除掉,不渲染)。它可以作为红石导体被强充能,怪物会在它上面生成,在它内部的玩家会窒息。
double_sided:与opaque大体相同,但它禁用背面剔除,导致能直接看到它的 6 个面(虽然这通常不可能,除非位于方块内部)。不论什么条件,不论与什么方块相邻,它的每个面总是都在渲染,因此比较消耗性能。这种方块的渲染距离是实际渲染距离的一半,例如,如果设置 16 个区块的渲染距离,那么这个方块只有在8个区块内才能看见。
alpha_test:允许不透明和完全透明,不允许半透明纹理。透明度高于 50% 的半透明像素将失去它的 alpha 图层,其余的半透明像素会被当做完全透明处理。与空气、有除 minecraft:geometry.full_block 以外的模型的方块或使用 blend 渲染方法的方块相邻时,它禁用背面剔除,导致你能直接看到它的6个面(通过透明像素看到方块内部面)。它不能作为红石导体,怪物也不会在它上面生成,在它内部的玩家也不会窒息。这种方块的渲染距离是实际渲染距离的一半。
alpha_test_to_opaque:类似于 alpha_test,但在远处渲染时会更换渲染方法为 opaque,而不是直接不渲染方块。加入于 1.21.80.25。
alpha_test_single_sided:与 alpha_test 大体相同,但它启用背面剔除,这会导致你在同一时间同一地点内最多只能看到它的3个面。背对你的方块面,或者与使用同样渲染方法的方块相邻的面,将被剔除(也就是移除掉,不渲染)。这种方块的渲染距离是实际渲染距离的一半。
alpha_test_single_sided_to_opaque:类似于 alpha_test_single_sided,但在远处渲染时会更换渲染方法为 opaque,而不是直接不渲染方块。加入于 1.21.80.25。
blend:允许不透明、半透明和完全透明纹理。它启用背面剔除。但是这个渲染方法目前(基岩版1.21.100)有 bug,它会将渲染的纹理置于所有要渲染的半透明纹理的最底层。这实际上是由材料决定的,与实际纹理的透明情况无关。也就是说,即使你的纹理是不透明的,只要使用这个渲染方法,你就可以透过这种方块看到下雨的粒子等等,这让它看起来十分奇怪。它不能作为红石导体,怪物也不会在它上面生成,在它内部的玩家也不会窒息。这种方块的渲染距离是实际渲染距离的一半。
blend_to_opaque:类似于 blend,但在远处渲染时会更换渲染方法为 opaque,而不是直接不渲染方块。加入于 1.21.80.25。
性能排名(越靠前越消耗性能,应尽量避免使用)如下: blend > blend_to_opaque > alpha_test > alpha_test_to_opaque > alpha_test_single_sided > alpha_test_single_sided_to_opaque > double_sided > opaque
以下是所有的染色方法:| 值 | 解释 | | none | 不染色 | | default_foliage | 树叶染色 | | birch_foliage | 桦树树叶染色 | | evergreen_foliage | 常绿树叶染色 | | dry_foliage | 枯草丛染色 | | grass | 草地染色 | | water | 水染色 |
|
transformation 变换组件:变换方块的模型。
这个组件用于平移、旋转或缩放方块。必须与minecraft:geometry组件一起使用。平移、旋转或缩放之后的模型还是有以前的限制(例如模型的最大尺寸是30*30,立方体不能超过这个限制等)。
当这个组件与模型minecraft:geometry.full_block(默认方块模型)一起使用时,不能使用平移或缩放字段,仅能以90度为单位旋转。- "minecraft:transformation": {
- "translation": [0.0, 0.125, -0.125],
- "scale": [0.5, 0.1, 0.5],
- "scale_pivot": [0.2, 0.2, 0.2],
- "rotation": [0, 90, 90],
- "rotation_pivot": [0, 0.25, -0.25]
- }
复制代码| 字段 | 功能描述 | 类型 | | translation | 平移的距离,以一个方块为1.0,例如一个像素长是0.0625。 | 浮点数 | | scale | 缩放的大小,以一个方块为1.0。 | 浮点数 | | scale_pivot | 指定缩放时要沿着哪个点缩放。 | 浮点数 | | rotation | 指定旋转的角度,必须是90的倍数,例如0, 90, -90, 180, -180, 270, -270, 等等。 | 整数 | | rotation_pivot | 指定旋转时要沿着哪个点旋转,以一个方块为1.0,例如4个像素长是0.25。 | 浮点数 |
|
random_offset 随机偏移组件:随机偏移方块的模型、判定箱和碰撞箱。
加入于 1.21.90.23,需要格式版本大于等于 1.21.90。- "minecraft:random_offset": {
- "x": {
- "range": {
- "min": -0.5,
- "max": 0.5
- },
- "steps": 0
- },
- "y": {
- "range": {
- "min": 0,
- "max": 1
- },
- "steps": 0
- },
- "z": {
- "range": {
- "min": -0.5,
- "max": 0.5
- },
- "steps": 0
- }
- }
复制代码| 字段 | 功能描述 | 类型 | | x | 在 X 轴上偏移的距离,单位是像素。下面的 y 和 z 字段同此。 | 浮点数 | | x/range/min | 在 X 轴上偏移距离的最小值,单位是像素。 | 浮点数 | | x/range/max | 在 X 轴上偏移距离的最大值,单位是像素。 | 浮点数 | | x/steps | 在 X 轴上偏移距离的步长,单位是像素。填写 0 将允许范围内的所有值。 | 浮点数 |
|
item_visual 物品外观组件:修改方块作为物品时的外观。
这个组件用于修改方块对应物品的外观。它是minecraft:geometry和minecraft:material_instances组件的总和,拥有这两个组件有的字段。必须与minecraft:geometry组件和minecraft:material_instances组件一起使用。- "minecraft:item_visual": {
- "geometry": {},
- "material_instances": {}
- }
复制代码| 字段 | 功能描述 | 类型 | | geometry | 请参阅minecraft:geometry组件以获取这个字段的信息。 | 对象 | | material_instances | 请参阅minecraft:material_instances组件以获取这个字段的信息。 | 对象 |
|
embedded_visual 嵌入外观组件:修改方块被嵌入另一方块时的外观。
此组件仅在方块有 minecraft:flower_pottable 组件时,才可以发挥作用。这个组件用于修改方块被嵌入另一个方块(例如放入花盆中)的外观。它是minecraft:geometry和minecraft:material_instances组件的总和,拥有这两个组件有的字段。仅能在 components 字段中定义该组件,不能在 permutations 中定义该组件。加入于 1.21.110.25,需要“即将到来的创作者功能”实验性玩法。- "minecraft:embedded_visual": {
- "geometry": {},
- "material_instances": {}
- }
复制代码| 字段 | 功能描述 | 类型 | | geometry | 请参阅minecraft:geometry组件以获取这个字段的信息。 | 对象 | | material_instances | 请参阅minecraft:material_instances组件以获取这个字段的信息。 | 对象 |
|
leashable 拴绳桩组件:指定方块接收拴绳的连接。
加入于 1.21.130.27,需要“即将到来的创作者功能”实验性玩法。- "minecraft:leashable": {
- "offset": {}
- }
复制代码| 字段 | 功能描述 | 类型 | | offset | 拴绳结的偏移向量。 | 对象 |
|
map_color 地图颜色组件:指定方块在地图上的颜色和染色规则。
有这个组件的方块摆在地上,显示在地图里时会显示给出的颜色值。如果没有这个组件,会显示为透明,也就是显示这个方块下面的方块的地图颜色。
也可以指定方块的染色规则,就是树叶、草地等等使用的染色系统。
完整写法如下,可以这么写。- "minecraft:map_color": {
- "color": "#FFFFFF",
- "tint_method": "none"
- }
复制代码
还可以这么写。- "minecraft:map_color": {
- "color": [
- 255,
- 255,
- 255
- ],
- "tint_method": "none"
- }
复制代码
为简略起见,可以这么写。- "minecraft:map_color": "#FFFFFF"
复制代码
还可以这么写。- "minecraft:map_color": [
- 255,
- 255,
- 255
- ]
复制代码| 字段 | 功能描述 | 类型 | | minecraft:map_color | 使用简略写法(不染色方块)时,此字段语法和功能与 color 字段相同。 | 字符串或数组或对象 | | color | 填写字符串时,需要十六进制颜色值,#红红绿绿蓝蓝。例如 (255, 255, 255) 转换成十六进制就是#FFFFFF(纯白色)。填写数组时,分别填写红色、绿色和蓝色分量。 | 字符串或数组 | | tint_method | 染色的方法,可用值见下。 | 字符串 |
所有可用的染色方法:
| 值 | 解释 | | none | 不染色 | | default_foliage | 树叶染色 | | birch_foliage | 桦树树叶染色 | | evergreen_foliage | 常绿树叶染色 | | grass | 草地染色 | | water | 水染色 |
|
flower_pottable 可放入花盆组件:指定方块是否能放入花盆。
如果这个组件出现在一个方块的定义文件中,那么此方块可以被放进花盆中。加入于 1.21.110.25,需要“即将到来的创作者功能”实验性玩法。
- "minecraft:flower_pottable": {}
复制代码 |
replaceable 可取代组件:指定方块是否能被另一个方块取代。
如果这个组件出现在一个方块的定义文件中,那么尝试向这个方块表面放置方块时,要放置的方块会直接取代原本的方块。
- "minecraft:replaceable": {}
复制代码 |
movable 移动属性组件:指定方块是否能被活塞推动或拉动。
指定方块如何与活塞交互。加入于 1.21.90.26。- "minecraft:movable": {
- "movement_type": "push_pull",
- "sticky": "same"
- }
复制代码| 字段 | 功能描述 | 类型 | | movement_type | 方块与活塞交互时的反应。可用字段见下。 | 字符串 | | sticky | 可选,指定方块有黏液块的效果。填写 same 时,使方块在与活塞交互方面有蜂蜜块的效果。填写 none 时,关闭此效果。仅在 movement_type 设为 push_pull 时有效。 | 字符串 | movement_type 可以使用的字段及解释:
push_pull - 方块可以被活塞或黏性活塞推动,也可以被黏性活塞拉动。
push - 方块可以被活塞或黏性活塞推动,不能被黏性活塞拉动。
immovable - 方块不能被活塞或黏性活塞推动,也不能被黏性活塞拉动。
popped - 方块会被活塞或黏性活塞的推动破坏。
|
selection_box 判定箱组件:指定方块的判定箱。
指定方块的判定箱,就是必须瞄准方块的哪里才能选择到方块。- "minecraft:selection_box": {
- "origin": [-8.0, 0.0, -8.0],
- "size": [16.0, 16.0, 16.0]
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:selection_box | 填写对象时,根据对象提供的值设置判定箱。填写true时,使用默认的判定箱(整个方块)。填写false时,方块没有判定箱,玩家选择不到方块。 | 对象或布尔值 | | origin | 判定箱的起始点,按照(x, y, z)的格式。 | 数组 | | size | 判定箱的大小,按照(x, y, z)的格式。 | 数组 | 判定箱不能超出 16*16*16 的方块大小限制,即使指定minecraft:transformation组件中的平移字段也不行,判定箱会被截断到限制边缘。 |
collision_box 碰撞箱组件:指定方块的碰撞箱。
指定方块的碰撞箱,就是实体可以碰到方块的哪里。- "minecraft:collision_box": {
- "origin": [-8.0, 0.0, -8.0],
- "size": [16.0, 16.0, 16.0]
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:collision_box | 填写对象时,根据对象提供的值设置碰撞箱。填写true时,使用默认的碰撞箱(整个方块)。填写false时,方块没有碰撞箱,使方块可以被穿过。 | 对象或布尔值 | | origin | 碰撞箱的起始点,按照 [x, y, z] 的格式。其中的数值是浮点数。 | 数组 | | size | 碰撞箱的大小,按照 [x, y, z] 的格式。其中的数值是浮点数。 | 数组 | 碰撞箱不能超出 16 * 24 * 16 的大小限制,也就是一个方块加上一个半砖的限制。也可以用数组为一个方块指定多部分的碰撞箱:- "minecraft:collision_box": [
- {
- "origin": [-8.0, 0.0, -8.0],
- "size": [16.0, 2.0, 16.0]
- },
- {
- "origin": [-8.0, 14.0, -8.0],
- "size": [16.0, 2.0, 16.0]
- }
- ]
复制代码 |
connection_rule 连接规则组件:指定方块的连接规则。
需要与 minecraft:connections 方块特征一起使用。- "minecraft:connection_rule": {
- "accepts_connections_from": "only_fences"
- }
复制代码| 字段 | 功能描述 | 类型 | | accepts_connections_from | 接受的连接类型。 | 字符串 |
|
destructible_by_mining 挖掘破坏组件:指定方块的硬度和合适挖掘工具。
指定方块的硬度以及挖掘时间。- "minecraft:destructible_by_mining": {
- "seconds_to_destroy": 10.0,
- "item_specific_speeds": [
- {
- "item": "minecraft:diamond_pickaxe",
- "speed": 7.0
- }
- ]
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:destructible_by_mining | 对象表示详细的挖掘设置,true表示方块可以被瞬间破坏(挖掘耗时为0.05秒),false表示不可被挖掘破坏(相当于基岩)。 | 对象或布尔值 | | seconds_to_destroy | 注意,此字段的名称属于误导,这实际上指定方块的硬度,填写浮点数。这个数值越大,挖掘耗时越长。基础情况下,挖掘耗时是 1.5 倍的硬度。 | 浮点数 | | item_specific_speeds | 特定物品对挖掘此方块的加速效果。 | 对象列表 | | item | 指定加速挖掘的物品 ID 或物品描述符(可用于指定一类相同标签的物品)。 | 字符串或对象 | | speed | 注意,此字段的名称属于误导。这实际上使用此物品挖掘时,方块的硬度。 | 浮点数 |
|
destruction_particles 破坏粒子组件:指定方块的破坏粒子。
指定方块的破坏粒子,即方块被破坏时出现的粒子纹理和相应的染色方法,还有粒子的数量。- "minecraft:destruction_particles": {
- "texture": "my_particles_texture",
- "tint_method": "grass",
- "particle_count": 100
- }
复制代码| 字段 | 功能描述 | 类型 | | texture | 破坏粒子的纹理短名。 | 字符串 | | tint_method | 可选,对纹理使用的染色方法。所有染色方法详见minecraft:material_instances组件。 | 字符串 | | particle_count | 可选,破坏粒子的数量。最大可设置为 255。加入于 1.21.90.21。 | 整数 | 注:此组件添加于1.21.70.25,仅在1.21.70及以上的格式版本适用。 |
destructible_by_explosion 爆炸破坏组件:指定方块的爆炸抗性。
指定方块能否被爆炸破坏和方块的爆炸抗性。- "minecraft:destructible_by_explosion": {
- "explosion_resistance": 5.0
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:destructible_by_explosion | 对象代表详细的爆炸破坏行为,true代表爆炸抗性为0,false代表不可被爆炸破坏。 | 对象或布尔值 | | explosion_resistance | 爆炸抗性。 | 浮点数 |
|
flammable 燃烧组件:指定方块的燃烧属性。
指定方块能否被烧毁,以及燃烧可能性和烧毁可能性。- "minecraft:flammable": {
- "catch_chance_modifier": 5,
- "destroy_chance_modifier": 20
- }
复制代码| 字段 | 功能描述 | 类型 | | minecraft:flammable | 对象代表详细的燃烧属性配置,true代表方块有木板的燃烧可能性和烧毁可能性,false代表方块不可燃烧。 | 对象或布尔值 | | catch_chance_modifier | 燃烧可能性。值等于0时,火焰不会传播到这个方块上。如果直接点燃这个方块,火会熄灭。值大于0时,火焰有几率传播到方块上。值越大越容易燃烧。 | 整数 | | destroy_chance_modifier | 烧毁可能性。值等于0且燃烧可能性大于0时,火焰会永远燃烧下去,同时方块不会被摧毁。值大于0时,火焰有可能烧毁这个方块。值等于0时,方块永远不会被烧毁。值越大,方块越容易被烧毁。 | 整数 |
|
light_emission 发光组件:指定方块的发光量。
- "minecraft:light_emission": 10
复制代码| 字段 | 功能描述 | 类型 | | minecraft:light_emission | 发光量。值越大,发光量越多。范围是[0, 15]。 | 整数 |
|
light_dampening 吸光组件:指定方块的吸光量。
- "minecraft:light_dampening": 10
复制代码| 字段 | 功能描述 | 类型 | | minecraft:light_dampening | 吸光量。值越大,吸光量越多。范围是[0, 15]。 | 整数 |
|
placement_filter 放置条件组件:指定方块可以被放在哪里。
- "minecraft:placement_filter": {
- "conditions": [
- {
- "allowed_faces": [
- "up",
- "down",
- "side"
- ],
- "block_filter": [
- "grass",
- {
- "tags": "q.any_tag('stone')"
- },
- {
- "name": "minecraft:planks",
- "states": {
- "wood_type": "jungle"
- }
- }
- ]
- }
- ]
- }
复制代码| 字段 | 功能描述 | 类型 | | conditions | 所有放置的条件。最多有64个条件。 | 对象列表 | | allowed_faces | 可以放置的面。最多有6个面。 | 字符串列表 | | block_filter | 可以放置在其表面的方块。最多有64个方块。可以直接写方块ID,也可以指定方块描述符。 | 字符串列表或对象列表 | | tags | 要检测的方块标签。 | 字符串 | | name | 方块ID。 | 字符串 | | states | 方块状态。 | 字符串 |
|
redstone_conductivity 红石连接性组件:指定方块的红石连接性属性。
- "minecraft:redstone_conductivity": {
- "redstone_conductor": false,
- "allows_wire_to_step_down": true
- }
复制代码| 字段 | 功能描述 | 类型 | | redstone_conductor | 方块是否为红石导体,即是否可以被强充能,默认为false,即不是红石导体。 | 布尔值 | | allows_wire_to_step_down | 红石线是否可以沿此方块向下传输红石能量,默认为true,即可以向下传输。 | 布尔值 | 注:指定 allows_wire_to_step_down 字段为 false 后,无论 redstone_conductor 值为何,方块都不再是红石导体。 |
redstone_consumer 红石消耗者组件:指定方块的红石消耗属性。
指定方块为接收红石能量并作出反应的红石元件。- "minecraft:redstone_consumer": {
- "min_power": 10,
- "propogates_power": true
- }
复制代码| 字段 | 功能描述 | 类型 | | min_power | 激活方块所需要的输入信号强度的最小值,默认为 0。 | 整数 | | propogates_power | 红石信号是否可以通过该方块,默认为 false。 | 布尔值 | 加入于 1.21.130.27,目前不可用于方块排列之中。 |
redstone_producer 红石能量源组件:指定方块为红石能量源,发出红石信号。
- "minecraft:redstone_producer": {
- "power": 15,
- "strongly_powered_face": [
- "up"
- ],
- "connected_face": [
- "up",
- "down"
- ],
- "transform_relative": true
- }
复制代码| 字段 | 功能描述 | 类型 | | power | 方块发出的红石能量的等级。需要是 [0, 15] 的整数。 | 整数 | | strongly_powered_face | 指定方块强充能周围哪些方向的方块。一般来说,此方块本身会激活与它接触的红石元件,而强充能的方块也会起到这个作用。默认为空。 | 数组 | | connected_face | 指定方块可以激活周围哪些方向的红石元件。若省略不写,则可以激活周围全部红石元件。默认为所有方向。 | 数组 | | transform_relative | 以上两种方向是否随着方块的旋转而旋转,默认为 false。 | 布尔值 | 加入于 1.21.110.25。 |
precipitation_interactions 降水交互组件:指定方块如何与降水交互。
- "minecraft:precipitation_interactions": {
- "precipitation_behavior": "obstruct_rain"
- }
复制代码| 字段 | 功能描述 | 类型 | | precipitation_behavior | 方块与降水交互的方式,可用字段见下。降水包括下雨和下雪。 | 字符串 |
precipitation_behavior 的可用字段与解释:
obstruct_rain - 方块会阻挡雨的落下,雪层不会在方块上形成和积累。
obstruct_rain_accumulate_snow - 方块会阻挡雨的落下,也会导致雪层在方块上形成和积累。这是默认值。
none - 方块没有上述两种行为,即方块既不会阻挡雨,又不能积累雪层。
可能加入于 1.21.120.21,需要“即将到来的创作者功能”实验性玩法,但更新日志中没有提到。正式加入于 1.21.120.22。 |
support 支撑组件:指定方块的支撑形状。
- "minecraft:support": {
- "shape": "stair"
- }
复制代码| 字段 | 功能描述 | 类型 | | shape | 方块的支撑形状,可以是 stair,也可以是 fence。 | 字符串 |
注:如果使用 stair 支撑形状,则需要使用相应的方块特征制作楼梯。
加入于 1.21.130.20,需要“即将到来的创作者功能”实验性玩法。 |
liquid_detection 液体检测组件:指定方块与液体的交互。
这个组件用于修改方块的液体检测属性,例如是否可以含水,是否会挡住水,以及是否会被水破坏等。- "minecraft:liquid_detection": {
- "detection_rules": [
- {
- "liquid_type": "water",
- "can_contain_liquid": true,
- "on_liquid_touches": "no_reaction",
- "stops_liquid_flowing_from_direction": []
- }
- ]
- }
复制代码| 字段 | 功能描述 | 类型 | | detection_rules | 方块与液体的交互规则。每个液体类型只允许一个规则,如果指定了多个,将使用第一个,其余的将被忽略。 | 对象列表 | | liquid_type | 规则适用的液体类型,目前只能填写 water。可选,默认值为 water。 | 字符串 | | can_contain_liquid | 方块是否能包含液体。例如,如果liquid_type是water,那么指定方块是否能含水。 | 布尔值 | | on_liquid_touches | 液体流过时方块的行为。可选,默认为blocking。 | 字符串 | | stops_liquid_flowing_from_direction | 阻止液体流经方块的面的列表。如果列表为空,允许液体流入或流出方块。 | 字符串列表 | on_liquid_touches 字段的所有可选值和解释如下。
blocking:方块阻止液体流过。
broken:液体使方块直接消失。
popped:液体摧毁方块,方块掉落为物品。
no_reaction:液体流经方块而方块没有任何反应。
需要1.21.60+的格式版本。 |
loot 战利品组件:指定方块被破坏时掉落的战利品表。
- "minecraft:loot": "loot_tables/custom_loot.json"
复制代码| 字段 | 功能描述 | 类型 | | minecraft:loot | 战利品表。路径最多256字节。 | 字符串 |
|
friction 摩擦组件:指定方块的摩擦力。
- "minecraft:friction": 0.4
复制代码| 字段 | 功能描述 | 类型 | | minecraft:friction | 值越大,摩擦力越大。一般方块的摩擦力是0.4。范围是[0.1, 0.9]。 | 浮点数 |
|
crafting_table 工作台组件:指定方块为工作台。
指定方块拥有工作台的能力。- "minecraft:crafting_table": {
- "crafting_tags": [
- "crafting_table",
- "custom_crafting_tag"
- ],
- "table_name": ""
- }
复制代码| 字段 | 功能描述 | 类型 | | crafting_tags | 合成标签,最多64个标签,每个标签最多64字节。 | 字符串列表 | | table_name | 本地化字符串,需要在.lang语言文件里表示出来。例如这里写“ui.custom_crafting”,需要在.lang文件里写“ui.custom_crafting=自定义工作台”。 | 字符串 | 原版工作台标签是 crafting_table。自定义标签可以写到自定义配方的crafting_tag数组里,表示这个配方可以用含有这个标签的工作台合成,只支持有序配方和无序配方。 |
tick 计划刻组件:指定方块如何触发计划刻。
- "minecraft:tick": {
- "interval_range": [
- 20,
- 20
- ],
- "looping": true
- }
复制代码| 字段 | 功能描述 | 类型 | | interval_range | 在这个数组中的两个数字之间生成随机值,作为方块下一次触发计划刻的时间,以刻为单位。 | 数组 | | looping | 是否循环触发计划刻。 | 布尔值 |
|
entity_fall_on 组件:指定实体摔落在方块上时触发脚本的最小距离。
这个组件必须用在一个至少有 3.2 个像素高(因为这正好是 0.2 格,这被官方定义为某种分界线,如果你好奇为什么是这个数字的话)的方块上才能生效。- "minecraft:entity_fall_on": {
- "min_fall_distance": 0
- }
复制代码| 字段 | 功能描述 | 类型 | | min_fall_distance | 最小摔落距离。小于这个距离将不会触发脚本。 | 浮点数 |
|
以上就是所有可用的组件了。有可能会有遗漏,我会尽力补充。也可以给方块添加标签,标签和组件同级。标签应该是下面这样的。
- "tag:标签名字": {} //这里的标签名字最好使用命名空间ID。
复制代码
标签似乎没有现成的用途。
自定义方块的标签会被原版物品忽略。
添加特定的标签可能可以给这个方块一些原版方块拥有的功能,然而不确定这样的标签的存在。
目前还没有已知办法给自定义方块加上合成标签,使其被配方文档中的{"tag":"..."}识别。对于此功能,请创建方块物品。
以下是方块的开发计划,可能不准确或不会实现。 移除blocks.json。(正在逐步迁移它的功能) 发布自定义重力方块的教程文档。(目前无消息) 同步 Java 版的方块标签。(部分实现) 添加改变原版方块战利品表的功能。(短期) 使自定义组件可以传参,并使其看起来更像其他组件,很可能需要脚本v2.0.0。(2025 年)(已实现) 添加colormap对自定义方块的支持,例如树叶和草地颜色。(2025 年,中长期)(已实现) 添加数据驱动原版方块模型ID。原版方块模型可能用了一些硬编码功能,也将添加这些功能。(长期)(部分实现) 重新添加minecraft:unwalkable和minecraft:immovable这样的组件。(已加入 minecraft:movable minecraft:replaceable minecraft:flower_pottable minecraft:leashable 组件) 通过minecraft:material_instances组件设置方块的纹理变种。(长期)(已实现) 自定义方块音效。(长期) 添加“一个方块有多个碰撞箱”的功能。(长期)(已实现) 进一步设置方块红石属性,如定义接收红石信号的反应/发出红石信号。(已实现) 添加onBlockDestroyed触发器。(很久之后)(已实现) 尝试添加beforeOnPlayerInteract触发器。 使方块可以含雪或含熔岩。 逐渐实现原版所有方块的数据驱动。 目前不会添加onBlockUpdate触发器,遇到了技术困难。 目前不会添加通过SAPI修改方块模型的功能。 绝对不会添加方块模型的 polymesh。
注意:此段落所述功能已被移除,请使用脚本代替其功能。 然而,出于学习并理解旧版附加包的必要性,我保留了这个段落。
下面是一个曾经短暂可用,但由于自定义组件的扁平化而被弃用的组件。
custom_components 自定义组件:指定方块的自定义组件。
需要格式版本:1.21.10 - 1.21.70。
在 1.21.80 及以上的版本中,开启“自定义组件 V2”实验性玩法或功能正式实装后,由于自定义组件的扁平化,此组件被弃用。- "minecraft:custom_components": [
- "complementary:sapling"
- ]
复制代码| 字段 | 功能描述 | 类型 | | minecraft:custom_components | 字符串列表 | 自定义组件的名称,可以有多个,方块排列覆盖时会完全覆盖。 |
|
接下来是各种触发器组件,它们负责在某些条件下触发事件。所有的触发器组件都拥有"condition": ""(指定条件,填写Molang表达式)、"event": ""(指定要触发的事件,填写事件名称)和"target": ""(指定目标,填写self或other)键值对。以下将不对这些字段作出解释。
当实体摔落到方块上时触发事件:- "minecraft:on_fall_on": { //注:这个组件必须用在一个至少有 3.2 个像素高的方块上才能生效。
- "min_fall_distance": 0, //指定最小摔落距离。小于这个距离将不会触发事件。
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当玩家右键点击方块时触发事件:- "minecraft:on_interact": {
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当方块被放置时触发事件:- "minecraft:on_placed": {
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当方块被玩家放置时触发事件:- "minecraft:on_player_placing": {
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当方块被玩家破坏时触发事件(创造模式破坏不算数):- "minecraft:on_player_destroyed": {
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当实体从方块上走开时触发事件:- "minecraft:on_step_off": { //注:这个组件必须用在一个至少有 3.2 个像素高的方块上才能生效。
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当实体走上方块时触发事件:- "minecraft:on_step_on": { //注:这个组件必须用在一个至少有 3.2 个像素高的方块上才能生效。
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 还有两个特别的组件,分别是minecraft:random_ticking和minecraft:queued_ticking。这两个组件用于周期性地触发事件,前者基于随机刻,后者基于计划刻。
minecraft:random_ticking的代码如下。- "minecraft:random_ticking": {
- "on_tick": {
- "event": "update" //事件名称
- }
- }
复制代码 minecraft:queued_ticking的代码如下。- "minecraft:queued_ticking": {
- "interval_range": [ //范围,单位是刻。设置成一样的会导致固定在这个时间触发事件,设置成不一样的会导致在范围内随机选择时长,然后触发事件。
- 10, //0.5秒
- 30 //1.5秒
- ],
- "looping": true, //是否循环触发,默认为true(循环)。设置为false后不会循环。
- "on_tick": {
- "event": "update" //事件名称
- }
- }
复制代码 |  | 总结
| | 这一期,我把所有方块组件罗列了一遍。下一期,我们不讲方块事件,而是先把模型讲了,因为这篇教程里多次提到了模型。下下期讲战利品表,然后再讲方块事件。 |
|
评分查看全部评分
|