Bedrock Wiki
  • QQ
  • 原站
新手入门指南
  • Guide
    • 1. 简介
      指南
    • 2. 附加组件详解
    • 3. 软件与准备工作
    • 4. 项目设置
    • 5. 创建自定义物品
    • 6. 创建自定义实体
    • 7. Blockbench:建模、贴图与动画制作
    • 8. 添加战利品表、生成规则与合成配方
  • Extra
    • a. 理解JSON
    • b. 下载示例包
    • c. 故障排除
      帮助
    • d. 高级清单文件指南
    • e. 格式版本
    • f. Android 项目设置
JSON UI
  • General
    • JSON UI 入门指南
      指南
    • 最佳实践
      指南
  • Tutorials
    • Aseprite 动画
    • 保留标题文本
      中级
    • 修改服务器表单
      中级
    • 字符串与数字转换
      中级
    • 按钮与开关
      新手
    • 添加HUD界面元素
      新手
  • Documentation
    • JSON UI 文档
Meta
  • Style Guide
  • 使用JSON模式(Schemas)
  • 实用链接
  • 版本控制
  • 附加包性能优化
  • Q&A
    • GameTest 问答集 2021/08/06
    • 世界生成问答 2024/11/15
    • 延迟渲染技术预览问答 2024/02/23
    • 方块与物品问答 2024/08/30
    • 脚本与编辑器问答 2023/09/22
NBT
  • General
    • .mcstructure
  • Tutorials
    • 扩展结构限制
      简单
    • 教育版中的实验功能
      简单
  • NBT in Depth
    • NBT 库列表
      专家
    • NBT读取示例
      专家
    • 关于NBT(命名二进制标签)
      专家
世界生成
  • General
    • 世界生成入门
      指南
      实验性
    • 特性类型
      实验性
    • 生物群系
      指南
      实验性
  • Tutorials
    • 特征(Feature)的方块条件
      实验性
    • 生成地表区块
      实验性
    • 生成自定义矿石
      实验性
    • 生成自定义结构
      实验性
    • 高度图噪声地形
      实验性
  • Documentation
    • 生物群系标签
动画控制器
  • 动画控制器入门指南
    指南
  • 实体命令
    中级
  • AFK检测器
  • 将Molang变量转换为计分板数值
  • 死亡指令
  • 重生指令
命令
  • General
    • 命令方块入门指南
    • 函数
    • NBT 命令
    • 坐标系
    • 方块状态
    • 理解目标选择器
    • 记分板操作
  • Commands
    • Execute
      简单
    • Playanimation
    • 伤害
    • 播放音效
  • On Event Systems
    • 玩家首次加入时
    • On Player Join
    • 玩家离开时触发
    • 玩家死亡事件
    • 玩家重生事件系统
    • 首次加载世界时
  • Scoreboard Systems
    • 实体计数器
    • 计分板计时器
    • 比较与获取分数
  • Techniques
    • 执行逻辑门
    • MBE - Max的方块实体
    • FMBE - 创建显示实体的新方法
    • 视线检测
    • 移动状态检测
    • 轨道摄像机
  • Useful Creations
    • 多人位置重排系统
      函数
    • 自定义合成台
      简单
实体
  • General
    • Intro to Entities BP
      指南
      新手
    • 实体资源包入门
      指南
      新手
    • 实体问题排查指南
      帮助
    • NPC对话系统
      中级
    • 实体事件
      新手
    • 实体属性
    • 渲染控制器
      新手
    • 生成规则
  • Tutorials
    • 任意坐标系间的坐标转换(世界、实体、骨骼)
      中级
    • 创建船只
      中级
    • 实体手持物品
      中级
    • 实体攻击机制
      中级
    • 实体睡眠机制
      中级
    • 实体碰撞体
      中级
    • 实体移动
    • 实体计时器
      中级
    • 无敌实体
      新手
    • 村庄机制实现指南
    • 检测其他实体
      中级
    • 生成已驯服的实体
      脚本
      中级
    • 视线检测实体
      中级
    • 禁用队友伤害
      中级
    • 范围效果云入门指南
      中级
    • 虚拟实体
      新手
    • 飞行实体控制
      中级
  • Documentation
    • Vanilla Usage Spawn Rules
    • 原版使用组件
    • 抛射物
    • 虚拟组件
    • 运行时标识符
    • 非生物实体运行时标识符
