函数¶
函数(Function)是行为包中用于按顺序执行多条命令的文本文件。函数将命令列表组织为可复用单元,使命令系统能够以文件形式管理较复杂的逻辑。
概述¶
函数文件的扩展名为.mcfunction,通常位于行为包的functions/目录下。文件中每一行表示一条命令,且通常不写前导斜杠。游戏执行函数时,会按文件中的顺序依次执行这些命令。
函数属于命令系统的一部分,而不是脚本语言函数。它不具备参数、返回值、局部变量或通用流程控制能力;复杂状态通常需要借助记分板、实体标签、方块状态或脚本API实现。
调用方式¶
函数可以通过/function命令手动调用,也可以由命令方块、NPC按钮、其他函数或附加包机制间接调用。行为包中的tick.json可以登记每刻自动执行的函数,使其成为持续运行的命令逻辑入口。
函数名称由其在functions/目录中的文件路径决定。使用子文件夹可以组织函数并降低与其他行为包中函数重名的概率。例如,functions/init/ouch.mcfunction可以通过/function init/ouch调用。
执行上下文¶
函数中的命令会在调用函数的上下文中执行。执行位置、维度、执行者、权限和命令版本等信息会影响相对坐标、目标选择器和部分命令行为。
同一个函数在不同上下文中调用,可能产生不同结果。例如,由命令方块调用和由玩家聊天栏调用时,@s、~ ~ ~和^ ^ ^的含义可能不同。
每刻函数¶
tick.json用于声明每个游戏刻自动执行的函数列表。多个行为包都可以提供tick.json,其函数会按包栈和加载规则参与执行。
每刻函数适合用于全局检测、计时和状态维护,但应控制命令数量和选择器范围。过多或过宽的每刻命令会增加服务端负载。
限制¶
基岩版单次函数调用最多执行10000条命令。超过此限制的命令不会继续作为同一次函数调用执行。大型命令系统应拆分函数、减少每刻执行量,并避免在单个函数中堆积过多批量选择器操作。
与脚本API¶
函数与脚本API都可以实现自动化逻辑,但层级不同。函数直接执行命令,部署简单且兼容命令系统;脚本API提供更强的事件订阅、数据结构和程序控制能力。在附加包开发中,二者可以配合使用。