跳转至

脚本API

脚本API(Script API是Minecraft基岩版提供的基于JavaScript的编程接口,允许附加包开发者通过编写脚本代码来与游戏世界进行交互。脚本API是附加包生态中功能最强大的扩展方式,能够实现数据驱动系统无法独立完成的复杂逻辑。

概述

脚本API由一系列模块(Module)组成,每个模块提供一组特定领域的功能接口。脚本代码以JavaScript文件的形式存放在行为包的scripts/目录中,游戏引擎在加载行为包时会启动一个JavaScript运行时环境来执行这些脚本。

脚本API的模块需要在行为包的清单文件中作为依赖声明,同时清单文件中需要包含一个类型为script的模块定义,并将language字段设置为javascript

核心模块

脚本API的核心模块包括:

模块名称 描述
@minecraft/server 服务端核心API,提供对实体、方块、维度、世界等游戏对象的访问和操控能力
@minecraft/server-ui 服务端UI模块,提供向玩家显示表单对话框的能力
@minecraft/server-gametest 游戏测试模块,提供自动化测试框架
@minecraft/server-admin 服务端管理模块,提供服务器配置的访问能力
@minecraft/server-net 网络模块,提供HTTP请求能力(仅BDS

每个模块都有独立的版本号,遵循语义版本规范。部分模块的最新版本可能以-beta后缀标识实验性版本。

事件系统

脚本API采用事件驱动(Event-Driven)的编程模型。开发者通过订阅特定事件来响应游戏中发生的各种情况。事件分为两类:

前置事件

前置事件(Before Event)在行为发生之前触发,允许脚本取消该行为。例如,world.beforeEvents.chatSend在聊天消息发送之前触发,脚本可以通过设置cancel属性来阻止消息发送。

后置事件

后置事件(After Event)在行为发生之后触发,不可取消,主要用于对已发生的事件进行响应。例如,world.afterEvents.entityHurt在实体受到伤害之后触发。

脚本事件

脚本事件(Script Event)是一种从命令系统向脚本API传递消息的机制。通过/scriptevent命令发送的事件可以被脚本通过system.afterEvents.scriptEventReceive监听和处理,从而实现命令系统与脚本逻辑之间的通信。

系统调度

脚本API提供了基于刻的调度机制,允许脚本按照时间计划执行逻辑:

  • system.runTimeout(callback, delay):在指定的刻数后执行回调。
  • system.runInterval(callback, interval):每隔指定的刻数重复执行回调。
  • system.run(callback):在下一刻执行回调。

TypeScript支持

虽然游戏引擎直接执行的是JavaScript代码,但开发者可以使用TypeScript编写脚本,然后在构建阶段将TypeScript编译为JavaScript。脚本API为所有模块提供了TypeScript类型声明文件,可以通过npm安装获取,以获得完整的类型检查和代码补全支持。

脚本引擎

脚本引擎(Script Engine)是脚本API的前身,是一套已被弃用的早期脚本系统。旧版脚本引擎提供了clientserver两个脚本上下文,使用了不同于当前脚本API的接口设计。旧版脚本引擎已在较新的游戏版本中移除,所有新开发应使用当前的脚本API