🖱️ 交互(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

不执行任何操作的空回调。可用作占位符或明确表示不应执行任何操作。


🏷️ 实体标签(Tags)#

You can find below all tags available in this module.


是否被悬停?#

bs.interaction.hovered

判断交互实体当前是否被玩家悬停。

备注

这在 hover_enterhover_leave 事件中很有用,因为这些事件是针对每个玩家的。由于 hover_leave 在玩家停止悬停时触发,但不检查是否所有玩家都停止了,所以可以使用此标签来确定所有玩家是否都已离开交互实体。

制作人员:Aksiome


是否为源?#

bs.interaction.source

仅在事件回调中可用。判断当前实体是否为事件的源。

制作人员:theogiraudet


是否为目标?#

bs.interaction.target

仅在事件回调中可用。判断当前实体是否为事件的目标。

制作人员:theogiraudet


是否监听特定事件?#

bs.interaction.listen_right_click

判断当前交互实体是否监听右键点击交互实体。

bs.interaction.listen_left_click

判断当前交互实体是否监听左键点击交互实体。

bs.interaction.listen_hover

判断当前交互实体是否监听悬停交互实体。

bs.interaction.listen_hover_enter

判断当前交互实体是否监听进入悬停交互实体。

bs.interaction.listen_hover_leave

判断当前交互实体是否监听离开悬停交互实体。

制作人员:theogiraudet


💬 这对你有帮助吗?

欢迎在下方留下你的问题和反馈!