战利品、配方与交易
  • General
    • 交易行为
  • Documentation
    • 战利品表
    • 交易表
    • 合成配方
    • 物品函数
  • Tutorials
    • 随机化结构战利品
      简单
文档
  • Shared Constructs
  • Molang 查询详解
  • Vanilla Materials
    专家
  • 声音定义
  • 文件类型
  • 材质配置文件说明
    专家
  • 菜单分类
  • 资源包文件夹结构
  • 雾效ID
  • 高级Molang指南
方块
  • General
    • 方块入门指南
      指南
      新手
    • 方块组件
    • Block Tags
    • 方块状态
    • Block Traits
    • 方块排列组合
    • 方块事件
      脚本
    • 方块事件迁移指南
      帮助
    • 方块物品化
      中级
    • 方块问题排查指南
      帮助
  • Visuals
    • 方块剔除
      中级
    • 方块模型
      指南
      新手
      简单
    • 方块着色
      简单
    • 方块纹理动画
      中级
    • 方块纹理变体
      中级
  • Tutorials
    • Precise Interaction
      专家
      脚本
    • Precise Rotation
      专家
      脚本
    • 伪方块
      中级
    • 可旋转方块
    • 应用持续效果
      简单
      脚本
    • 矿石战利品表
      简单
      脚本
    • 规避状态值限制
      专家
  • Vanilla Re-Creations
    • 自定义作物
      中级
      脚本
    • 自定义活板门
      中级
      脚本
    • 自定义玻璃
      新手
      简单
      已弃用
    • 自定义釉面陶瓦
      简单
  • Documentation
    • 原版方块模型
      新手
    • 方块形状
    • 方块格式历史
    • 方块音效
服务器
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet 协议
    • RakNet 协议
概念
  • contents.json
  • Molang
    中级
  • Rawtext
  • textures_list.json
  • 命名空间
  • 子包
  • 文本与本地化
  • 着色器
  • 纹理图集
    中级
  • 表情符号与特殊字符
  • 覆盖资源
    中级
  • 音效
    中级
物品
  • General
    • 物品入门指南
      指南
      新手
    • 物品组件
    • 物品标签
    • 物品事件
      脚本
    • Item Event Migration
      帮助
    • 物品问题排查指南
      帮助
  • Tutorials
    • Custom Pottery Sherds
    • 可投掷物品
      中级
    • 生成物品
      中级
    • 自定义武器
      简单
    • 自定义盔甲
    • 自定义食物
      简单
      脚本
    • 通过装备物品执行命令
      实验性
      中级
    • 高分辨率物品
  • Documentation
    • 附魔
    • Numerical Item IDs
    • Vanilla Usage Components
    • 原版物品标识符
      已弃用
    • 可附着物
      新手
    • 物品格式历史记录
视觉效果
  • General
    • 实体视觉效果简介
      指南
    • 基岩版建模指南
    • 动画中的特效
    • 基于数学的动画
      中级
    • 材质
      专家
    • 材质创作
      专家
    • 皮肤包制作指南
    • 自定义死亡动画
      中级
  • Tutorials
    • Glowing Entity Texture
    • 受伤动画
      中级
    • 实体纹理动画
      中级
    • 栓绳位置调整
      简单
    • 玩家几何模型
      新手
    • 移除实体阴影
      中级
    • 重绘生成蛋纹理
      新手
  • Ideas
    • 结构展示技巧
粒子效果
  • General
    • 粒子效果入门
      指南
  • Tutorials
    • 禁用粒子效果
      新手
  • Documentation
    • 原版粒子效果
