Skip to content

上手开发

写在前面

如果你尚未熟悉 TypeScript 和 Minecraft 脚本 API,考虑阅读由 Microsoft 编写的这一文章。但是不要按其中的说明操作,因为我们提供了简化配置开发环境这一流程的工具。

WARNING

你需要注意,虽然你可以在你的插件中包含 npm 包,但这些包中只有一部分能够正常工作。因此,如果你的插件并没有按你所期望的那样工作,请检查你在插件中使用的包是否都正常工作。

为什么只有一部分包能够正常工作?

你应当明白,JavaScript 代码离了运行环境(或更准确一些,脚本引擎)就无法工作。所有的现代浏览器都内置了 JavaScript 引擎;你应该也听说过 Node.js,它允许你“在任何地方运行 JavaScript”。Node.js 背后的强大引擎则是 V8

然而,仅靠一个引擎是远远不够的。运行在引擎上的 JavaScript 代码无法脱离它的“沙盒”,也就是说,它没有对文件系统、网络之类的系统级特性的访问权限。你可能会说 Node.js 提供了 node:fsnode:http 之类的 API,但是实际上,这些 API 是由 C 或 C++ 写成的,通过某种方式对 JavaScript 代码开放,已经不属于 V8 引擎的一部分。在浏览器上调用这些 API 是不可能的;很不幸,在 Minecraft 的脚本环境中也不行。你可能还会认为可以在插件中引入 axios 之类的 npm 包来帮助你访问网络。然而,所有这些模块最终都依赖于 Node.js 或浏览器 API 来工作,它们在 Minecraft 脚本环境中没有帮助。

所幸,Minecraft 提供了包装在 @minecraft/server-net 模块中的有限 API,给插件以互联网访问。该模块目前是实验性的,这就是为什么用户需要在世界设置中启用测试版 API。这个模块只能发送简单的 HTTP 请求,但这对我们来说已经足够。bedrock-stdhub 启动了一个独立的 HTTP 服务器来监听来自插件的请求,并且根据插件需求来读写文件。简而言之,我们的项目使得运行在脚本环境中的行为包 (behavior pack) 能够打破“沙盒”。

初始化项目

首先,确认你已经安装了 Node.js 环境。我们推荐使用最新的长期支持 (Long-Term Support, LTS) 版本。

前往 plugin-template 仓库。点击绿色的 “Use this template” 按钮,创建你自己的仓库。用 Git 将生成的仓库(不是模板仓库!)克隆 (clone) 到本地,并且用任何你喜欢的 JavaScript 集成开发环境 (IDE) 打开(诸如 VSCode, IntelliJ IDEA, neovim)。

根据项目的 README.md 所讲,编辑 plugin.yaml 并且在其中指定你的插件的名称、描述和目标 Minecraft 版本。然后运行 npm install(或其他包管理器的类似命令。这里我强烈推荐 yarn,可通过命令 npm install -g yarn 全局安装),然后开始开发。

README.md 中提到了一些任务。活用这些任务以获得更好的开发体验!

也别忘了修改(或直接删除)原有的 README.md。你肯定不想看见你的插件代码仓库上面带着个大大的 'template' 字眼!

StdHub API

模块 stdhub-plugin-api 提供了一套 API,可供插件访问文件系统和网络,注册自定义命令,等等。同时,也提供了额外的 API 来获取 XUID 之类的服务端级的信息。API 文档均写在代码注释中,可以通过 IDE 查看,也可以直接阅读源码。

另外,也有一个演示仓库展示这些 API 的用法。