模块¶
模块(Module)是清单文件中用于声明附加包内部内容单元的结构。每个资源包、行为包、世界模板或脚本入口都通过清单文件的modules数组向游戏登记,游戏据此判断该包包含哪些类型的内容以及应如何加载。
概述¶
清单文件中的模块不是文件夹的简单同义词,而是游戏加载附加包时识别内容类型的元数据单元。一个附加包至少需要包含一个模块;复杂附加包可以包含多个模块,例如一个行为包既包含数据模块,也包含脚本模块。
模块由类型、UUID、版本和若干类型相关字段组成。模块的UUID用于唯一标识该模块,模块版本用于描述该模块自身的版本。
模块类型¶
常见模块类型包括:
| 类型 | 用途 |
|---|---|
resources | 资源包模块,表示包中包含客户端资源 |
data | 行为包模块,表示包中包含服务端数据 |
script | 脚本模块,表示包中包含脚本API入口 |
world_template | 世界模板模块,表示包中包含世界模板 |
client_data | 客户端数据模块,用于特定客户端数据内容 |
模块类型决定游戏如何解释包内文件。资源包通常使用resources,行为包通常使用data,包含脚本的行为包还需要额外声明script模块。
模块版本¶
模块版本通常写作三整数数组,例如[1, 0, 0]。它用于标识当前模块自身的版本,与附加包标头中的包版本并不完全相同。
在实际开发中,标头版本通常用于表示整个附加包版本,模块版本用于表示包内某个内容单元的版本。游戏对模块版本的处理相对有限,但依赖声明可以引用模块的UUID和版本,因此模块版本仍应随内容变化合理维护。
模块与依赖¶
dependencies数组可以通过UUID和版本声明对其他包或模块的依赖,也可以通过module_name声明对脚本API模块的依赖。当游戏加载附加包时,会检查依赖是否满足,以避免缺少必要资源、脚本接口或配套行为数据。
行为包依赖资源包时,通常引用资源包标头或模块的UUID与版本。脚本模块依赖@minecraft/server等内置脚本API模块时,则使用module_name和模块版本。
与脚本API模块¶
清单文件中的模块和脚本API模块不是同一个概念。前者是附加包清单的加载单元,后者是脚本代码导入和依赖的API包,例如@minecraft/server。脚本附加包往往同时涉及二者:它需要在modules中声明自己的script模块,也需要在dependencies中声明要使用的脚本API模块。
设计意义¶
模块机制使一个清单文件能够描述不同类型的内容,并为依赖关系提供稳定的目标。它也是游戏区分资源包、行为包、脚本包和世界模板的重要依据。缺少模块、模块类型错误或UUID重复,都会导致附加包无法正确导入或加载。