脚本编写
  • General
    • 脚本编程入门
    • 什么是Script API?
    • API 模块
  • Tutorials
    • GameTests
      实验性
    • 简易聊天命令
      实验性
    • 脚本核心功能
    • 脚本表单
      实验性
    • 脚本请求API
      实验性
    • 阻止方块放置
  • Documentation
    • JavaScript 问题排查指南
    • Script Resources
    • Script Watchdog
      实验性
    • TypeScript
    • 引擎环境
虚拟现实
  • General
    • 启用VR模式
      指南
    • 配置资源包
      专家
  • Tutorials
    • 编辑你的第一个模型
      专家

实体命令

intermediate
实体命令
  • 动画控制器
  • 使用动画控制器
  • 通过事件触发命令
  • 设置组件组
  • 添加事件
  • 触发事件
    • 交互组件
    • 计时器
  • 流程回顾

事件响应

运行实体命令更简单的方法是使用 queue_command 实体事件响应。

动画控制器 ​

要触发斜杠命令,我们将使用行为包中的动画控制器。动画控制器应放置在类似路径下:animation_controllers/some_controller.json。你可以在bedrock.dev的实体事件章节了解更多关于动画控制器的内容。

简而言之,动画控制器允许我们从行为包中触发事件:

  • 斜杠命令(如/say)
  • Molang表达式(如v.foo += 1;)
  • 实体事件(如@s wiki:my_event)

以下是一个动画控制器的示例:

