====== fabric.mod.json ====== fabric.mod.json 文件是由 Fabric 加载器使用以加载模组的模组元数据文件。模组需要有这个文件才能被加载,该文件需要放在模组 JAR 的根目录下,且名称一致。 ===== 必要字段 ===== * **schemaVersion** 用于内部机制。总是为 ''1''。 * **id** 定义模组的 id——由字母、数字、下划线组成的字符串,长度为 1 到 63。 * **version** 定义模组版本——字符串值,建议符合 [[https://semver.org/|Semantic Versioning 2.0.0]] 的规定。 ===== 可选字段 ===== ==== 模组加载 ==== * **provides**:定义了提供的模组的 id 的列表,可以看做模组的别称。Fabric Loader 将会认为这些 id 的模组是存在的。如果存在其他使用这个 id 的模组,这些模组会直接不加载。 * **environment**:定义了模组在哪里运行:只在客户端(客户端模组),或只在服务端(插件),或二者(常规模组)。包含环境标识符: * **''*''** 运行在客户端与服务器。默认。 * **client** 运行在客户端。 * **server** 运行在服务器。 * **entrypoints** 定义了你的模组的要加载的主要的类。 * 你的模组有三种默认的入口点: * **main** 会先运行。用于实现了 ''ModInitializer'' 的类。 * **client** 仅在客户端,会随后运行。用于实现了 ''ClientModInitializer'' 的类。 * **server** 仅在服务端,会随后运行。用于实现了 ''DedicatedServerModInitializer'' 的类。 * 每个入口点都可以包含多个需要加载的模组。类(或者方法,或者静态字段)可以用两种方式定义: * 如果使用Java,列举类(或者其他)的完整名称。例如: "main": [ "net.fabricmc.example.ExampleMod", "net.fabricmc.example.ExampleMod::handle" ] * 如果你使用其他语言,参考该语言的文档。Kotlin 的位于 [[https://github.com/FabricMC/fabric-language-kotlin/blob/master/README.md|此网站]]。 * **jars** 你的模组 JAR 中需要加载的嵌套 JAR。使用此字段前,请参考[[zh_cn:tutorial:loader04x#嵌套 JAR|使用嵌套 JAR 的指引]]。每一项都是包含 ''file'' 键的对象,这个键应该是你的模组 JAR 到嵌套 JAR 的路径。例如: "jars": [ { "file": "nested/vendor/dependency.jar" } ] * **languageAdapters** 从使用的语言映射到其接收器(adapter)类完整名称的字典。例如: "languageAdapters": { "kotlin": "net.fabricmc.language.kotlin.KotlinAdapter" } * **mixins** mixin配置文件的列表。每一项都是到你的模组 JAR 内的 mixin 配置文件的路径,或者包含以下字段的对象: * **config** 你的模组 JAR 内到 mixin 配置文件的路径。 * **environment** 与上层 **environment** 字段相同。见上。如: "mixins": [ "modid.mixins.json", { "config": "modid.client-mixins.json", "environment": "client" } ] ==== 依赖解析 ==== 下方各对象的项的键均为依赖的模组 id。 每一个键的值都是字符串,或者字符串数组,声明支持的版本范围。对于数组,会假定一个“OR”关系——也就是说,只要符合其中一个。 对于所有版本的情况,*是特殊的字符串,声明所有版本都符合该范围。此外,无论版本范围,必须能够符合准确字符串。 * **depends** 需要才能运行的依赖,否则游戏崩溃。 * **recommends** 不必要就能运行的依赖,否则游戏会输出警告。 * **suggests** 不需要就能运行的依赖,用作元数据。 * **breaks** 一起运行可能导致游戏崩溃的模组。一起运行时,游戏崩溃。 * **conflicts** 一起运行时游戏可能出现问题的模组。一起运行时,会输出警告。 ==== 元数据 ==== * **name** 定义用于易读的模组名称。如果不存在,则假定符合 **id**。 * **description** 定义模组的描述。如果不存在,则假定为空字符串。 * **contact** 定义项目的联系信息,此对象包含以下字段: * **email** 通过电邮联系与模组有关事项,必须是有效的电邮地址。 * **irc** 与模组有关的 IRC 频道。必须是有效的 URL 格式,例如:''irc://irc.esper.net:6667/charset'' for ''#charset'' at EsperNet——端口是可选的,如果不存在,假定为6667。 * **homepage** 项目或用户主页,必须是有效的 HTTP/HTTPS 地址。 * **issues** 项目问题追踪器,必须是有效的 HTTP/HTTPS 地址。 * **sources** 项目源代码仓库,必须是有效的 URL——但是也可以是给定的 VCS 的专用 URL(例如 Git 或 Mercurial)。 * 本列表并未列举尽——模组也许会提供额外的、非标准的键(例如 **discord**、**slack**、**twitter**,等等)——如有可能,一般都需要是有效的 URL。 * **authors** 模组作者的列表。每一项都是单个名称,或者是包含以下字段的对象: * **name** 真名或用户名,必须。 * **contact** 此人的联系信息。与上面的 **contact** 一样,见上。可选。 * **contributors** 模组贡献者的列表。每一项与 **author** 字段格式一致,见上。 * **license** 定义许可协议信息。可以是单个协议字符串或者其列表。 * 应该提供完整的一套受推荐的包含整个模组包的许可协议。换句话说,遵守所有列举的协议应该足够明确整个模组包的使用、分发等。 * 对于代码有部分受双协议影响的情况,选择受推荐的协议。 The list is not exhaustive, serves primarily as a kind of hint, and does not prevent you from granting additional rights/licenses on a case-by-case basis. * To aid automated tools, it is recommended to use [[https://spdx.org/licenses/|SPDX License Identifiers]] for open-source licenses. * **icon** 定义模组的图标。图标是正方形 PNG 文件。(Minecraft 资源包使用 128×128,但并非硬性要求,但是建议长宽均为 2 的次幂。)可以以两种方式提供: * 到单个 PNG 文件的路径。 * 宽度映射到文件路径的字典。 ===== 自定义字段 ===== 您可以在 ''custom'' 字段中添加任何要添加的字段。Loader 会忽略这些字段。但是//强烈建议为您的字段命名//以避免在将您的字段(名称)添加到标准规范时发生冲突。