UID82897性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-7-23最后登录1970-1-1
| 本帖最后由 Cat_Anchor 于 2024-11-9 22:52 编辑
前言 | 上期,我们成功向附加包中添加了方块,了解了方块组件。这一期,我们将类比学习物品组件地学习方块组件。 | | 组件列表 | geometry 模型组件:指定方块的模型。
这个组件可以决定方块的模型(形状)、骨骼可见性(模型的一部分是否可见)、剔除面设置和渲染设置。
方块模型存储在资源包根目录下的models文件夹下的blocks文件夹下,后缀是.geo.json。
剔除面设置存储在资源包根目录下的block_culling文件夹下的 JSON 文件中。
渲染设置可以控制方块在物品栏UI里、玩家头上、第一人称左手上、第一人称右手上、第三人称左手上、第三人称右手上、作为物品漂浮在地面上和物品展示框中的大小、旋转和缩放。- "minecraft:geometry": {
- "identifier": "geometry.custom_block",
- "bone_visibility": {
- "bone_name": "q.block_state('complementary:lit_bit')"
- },
- "culling": "complementary:test_cull",
- "item_display_transforms": {
- "gui": {
- "translation": [0, 0, 0],
- "rotation": [30, 225, 0],
- "scale": [0.625, 0.625, 0.625],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0],
- "fit_to_frame": true
- },
- "firstperson_righthand": {
- "translation": [0, 0, 0],
- "rotation": [0, 45, 0],
- "scale": [0.4, 0.4, 0.4],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "firstperson_lefthand": {
- "translation": [0, 0, 0],
- "rotation": [0, -135, 0],
- "scale": [0.4, 0.4, 0.4],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "thirdperson_righthand": {
- "translation": [0, 2.5, 0],
- "rotation": [75, 45, 0],
- "scale": [0.375, 0.375, 0.375],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "thirdperson_lefthand": {
- "translation": [0, 2.5, 0],
- "rotation": [75, 45, 0],
- "scale": [0.375, 0.375, 0.375],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "ground": {
- "translation": [0, 3.0, 0],
- "rotation": [0, 0, 0],
- "scale": [0.25, 0.25, 0.25],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "fixed": {
- "translation": [0, 0, 0],
- "rotation": [0, 0, 0],
- "scale": [0.5, 0.5, 0.5],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- },
- "head": {
- "translation": [0, 0, 0],
- "rotation": [0, 0, 0],
- "scale": [1, 1, 1],
- "rotation_pivot": [0, 0, 0],
- "scale_pivot": [0, 0, 0]
- }
- }
- }
复制代码字段 | 功能描述 | 类型 | identifier | 方块模型ID。也可以填写原版ID,见下。 | 字符串 | bone_visibility | 骨骼可见性。其中的键(如 bone_name)填写骨骼名称,值是条件。可以有很多个这样的键值对。 | 对象 | culling | 方块剔除规则的ID。 | 字符串 | item_display_transforms | 在不同情况下方块的渲染。 | 对象 | gui | 在物品栏或快捷栏中时。 | 对象 | firstperson_righthand | 第一人称右手时。 | 对象 | firstperson_lefthand | 第一人称左手时。 | 对象 | thirdperson_righthand | 第三人称右手时。 | 对象 | thirdperson_lefthand | 第三人称左手时。 | 对象 | ground | 作为物品在地面漂浮时。 | 对象 | fixed | 在物品展示框中时。 | 对象 | head | 戴在玩家头部时。 | 对象 | translation | 平移,其中数值的范围是[-80.0, 80.0]。 | 数组 | rotation | 旋转,其中数值的范围是[-360.0, 360.0]。 | 数组 | scale | 缩放,其中数值的范围是[0.0, 4.0]。 | 数组 | rotation_pivot | 旋转枢轴点,其中数值的范围是[-80.0, 80.0]。 | 数组 | scale_pivot | 缩放枢轴点,其中数值的范围是[-80.0, 80.0]。 | 数组 | fit_to_frame | 是否缩放到物品栏中单个物品的边框(此字段没有在官方文档中提到,可能无效)。 | 布尔值 | 所有原版ID:
minecraft:geometry.full_block 就是一个完整的方块,于1.20.60.23版本添加,取代了minecraft:unit_cube组件。添加后,方块不再被视为固体,也没有相邻面剔除效果。
minecraft:geometry.cross 类似于草丛或滴水石锥的交叉模型,使用时需要指定渲染方法为 alpha_test,否则模型从特定方向上不可见。
骨骼可见性中,条件的值可以是true(默认,渲染),false(不渲染),Molang表达式(根据情况决定渲不渲染)。
Molang表达式被限制了上下文,目前已知只能用q.block_state这个函数查询方块状态。还能用数学符号及函数,但不能使用会生成随机数的函数,例如math.random。 |
material_instances 材质实例组件:指定方块的渲染设置。
如果使用半透明或透明纹理,那些纹理在游戏内会默认显示不透明的颜色,可以更改渲染方法来解决这个问题。这个组件指定了一个方块的纹理、渲染方法、渲染面等等设置。
这个组件与minecraft:geometry一起用时可以修改纹理,但单独用时不能修改纹理,只能指定渲染方法等。
如果与定义模型的组件一起用,blocks.json中指定的纹理会被这里指定的纹理覆盖,也就是说,这个方块在blocks.json中的texture字段会被忽略。- "minecraft:material_instances": {
- "*": {
- "texture": "atlas_texture",
- "ambient_occlusion": false,
- "face_dimming": false,
- "render_method": "alpha_test"
- },
- "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 | 渲染方法。所有渲染方法及其效果见下。 | 字符串 | face_dimming | 是否应该因其所面向的方向而变暗。 | 布尔值 | ambient_occlusion | 在被光照射时是否应该有环境光遮蔽(方块周围和下面的阴影)。填写浮点数时,控制照明后应用于AO值的指数,此时需要“即将到来的创作者功能”实验性玩法。 | 布尔值或浮点数 | 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_single_sided:这个渲染方法虽然好像目前(基岩版1.20)还没有什么记载,却是真实存在的。与alpha_test大体相同,但它启用背面剔除,这会导致你在同一时间同一地点内最多只能看到它的3个面。背对你的方块面,或者与使用同样渲染方法的方块相邻的面,将被剔除(也就是移除掉,不渲染)。这种方块的渲染距离是实际渲染距离的一半。
blend:允许不透明、半透明和完全透明纹理。它启用背面剔除。但是这个渲染方法目前(基岩版1.20)有bug,它会将渲染的纹理置于所有要渲染的半透明纹理的最底层。这实际上是由材料决定的,与实际纹理的透明情况无关。也就是说,即使你的纹理是不透明的,只要使用这个渲染方法,你就可以透过这种方块看到下雨的粒子等等,这让它看起来十分奇怪。它不能作为红石导体,怪物也不会在它上面生成,在它内部的玩家也不会窒息。这种方块的渲染距离是实际渲染距离的一半。
性能排名(越靠前越消耗性能,应尽量避免使用)如下: blend > alpha_test > alpha_test_single_sided > double_sided > opaque |
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。 | 浮点数 |
|
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组件以获取这个字段的信息。 | 对象 |
|
map_color 地图颜色组件:指定方块在地图上的颜色。
有这个组件的方块摆在地上,显示在地图里时会显示给出的颜色值。如果没有这个组件,会显示为透明,也就是显示这个方块下面的方块的地图颜色。
这个有两种写法,可以这么写。- "minecraft:map_color": "#FFFFFF"
复制代码
还可以这么写。- "minecraft:map_color": [
- 255,
- 255,
- 255
- ]
复制代码字段 | 功能描述 | 类型 | minecraft:map_color | 填写字符串时,需要十六进制颜色值,#红红绿绿蓝蓝。例如 (255, 255, 255) 转换成十六进制就是#FFFFFF(纯白色)。填写数组时,分别填写红色、绿色和蓝色分量。 | 字符串或数组 |
|
selection_box 判定箱组件:指定方块的判定箱。
指定方块的判定箱,就是你必须瞄准方块的哪里才能打到方块。- "minecraft:selection_box": {
- "enabled": true,
- "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)的格式。 | 数组 | enabled | 指定是否启用判定箱,1.18版本可用。 | 布尔值 | 判定箱不能超出 16*16*16 的方块大小限制,即使指定minecraft:transformation组件中的平移字段也不行,判定箱会被截断到限制边缘。 |
collision_box 碰撞箱组件:指定方块的碰撞箱。
指定方块的碰撞箱,就是你可以碰到方块的哪里。- "minecraft:collision_box": {
- "enabled": true,
- "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)的格式。 | 数组 | enabled | 指定是否启用碰撞箱,1.18版本可用。 | 布尔值 | 碰撞箱不能超出 16*16*16 的方块大小限制,然而指定minecraft:transformation组件中的平移字段可以使碰撞箱突破限制。 |
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 | 挖掘所用时长,填写浮点数。这个数值越大,挖掘耗时越长。单位是秒。 | 浮点数 | item_specific_speeds | 特定物品对挖掘此方块的加速效果。 | 对象列表 | item | 指定加速挖掘的物品 ID。 | 字符串 | speed | 物品加速的速度。 | 浮点数 |
|
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,即可以向下传输。 | 布尔值 |
|
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.50+的格式版本和即将到来的创作者功能实验性玩法。 |
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数组里,表示这个配方可以用含有这个标签的工作台合成,只支持有序配方和无序配方。 |
custom_components 自定义组件:指定方块的自定义组件。
- "minecraft:custom_components": [
- "complementary:sapling"
- ]
复制代码字段 | 功能描述 | 类型 | minecraft:custom_components | 字符串列表 | 自定义组件的名称,可以有多个,方块排列覆盖时会完全覆盖。 |
|
tick 计划刻组件:指定方块如何触发计划刻。
- "minecraft:tick": {
- "interval_range": [
- 20,
- 20
- ],
- "looping": true
- }
复制代码字段 | 功能描述 | 类型 | interval_range | 在这个数组中的两个数字之间生成随机值,作为方块下一次触发计划刻的时间,以刻为单位。 | 数组 | looping | 是否循环触发计划刻。 | 布尔值 |
|
entity_fall_on 组件:指定实体摔落在方块上时触发脚本的最小距离。
这个组件必须用在一个至少有4个像素高的方块上才能生效。- "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:material_instances组件设置方块的纹理变种。(长期) 自定义方块音效。(长期) 添加“一个方块有多个碰撞箱”的功能。(长期) 进一步设置方块红石属性,如定义接收红石信号的反应/发出红石信号。 添加onBlockDestroyed触发器。(很久之后) 尝试添加beforeOnPlayerInteract触发器。 使方块可以含雪或含熔岩。 逐渐实现原版所有方块的数据驱动。 目前不会添加onBlockUpdate触发器,遇到了技术困难。 目前不会添加通过SAPI修改方块模型的功能。 绝对不会添加方块模型的polymesh。
注意:此段落所述功能已被移除,请使用脚本代替其功能。 然而,出于学习并理解旧版附加包的必要性,我保留了这个段落。
接下来是各种触发器组件,它们负责在某些条件下触发事件。所有的触发器组件都拥有"condition": ""(指定条件,填写Molang表达式)、"event": ""(指定要触发的事件,填写事件名称)和"target": ""(指定目标,填写self或other)键值对。以下将不对这些字段作出解释。
当实体摔落到方块上时触发事件:- "minecraft:on_fall_on": { //注:这个组件必须用在一个至少有4个像素高的方块上才能生效。
- "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": { //注:这个组件必须用在一个至少有4个像素高的方块上才能生效。
- "condition": "q.is_sneaking",
- "event": "test",
- "target": "self"
- }
复制代码 当实体走上方块时触发事件:- "minecraft:on_step_on": { //注:这个组件必须用在一个至少有4个像素高的方块上才能生效。
- "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" //事件名称
- }
- }
复制代码 | | 总结
|
这一期,我把所有方块组件罗列了一遍。下一期,我们不讲方块事件,而是先把模型讲了,因为这篇教程里多次提到了模型。下下期讲战利品表,然后再讲方块事件。
|
|
评分查看全部评分
|