世界逻辑
世界逻辑是为地图加入游戏行为的规则列表。无需编写代码。编辑器将规则作为数据(scene.json)导出后,服务器插件 NP Scene 会原样执行。
一条规则按以下顺序执行。
| 顺序 | 部分 | 含义 | 示例 |
|---|---|---|---|
| 1 | 触发器 | 规则开始的事件(一个) | 进入区域时 · 右键 Actor · 破坏方块时 · 计时器 |
| 2 | 过滤 | 规则限制 | 全局仅一次 · 每位玩家一次 · 冷却 · 权限 |
| 3 | 条件 | 全部为真时才继续 | 时段 = 夜晚 · 手持物品 · 概率 |
| 4 | 动作 | 从上到下依次执行 | 声音 · 屏幕标题 · 显示 Actor · 等待 · 传送 |
加入动作「等待」(wait)后,其后的动作会延迟指定的秒数执行。等待期间如果同一规则再次发生,会另外再运行一份。
触发器、条件、动作的完整列表及字段见世界逻辑 type 列表。
| 内容 | 位置 |
|---|---|
| 世界逻辑面板 | 工具 › 世界逻辑(下方停靠区域的「世界逻辑」选项卡。也可在「窗口」菜单中打开) |
| 区域触发器向导 | Ctrl+Shift+T · 工具 › 创建区域触发器… · 面板中的「区域触发器」·「添加」› 区域触发器(向导) |
| 以节点查看同一规则 | 工具 › 逻辑图 — 逻辑图 |
使用区域触发器向导创建「进入时播放声音 + 显示标题」的规则。
- 按 Ctrl+Shift+T。
- 在视口地面上拖动以绘制区域。直接单击则生成 4×4 区域。按 Esc 取消绘制。
- 在向导窗口的「名称」中输入
入口。 - 「何时」保持为「玩家进入时」。
- 在「要执行的动作」中点击「播放声音」和「显示标题」。下方会生成对应的行。
- 确认「结果」栏中的一行说明(例如「玩家进入「入口」时 → …」)。
- 点击「创建」。区域 Actor 和规则会一并生成(按一次 Ctrl+Z 即可全部撤销)。
- 如需立即确认,点击「创建并立即测试」。运行将开始。
世界逻辑面板
Section titled “世界逻辑面板”面板分为左侧的规则列表和右侧的属性栏。
左侧:规则列表
Section titled “左侧:规则列表”| 元素 | 作用 |
|---|---|
| 「区域触发器」 | 启动区域触发器向导(在视口中拖动创建新区域)。 |
| 「变量」 | 打开变量 · enum · 数据类型窗口 — 变量 · 函数 · 数据类型 |
| + | 新建规则(进入区域 → 消息)。 |
| 复制 · 删除 | 复制或删除所选规则。 |
| 上移 · 下移 | 调整规则顺序。同一时刻触发的规则按列表顺序执行。 |
| 规则行 | 启用图标 · 触发器图标 · 名称 · 一行说明 · 错误/注意图标 |
| 「触发」(行尾) | 附在仅能手动触发的触发器的规则上。在运行中按该事件已发生的方式执行。 |
列表下方还有三个栏。
| 栏 | 内容 |
|---|---|
| 区域 | 「在视口中显示区域·阻挡框」· 所选区域说明 · 区域检查 |
| 模拟 | 时段(大气预览时刻 · 白天 · 夜晚)· 天气(晴天 · 雨天 · 雷暴)· 拥有全部权限 |
| 历史 | 「运行测试」按钮及触发 · 跳过 · 动作记录(时间以秒计) |
在视口或大纲中选择区域后,使用该区域的规则会在列表中高亮显示,并打开第一条规则。如果没有使用该区域的规则,会显示「为“名称”添加要执行的事」按钮。
右侧:属性栏
Section titled “右侧:属性栏”| 部分 | 内容 |
|---|---|
| 头部 | 使用复选框 · 触发器图标 · 规则名称 ·「触发」(仅能手动触发的触发器)· 用向导修改 |
| 一行说明 | 以 → 开头的通俗说明。每次修改都会更新。 |
| id | scene.json 中的规则 id。只能使用英文字母、数字及 _ . -。按 Enter 确认修改。 |
| 触发器 | type 按钮 + 字段 |
| 条件 | 条件卡片列表 +「添加条件」 |
| 动作 | 动作卡片列表 +「添加动作」 |
| 过滤 | 全局仅一次 · 每位玩家一次 · 冷却 · 权限 |
- 点击 type 按钮后,会打开按分组(区域 · 流动 · 世界 · 画面 · Actor · 碰撞 · 方块 · 战斗 · 变量 · 函数)划分的菜单。
- 仅能手动触发的触发器在菜单中会附有「(触发按钮)」。
- 更换 type 时,同名的 Actor 字段和文本字段的值会原样保留。
- 条件、动作卡片上有编号、上移、下移、复制、删除按钮。
- 必填字段的名称后带有
*。 - Actor 字段的选择列表中只显示与该字段类型相符的 Actor。
- 检查信息(错误 · 注意)显示在对应字段的正下方。
| 字段 | scene.json | 含义 |
|---|---|---|
| 全局仅一次 | once | 在整个服务器中只执行一次。 |
| 每位玩家一次 | once_per_player | 每人执行一次。开启「全局仅一次」时不生效。 |
| 冷却 | cooldown | 同一人再次执行前需要等待的秒数。 |
| 权限 | permission | 只有拥有该权限节点的人才能执行(例如 noplatea.vip)。 |
条件为假时,不会留下触发记录(仅一次 · 冷却)。
区域触发器向导
Section titled “区域触发器向导”在地面上拖动绘制区域后,向导窗口打开。视口中会显示黄色的草稿盒。
| 字段 | 选项 |
|---|---|
| 名称 | 区域(或阻挡框)Actor 的名称 |
| 大小 | X(宽)· Z(长)· Y(高)的格数。保持地面中心不变进行调整。 |
| 何时 | 玩家进入时 · 玩家离开时 · 碰撞时 (撞到阻挡盒) · 破坏方块时 |
| 要破坏的方块 | 选择「破坏方块时」时使用。留空表示任意方块,也可以使用 #minecraft:logs 之类的标签。 |
| 何人 | 任何人 · 仅第一个人 (全服仅一次) |
| 循环 | 每次 · 仅一次 (每位玩家) |
点击「要执行的动作」中的按钮会生成一行。各行从上到下依次执行。
| 要执行的动作 | 生成的动作 |
|---|---|
| 播放声音 | 声音 |
| 显示标题 | 屏幕标题 |
| 聊天消息 | 聊天消息 |
| 显示 Actor | 显示 Actor — 选择新文本时,会在区域上方创建一个隐藏的文本 Actor。 |
| 显示方块 | 填充方块 — 将用选择工具(4)选中的区域作为范围。 |
| 播放动画 | 播放动画 |
| 传送 | 传送 — 选择新目的地时会创建出生点 Actor。 |
| 开门 | 将门的范围变为空气,并在指定秒数后恢复(可选择开关门声音)。 |
| 检查点 | 动作栏文本 + 检查点 — 指定复活位置(出生点 Actor)。 |
- 「创建」会一次性生成区域、所需的 Actor 和规则。
- 用向导修改已有规则时,按钮会变为「保存」·「保存并立即测试」。
- 向导无法识别的动作会作为「其他动作」行原样保留。条件、冷却、权限也保持不变。
- 选择「碰撞时」时,会创建阻挡框而不是区域。
方块触发器的「在哪里」
Section titled “方块触发器的「在哪里」”自 0.9.11 起:「破坏方块时」·「放置方块时」·「右键方块时」触发器新增了「在哪里」字段。
| 「在哪里」 | area | 判定 |
|---|---|---|
| 区域 | zone | 触发区域 Actor 内的方块(与以往相同) |
| 所选方块 | blocks | 仅限在视口中选中的方块格 |
| 任意位置 | anywhere | 整个世界。无需区域。 |
使用「所选方块」的步骤如下。
- 在视口中用选择工具选中方块。
- 点击「所选方块」字段中的「从选区」。除空气以外的格子会被填入。
- 点击眼睛按钮,会在视口中重新选中并显示这些格子。
- 所选方块最多 4,096 格。范围较大时请使用区域 Actor。
- 没有「在哪里」的旧规则按「区域」读取。
- 可以用「方块」字段过滤方块类型(留空表示任意方块)。
每次修改规则时都会进行检查。列表行中显示错误、注意图标,属性栏中则在对应字段下方显示信息。
| 类型 | 示例 |
|---|---|
| 错误 | 不存在的 Actor · 类型不符的 Actor · 不存在的片段 · 错误的声音 id · 被方块埋住而无法进入的区域 · 同名的函数规则 |
| 注意 | 声音库 · 原版中不存在的声音 · 没有接收规则的信号 · 没有 wait 的信号循环 · 没有规则使用的区域 · 规则全部关闭的区域 · 未知 type |
未知 type(本编辑器中不存在的事件插件的 type)以只读字段显示,并原样保留。如果服务器上有该插件,则会执行。
控制台命令 logic 以文本形式显示规则、片段列表及检查结果。
在服务器上执行
Section titled “在服务器上执行”- 在导出窗口中创建
.npbuild时开启「包含场景」(默认开启)。scene.json会被放入.npbuild中 — 导出与导入 - 将
.npbuild安装到服务器时,会应用旋转、翻转、位置并转换为服务器坐标。 - 服务器插件 NP Scene 执行规则。不会生成新的代码。
- 坐标以建筑的最小角(origin)为基准导出。格式见 scene.json 格式。
- 「仅一次」记录、标志等状态由服务器保存在
state.json中。 - 动作「服务器命令」需要运营者在服务器设置中开启后才会执行。编辑器不会执行。
| 选项 | 位置 | 默认值 | 含义 |
|---|---|---|---|
| 在视口中显示区域·阻挡框 | 面板「区域」 | 开 | 触发区域半透明盒 + 名称 · 规则一行说明,阻挡框(斜线) |
| 时段 | 面板「模拟」 | 大气预览时刻 | 运行时「时段」条件所参照的时间 |
| 天气 | 面板「模拟」 | 晴天 | 运行时「天气」条件所参照的天气 |
| 拥有全部权限 | 面板「模拟」 | 开 | 关闭后,运行时权限过滤和条件为假 |
| 包含场景 | 导出窗口 | 开 | 将 scene.json 放入 .npbuild |
| 键 | 动作 |
|---|---|
| Ctrl+Shift+T | 创建区域触发器(拖动绘制区域 → 向导) |
| Esc | 取消绘制区域 · 关闭向导窗口 |
| Ctrl+Z | 撤销规则更改(文本输入合并为一步) |
| 1~9 | 运行中执行「触发」列表中的规则 |
提示 / 注意
Section titled “提示 / 注意”- 规则较多时,可用逻辑图一览整体流程。两者是同一份数据,在哪一边修改都可以。
- 运行中修改规则,会从下一次运行开始生效。运行在开始时会复制规则使用。
- 「破坏方块时」·「受到伤害时」等触发器不会在运行中自动发生。请用「触发」按钮或数字键进行测试。
- 「取消事件」动作只有作为规则的第一个动作时才有意义(在
wait之前)。 - 「发送信号」会当场立即执行接收该名称的规则。有多个接收规则时全部执行。