BP/animation_controllers/entity_commands.ac.json
json
{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.sirlich_entity_commands": {
            "states": {
                "default": {
                    "transitions": [
                        {
                            "on_summon": "1" //1会被判定为true
                        }
                    ]
                },
                "on_summon": {
                    "on_entry": ["/say 我被召唤出来了"]
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

这个动画控制器会在实体被召唤到世界时立即执行命令/say 我被召唤出来了。如果对这个机制感到困惑,请复习Molang、动画和实体事件相关内容。

简单来说,动画控制器包含多个状态,可以在on_entry子句中触发事件。我们通过查询条件在不同状态间切换。默认情况下,实体会处于default状态,除非定义了initial_state值。

WARNING

当世界/区块重新加载时,查询会重新执行。这意味着"/say 我被召唤出来了"实际上会在每次实体"加载"时运行——而不仅是在被召唤时。

如果需要避免这种情况,你需要添加额外的查询条件,比如skin_id查询。首次生成实体时检查skin_id = 0,然后设置更高的skin_id值(如skin_id = 1)。这样当实体重新加载时,就不会再次执行那些命令。文档后续会展示具体实现。

使用动画控制器 ​

要将这个动画控制器添加到我们的实体中,可以在实体定义的description部分使用以下代码:

BP/entities/entity_commands.se.json
json
"description": {
    "identifier": "wiki:entity_commands",
    "scripts": {
        "animate": [
            "wiki:entity_commands"
        ]
    },
    "animations": {
        "wiki:entity_commands": "controller.animation.wiki_entity_commands"
    }
}
1
2
3
4
5
6
7
8
9
10
11

再次提醒,如果对任何步骤感到困惑,请查阅实体事件文档。

通过事件触发命令 ​

动画状态转换是通过查询条件创建的。你可以在这里阅读关于查询的内容。在我们的第一个例子中,查询条件只是简单的true,这意味着命令会自动执行。我们可以使用更复杂的查询条件来创建更有趣的效果。一个非常方便的方法是使用组件作为Molang过滤器来触发命令。

我个人喜欢使用skin_id。

我们可以更新动画控制器,使其基于skin_id触发:

BP/animation_controllers/entity_commands.ac.json
json
{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.sirlich_entity_commands": {
            "states": {
                "default": {
                    "transitions": [
                        {
                            "command_example": "q.skin_id == 1"
                        },
                        {
                            "zombies": "q.skin_id == 2"
                        }
                    ]
                },
                "command_example": {
                    "transitions": [
                        {
                            "default": "q.skin_id != 1"
                        }
                    ],
                    "on_entry": ["/say 执行命令一!", "@s execute_no_commands"]
                },
                "zombies": {
                    "transitions": [
                        {
                            "default": "q.skin_id != 2"
                        }
                    ],
                    "on_entry": [
                        "/say 啊!到处都是僵尸!",
                        "/summon minecraft:zombie",
                        "/summon minecraft:zombie",
                        "/summon minecraft:zombie",
                        "/summon minecraft:zombie",
                        "@s execute_no_commands"
                    ]
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

现在这个动画控制器有两个命令状态:第一个由skin_id = 1触发,第二个由skin_id = 2触发。注意这里使用了==和!=运算符。==用于相等性测试,不要使用单个=。!表示逻辑非,因此!=用于测试不等于特定值的情况。另外请注意我在每个命令列表末尾都添加了@s execute_no_commands语法。稍后我们会创建execute_no_commands事件,它将允许我们把skin_id重置为0,从而可以重复使用这些命令。

语法是@s后跟一个实体事件名称。这允许我们从动画控制器中添加/移除组件。

设置组件组 ​

回到实体文件中,我们可以使用skin_id组件来设置skin_id值。

skin_id组件如下所示:

json
"minecraft:skin_id": {
    "value": 1
}
1
2
3

我们可以添加包含skin_id的组件组:

BP/entities/entity_commands.se.json
json
"component_groups": {
    "execute_no_commands": {
        "minecraft:skin_id": {
            "value": 0
        }
    },
    "command_example": {
        "minecraft:skin_id": {
            "value": 1
        }
    },
    "command_zombies": {
        "minecraft:skin_id": {
            "value": 2
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

添加事件 ​

现在让我们创建事件,以便轻松添加这些组件组:

BP/entities/entity_commands.se.json
json
"events": {
    "minecraft:entity_spawned": {
        "add": {
            "component_groups": [
                "execute_no_commands"
            ]
        }
    },
    "execute_no_commands": {
        "add": {
            "component_groups": [
                "execute_no_commands"
            ]
        }
    },
    "command_example": {
        "add": {
            "component_groups": [
                "command_example"
            ]
        }
    },
    "command_zombies": {
        "add": {
            "component_groups": [
                "command_zombies"
            ]
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

触发事件 ​

在Minecraft中有多种方式可以触发事件。如前所述,你可以使用动画控制器来触发事件。此外,我们来看两个具体示例:

交互组件 ​

这个组件会在你点击实体时生成僵尸:

BP/entities/entity_commands.se.json
json
"minecraft:interact": {
    "interactions": [{
        "on_interact": {
            "filters": {
                "all_of": [{
                        "test": "is_family",
                        "subject": "other",
                        "value": "player"
                    }
                ]
            },
            "event": "command_zombies"
        }
    }]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

计时器 ​

这个组件会每10秒触发一次示例命令:

BP/entities/entity_commands.se.json
json
"minecraft:timer": {
    "looping": true,
    "time": 10,
    "time_down_event": {
        "event": "example_command"
    }
}
1
2
3
4
5
6
7

通过将这些(以及类似的!)组件添加到我们的实体中,我们可以控制何时改变skin_id,从而控制哪些事件会被执行。

流程回顾 ​

以下是整个工作流程:

  1. 使用交互或计时器等组件触发example_command事件
  2. 这会添加example_command组件组
  3. 进而添加skin_id组件
  4. 设置实体的skin_id值,该值可在动画控制器中被查询
  5. 动画控制器检测到这个skin_id,并切换到example_command状态
  6. 动画控制器执行/say命令
  7. 动画控制器执行实体事件@s execute_no_command
  8. execute_no_command事件将skin_id重置为0
  9. 动画控制器检测到这一变化,转回default状态
  10. 现在动画控制器等待新的skin_id值

贡献者

编辑 实体命令

Bedrock Wiki by Bedrock OSS ,Translate by 8aka-Team

"Minecraft"是Mojang AB的注册商标。

Bedrock OSS、Bedrock Wiki以及 bedrock.dev 与Microsoft及Mojang AB不存在任何隶属关系。

  • 隐私政策
  • 加入QQ社区
  • 参与贡献指南
  • 访问代码仓库