🖱️ 交互(Interaction)#
#bs.interaction:help
在 Minecraft 中创建和管理图形用户界面(GUI)。
“就客户而言,界面就是产品。”
—杰夫·拉斯金(Jef Raskin)
Interaction API 是一个基于交互实体创建 GUI 的低级 API。这是一个低级 API,是因为可能的事件直接手动绑定到交互实体。
🔧 函数#
You can find below all functions available in this module.
清除事件#
- #bs.interaction:clear_events
清除为指定交互实体注册的事件。
- 输入:
执行
as <实体>:将要清除事件的交互实体。函数宏:
参数
with: 过滤待清除事件的参数,留空则清除所有事件。
type: 指定待清除的事件类型。
id: 指定待清除事件的ID。
- 输出:
返回值:移除的事件数量。
状态:交互实体的指定事件将被移除。
示例:清除交互实体的悬停事件:
summon minecraft:interaction ~ ~ ~ { Tags: ["bs.entity.interaction"], width: 1f, height: 1f }
# Register hover events for the interaction
execute as @n[tag=bs.entity.interaction] run function #bs.interaction:on_hover { run: "say Hovered", executor: "target" }
# Clear hover events for the interaction
execute as @n[tag=bs.entity.interaction] run function #bs.interaction:clear_events { with: { type: "hover" } }
制作人员:Aksiome、theogiraudet
事件触发#
- #bs.interaction:on_left_click
注册当前交互实体被左键点击时运行的命令。每个交互实体可以响应多个事件。
- 输入:
执行
as <实体>:要注册事件的交互实体。函数宏:
参数
run: 左键点击时执行的命令。
executor: 定义命令执行的目标实体。可选 “source”(执行动作的玩家)或 “target”(交互实体本身),也可用复合结构指定其他实体:
selector: 指定命令执行的实体选择器(
execute as <entity>)。lazy: 决定选择器是立即解析(
false)还是运行时解析(true,默认值)。若为false,选择器必须精确指向单个实体(将被替换为该实体UUID),这对优化图形实体的执行效率特别有效。若选中多个实体,则选取首个匹配项。
- 输出:
返回值:创建的事件ID。
状态:交互实体将在被左键点击时触发事件。
- #bs.interaction:on_right_click
注册当前交互实体被右键点击时运行的命令。每个交互实体可以响应多个事件。
- 输入:
执行
as <实体>:要注册事件的交互实体。函数宏:
参数
run: 右键点击时执行的命令。
executor: 定义命令执行的目标实体。可选 “source”(执行动作的玩家)或 “target”(交互实体本身),也可用复合结构指定其他实体:
selector: 指定命令执行的实体选择器(
execute as <entity>)。lazy: 决定选择器是立即解析(
false)还是运行时解析(true,默认值)。若为false,选择器必须精确指向单个实体(将被替换为该实体UUID),这对优化图形实体的执行效率特别有效。若选中多个实体,则选取首个匹配项。
- 输出:
返回值:创建的事件ID。
状态:交互实体将在被右键点击时触发事件。
- #bs.interaction:on_hover
注册当玩家鼠标悬停在交互实体上时持续运行的命令。每个交互实体可以响应多个事件。
- 输入:
执行
as <实体>:要注册事件的交互实体。函数宏:
参数
run: 准星悬停在交互实体上时持续执行的命令。
executor: 定义命令执行的目标实体。可选 “source”(执行动作的玩家)或 “target”(交互实体本身),也可用复合结构指定其他实体:
selector: 指定命令执行的实体选择器(
execute as <entity>)。lazy: 决定选择器是立即解析(
false)还是运行时解析(true,默认值)。若为false,选择器必须精确指向单个实体(将被替换为该实体UUID),这对优化图形实体的执行效率特别有效。若选中多个实体,则选取首个匹配项。
- 输出:
返回值:创建的事件ID。
状态:交互实体将在被悬停时持续触发事件。
- #bs.interaction:on_hover_enter
注册当玩家开始鼠标悬停在交互实体上时运行一次的命令。每个交互实体可以响应多个事件。
- 输入:
执行
as <实体>:要注册事件的交互实体。函数宏:
参数
run: 准星开始悬停时执行的命令。
executor: 定义命令执行的目标实体。可选 “source”(执行动作的玩家)或 “target”(交互实体本身),也可用复合结构指定其他实体:
selector: 指定命令执行的实体选择器(
execute as <entity>)。lazy: 决定选择器是立即解析(
false)还是运行时解析(true,默认值)。若为false,选择器必须精确指向单个实体(将被替换为该实体UUID),这对优化图形实体的执行效率特别有效。若选中多个实体,则选取首个匹配项。
- 输出:
返回值:创建的事件ID。
状态:交互实体将在进入悬停时触发一次事件。
- #bs.interaction:on_hover_leave
注册当玩家停止鼠标悬停在交互实体上时运行一次的命令。每个交互实体可以响应多个事件。
- 输入:
执行
as <实体>:要注册事件的交互实体。函数宏:
参数
run: 准星结束悬停时执行的命令。
executor: 定义命令执行的目标实体。可选 “source”(执行动作的玩家)或 “target”(交互实体本身),也可用复合结构指定其他实体:
selector: 指定命令执行的实体选择器(
execute as <entity>)。lazy: 决定选择器是立即解析(
false)还是运行时解析(true,默认值)。若为false,选择器必须精确指向单个实体(将被替换为该实体UUID),这对优化图形实体的执行效率特别有效。若选中多个实体,则选取首个匹配项。
- 输出:
返回值:创建的事件ID。
状态:交互实体将在离开悬停时触发一次事件。
边缘情况
如果玩家在悬停在交互实体上时退出游戏,悬停离开事件将在执行者上触发。如果执行者是玩家,当他们重新登录时该事件将不会再次触发。请务必考虑这种边缘情况,在玩家返回时适当处理。
示例:当交互实体被悬停时让交互实体图标发光,不悬停时取消发光:
summon minecraft:interaction ~ ~ ~ { Tags: ["bs.entity.interaction"], width: 1f, height: 1f }
summon block_display ~-.5 ~ ~-.5 { Tags: ["bs.entity.block_display"], width: 1f, height: 1f, block_state: { Name: "minecraft:slime_block" }}
# Callback to glow the icon when the interaction is hovered
execute as @n[tag=bs.entity.interaction] run function #bs.interaction:on_hover_enter { run: "function #bs.interaction:callback/glow", executor: { selector: "@e[tag=bs.entity.block_display]", lazy: false } }
# Callback to unglow the icon when the interaction is not hovered anymore
execute as @n[tag=bs.entity.interaction] run function #bs.interaction:on_hover_leave { run: "function #bs.interaction:callback/unglow", executor: { selector: "@e[tag=bs.entity.block_display]", lazy: false } }
制作人员:Aksiome、theogiraudet
↩️ Callbacks#
You can find below all callbacks available in this module.
#bs.interaction:callback/glow
使目标实体发光。
#bs.interaction:callback/unglow
移除目标实体的发光效果。
#bs.interaction:callback/none
不执行任何操作的空回调。可用作占位符或明确表示不应执行任何操作。