附加包教程:11.方块(二)
本帖最后由 Cat_Anchor 于 2026-6-13 10:43 编辑前言
上期,我们成功向附加包中添加了方块,了解了方块组件。这一期,我们将类比学习物品组件地学习方块组件。
https://klpbbs.com/static/image/hrline/line5.png
组件列表
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",
"culling_shape": "minecraft:empty",
"uv_lock": false,
"n_way_visual_rotation": {
"y": "minecraft:sixteen_way_rotation"
}
}或简写为:"minecraft:geometry": "geometry.custom_block"此时值代表 identifier 的功能。字段功能描述类型
identifier方块模型ID。也可以填写原版ID,见下。字符串
bone_visibility骨骼可见性。其中的键(如 bone_name)填写骨骼名称,值是条件。可以有很多个这样的键值对。对象
culling方块剔除规则的 ID。字符串
culling_layer方块剔除层的 ID。字符串
culling_shape方块剔除体素形状的 ID。字符串
uv_lock设为 true 时,minecraft:transformation 组件旋转模型时不会旋转纹理。加入于 1.21.90.21。设为数组时,在其中指定模型的骨骼名称,会使那些骨骼的纹理锁定。布尔值或字符串数组
n_way_visual_rotation方块的视觉旋转。对象
n_way_visual_rotation/y方块在 Y 轴上的视觉旋转。值代表方块状态的名称,方块状态的可用值数量代表可能的旋转角度数量。单位旋转角度是 360 / 旋转角度数量。例如一个带有 16 种状态的 minecraft:sixteen_way_rotation 会导致方块可以沿着 16 种方向放置,就像告示牌那样。这种旋转是视觉的,不影响实际玩法。其他两个坐标轴同理。字符串
所有原版ID:
minecraft:geometry.full_block 相对于 而言,修复了方块底面 UV 旋转错误的问题。
minecraft:geometry.full_block_v1 完整方块,于 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。
culling_shape 指定用于剔除相邻方块面的体素形状。体素形状与剔除规则一起工作,如果没有为方块定义剔除规则,体素形状就没有作用。只有带有体素形状的相邻方块才会使用该形状遮挡。使用 minecraft:geometry.full_block 的方块会忽略自定义形状。原版内置了两个体素形状:minecraft:empty 和 minecraft:unit_cube。
方块带有此组件时,无论使用了什么模型(包括原版的 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 值的指数。范围是 。对于发光方块,可以设为 0.0。浮点数
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": ,
"scale": ,
"scale_pivot": ,
"rotation": ,
"rotation_pivot":
}字段功能描述类型
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。浮点数数组
block_entity方块实体组件:定义方块的方块实体。
"minecraft:block_entity": {
"dynamic_properties": true
}字段功能描述类型
dynamic_properties设为 true 时,可以通过脚本向方块中存储最多 1 KiB 的动态属性数据。布尔值
instrument_sound乐器组件:指定方块为音符盒提供的乐器。
"minecraft:instrument_sound": {
"up": "note.harp",
"down": "note.none"
}字段功能描述类型
up方块上方的音符盒使用的乐器。布尔值
down方块下方的音符盒使用的乐器。布尔值
音符盒会优先使用它上方的方块指定的乐器,即 down 字段。
乐器不能自定义。所有可用乐器如下:
note.banjo note.bassattack note.bd note.bell note.bit note.chime note.cow_bell note.creeper note.didgeridoo note.enderdragon note.flute note.guitar note.harp note.hat note.iron_xylophone note.none note.piglin note.pling note.skeleton note.snare note.trumpet note.trumpet_exposed note.trumpet_weathered note.trumpet_oxidized note.witherskeleton note.xylophone note.zombie
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常青树叶染色
dry_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":
}字段功能描述类型
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":
}字段功能描述类型
minecraft:collision_box填写对象时,根据对象提供的值设置碰撞箱。填写 true 或空数组时,使用默认的碰撞箱(整个方块)。填写 false 时,方块没有碰撞箱,使方块可以被穿过。数组或对象或布尔值
origin碰撞箱的起始点,按照 的格式。其中的数值是浮点数。浮点数数组
size碰撞箱的大小,按照 的格式。其中的数值是浮点数。浮点数数组
碰撞箱不能超出 16 * 24 * 16 的大小限制,也就是一个方块加上一个半砖的限制。也可以用数组为一个方块指定多部分的碰撞箱:"minecraft:collision_box": [
{
"origin": [-8.0, 0.0, -8.0],
"size":
},
{
"origin": [-8.0, 14.0, -8.0],
"size":
}
]最多能指定 16 个元素,也就是碰撞箱的 16 个部分。
connection_rule连接规则组件:指定方块的连接规则。
需要与 minecraft:connections 方块特征一起使用。"minecraft:connection_rule": {
"accepts_connections_from": "only_fences",
"enabled_directions": [
"north",
"south",
"west",
"east"
]
}字段功能描述类型
accepts_connections_from接受的连接类型。字符串
enabled_directions可以连接的方向。默认为全部方向。字符串数组accepts_connections_from 的可用字段与解释:
all:默认值。方块可以与其他所有方块连接。
only_fences:方块仅能与栅栏连接。
none:方块不能与其他任何方块连接。
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": {
"lava_flammable": "always",
"catch_chance_modifier": 5,
"destroy_chance_modifier": 20
}字段功能描述类型
minecraft:flammable对象代表详细的燃烧属性配置,true 代表方块有木板的燃烧可能性和烧毁可能性,false 代表方块不可燃烧。对象或布尔值
lava_flammable方块是否可以被熔岩点燃,默认 never 即不可以,always 代表可以。字符串
catch_chance_modifier燃烧可能性。值等于0时,火焰不会传播到这个方块上。如果直接点燃这个方块,火会熄灭。值大于0时,火焰有几率传播到方块上。值越大越容易燃烧。整数
destroy_chance_modifier烧毁可能性。值等于 0 且燃烧可能性大于 0 时,火焰会永远燃烧下去,同时方块不会被摧毁。值大于 0 时,火焰有可能烧毁这个方块。值等于 0 时,方块永远不会被烧毁。值越大,方块越容易被烧毁。整数
light_emission发光组件:指定方块的发光量。
"minecraft:light_emission": 10字段功能描述类型
minecraft:light_emission发光量。值越大,发光量越多。范围是 。整数
light_dampening吸光组件:指定方块的吸光量。
"minecraft:light_dampening": 10字段功能描述类型
minecraft:light_dampening吸光量。值越大,吸光量越多。范围是 。整数
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,
"propagates_power": true
}字段功能描述类型
min_power激活方块所需要的输入信号强度的最小值,默认为 0。整数
propagates_power红石信号是否可以通过该方块,默认为 false。布尔值加入于 1.21.130.27,目前不可用于方块排列之中。
注意:在格式版本为 1.21.130 时,propagates_power 曾被错误地拼写为 propogates_power。在 1.26.0,此拼写错误被修正。
redstone_producer红石能量源组件:指定方块为红石能量源,发出红石信号。
"minecraft:redstone_producer": {
"power": 15,
"strongly_powered_face": [
"up"
],
"connected_face": [
"up",
"down"
],
"transform_relative": true
}字段功能描述类型
power方块发出的红石能量的等级。需要是 的整数。整数
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 - 方块没有上述两种行为,即方块既不会阻挡雨,又不能积累雪层。
snowlogging - 方块可以含雪。方块需要没有碰撞箱才能使用此选项。
可能加入于 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,
"use_liquid_clipping": true,
"on_liquid_touches": "no_reaction",
"stops_liquid_flowing_from_direction": []
}
]
}字段功能描述类型
detection_rules方块与液体的交互规则。每个液体类型只允许一个规则,如果指定了多个,将使用第一个,其余的将被忽略。对象列表
liquid_type规则适用的液体类型,目前只能填写 water。可选,默认值为 water。字符串
can_contain_liquid方块是否能包含液体。例如,如果 liquid_type 是 water,那么指定方块是否能含水。布尔值
use_liquid_clipping方块中包含的液体是否基于方块的包围碰撞箱被视觉上裁切。布尔值
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。范围是 。浮点数
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 数组里,表示这个配方可以用含有这个标签的工作台合成,只支持有序配方和无序配方。
chest_obstruction箱子阻挡组件:指定方块阻挡箱子打开的能力。
"minecraft:chest_obstruction": {
"obstruction_rule": "never"
}字段功能描述类型
obstruction_rule阻挡的规则,always 总是阻挡,never 不阻挡,shape 根据方块碰撞箱决定是否阻挡。字符串
tags标签组件:指定方块的标签。
指定方块的标签。"minecraft:tags": [
"minecraft:wood",
"complementary:test"
]字段功能描述类型
minecraft:tags方块的全部标签。字符串数组
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" //事件名称
}
}
https://klpbbs.com/static/image/hrline/line1.png
总结
这一期,我把所有方块组件罗列了一遍。下一期,我们不讲方块事件,而是先把模型讲了,因为这篇教程里多次提到了模型。下下期讲战利品表,然后再讲方块事件。
第十期 第十一期 第十二期 minecraft:embedded_visual组件到底怎么写才能放进花盆,我写的没报错,但就是不能放进花盆 阿巴无影 发表于 2023-1-12 19:22
这里错了
感谢反馈,已改正 这里错了 感谢苦力怕论坛
页: [1]