🖱️ 交互(Interaction)#
#bs.interaction:help
Attach click and hover events to Interaction entities.
“就客户而言,界面就是产品。”
—杰夫·拉斯金(Jef Raskin)
Interaction API 是一套基于交互实体创建 GUI 的底层接口,需要将各类事件直接绑定到对应的交互实体。
🔧 函数#
下面列出了此模块中所有可用的函数。
清除事件#
- #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
↩️ 回调#
下面列出了此模块中所有可用的回调。
#bs.interaction:callback/glow
使目标实体发光。
#bs.interaction:callback/unglow
移除目标实体的发光效果。
#bs.interaction:callback/none
不执行任何操作的空回调。可用作占位符或明确表示不应执行任何操作。