伪方块
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
实验性功能
需要启用 Holiday Creator Features
来触发方块事件。
当你的方块需要实现Minecraft原生不支持的功能时,可以通过创建具有方块特征的实体来模拟实现。
创建碰撞箱
固体实体教程中介绍了四种创建碰撞箱的方式,涉及 runtime_identifiers
、方块和组件组合方案。
基础组件
以下组件是让实体模拟方块行为的关键配置。注意不要添加 "minecraft:physics": {}
组件,否则实体会受重力影响坠落或与水/岩浆等方块发生异常碰撞。
json
{
// 需要击退抗性来防止实体被击退
"minecraft:knockback_resistance": {
"value": 1
},
// 控制实体是否可被推动
"minecraft:pushable": {
"is_pushable": false,
"is_pushable_by_piston": true
},
// 设置实体可被推动的穿透距离
"minecraft:push_through": {
"value": 1
},
// 使实体无敌
"minecraft:damage_sensor": {
"triggers": [
{
"deals_damage": false,
"cause": "all"
}
]
}
}
实体旋转对齐
通过数学计算实现实体旋转对齐:
json
"rotation": [ 0, "-q.body_y_rotation + (Math.round(q.body_y_rotation / 90) * 90)", 0 ]
将此代码应用在模型动画的核心分组(包含其他所有分组的父级),确保X轴和Z轴旋转中心点为0以避免视觉错位。同时避免添加以下组件:
"minecraft:behavior.look_at_entity": {}
"minecraft:behavior.look_at_player": {}
"minecraft:behavior.look_at_target": {}
这些组件会改变目标Y轴旋转角度,导致模型异常位移。同时也不要添加行走类组件。
实体位置对齐
位置对齐的实现较为复杂,需分步操作:
- 在
minecraft:entity_spawned
事件中生成临时方块 - 通过指令生成虚拟实体
- 将虚拟实体转换为目标实体
json
// 原实体中的事件
"minecraft:entity_spawned": {
"add": {
"components_groups": [
"despawn" // 需要移除初始实体
]
},
"run_command": {
"command": [
"setblock ~~~ wiki:align"
]
}
}
json
// 原实体中的组件组
"component_groups": {
"despawn": {
"minecraft:despawn": {}
}
}
用于生成虚拟实体的对齐方块配置:
json
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:align"
},
"components": {
"minecraft:light_dampening": 0,
"minecraft:collision_box": false,
"minecraft:selection_box": false,
"minecraft:loot": "loot_tables/empty.json",
"minecraft:geometry": "geometry.empty",
"minecraft:material_instances": {
"*": {
"texture": "empty"
}
},
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 2
},
"minecraft:on_placed": {
"event": "wiki:event"
}
},
"events": {
"wiki:event": {
"run_command": {
"command": [
"setblock ~~~ air", // 移除临时方块
"summon wiki:dummy_align" // 生成虚拟实体
]
}
}
}
}
}
虚拟实体的转换配置:
json
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
"identifier": "wiki:dummy_align", // 虚拟实体用于避免触发原实体的生成事件
"is_spawnable": false,
"is_summonable": true,
"is_experimental": false
},
"component_groups": {
"transform": {
"minecraft:transformation": {
"into": "wiki:your_entity",
"delay": 0
}
}
},
"components": {
"minecraft:physics": {
"has_gravity": false
},
"minecraft:collision_box": {
"width": 0.1,
"height": 0.1
},
"minecraft:damage_sensor": {
"triggers": {
"cause": "all",
"deals_damage": false
}
}
},
"events": {
"minecraft:entity_spawned": {
"add": {
"component_groups": ["transform"]
}
}
}
}
}
裂纹纹理效果
为实体添加原生方块的破坏裂纹效果:
- 添加原版裂纹纹理(兼容材质包)
- 创建专用几何体
- 配置渲染控制器
json
"textures": {
"default": "textures/entity/your_texture",
"destroy_stage_0": "textures/environment/destroy_stage_0",
"destroy_stage_1": "textures/environment/destroy_stage_1",
"destroy_stage_2": "textures/environment/destroy_stage_2",
"destroy_stage_3": "textures/environment/destroy_stage_3",
"destroy_stage_4": "textures/environment/destroy_stage_4",
"destroy_stage_5": "textures/environment/destroy_stage_5",
"destroy_stage_6": "textures/environment/destroy_stage_6",
"destroy_stage_7": "textures/environment/destroy_stage_7",
"destroy_stage_8": "textures/environment/destroy_stage_8",
"destroy_stage_9": "textures/environment/destroy_stage_9"
}
创建防Z轴冲突的几何体:
json
"geometry": {
"default": "geometry.your_geometry",
"broken": "geometry.broken"
}
配置动态纹理渲染控制器:
json
"controller.render.broken": {
"arrays": {
"textures": {
"array.broken": [
"texture.destroy_stage_9",
"texture.destroy_stage_8",
"texture.destroy_stage_7",
"texture.destroy_stage_6",
"texture.destroy_stage_5",
"texture.destroy_stage_4",
"texture.destroy_stage_3",
"texture.destroy_stage_2",
"texture.destroy_stage_1",
"texture.destroy_stage_0",
"texture.normal"
]
}
},
"geometry": "Geometry.broken",
"materials": [
{
"*": "Material.default"
}
],
"textures": [
"array.broken[q.health * 1]" // 根据实体生命值调整参数:10生命值保持1倍,20生命值改为0.5,40生命值改为0.25...
]
}