Skip to content

格式

creeper 包采用一个 TOML 文件来配置。打包者通过编辑包文件来指导 creeper 执行不同的操作。

所有包都要有一个 标识符 ,这是用来将它们与其他包区分开的唯一凭据。标识符 id 是小写 ASCII 字母开头且仅含有 ASCII 小写字母,数字,下划线 _ , 或连字符 - 的文本。标识符不能与其他包相同。

creeper 包的版本,在格式和语义上,都服从 语义化版本号 标准。版本号应当与上游严格一致,而不是用来标记包文件的版本。

修订号 rev 被保留,用于处理「给上游的同一个版本多次打包」的情况。由于相关功能尚未实现,请将其设为 0 , 或直接省略这个字段。

id = "helloworld"
version = "0.1.0"
# rev = 0

标识符和版本还决定了包文件应该放置在哪里。假设 $root 是所有包文件的根目录(对 creeper-registry 来说,这是仓库下的 package 文件夹;如果你在使用本地注册源,这就是你的 file:// URL 所指向的位置),并且你的包有 $id$version , 那么它应该放在这里:

Terminal window
$root/${id:0:2}/${id:2:2}/$id/$version/0.toml

比如我们示例中的包 helloworld@0.1.0 就应该放在 $root/he/ll/helloworld/0.1.0/0.toml .

你可以在 [package] 章节中额外提供一些与包相关的信息。这些信息不会影响依赖解析或安装这个包时的行为。

键名解释
name决定这个包以什么名称来显示。与标识符不同,这可以是任意字符串(UTF-8 编码)。
authors一个字符串构成的数组,表示 软件的作者(如果你是打包者,请不要与你本人混淆)。可以在名字之后附上邮箱。
description一段简短的介绍。
license这个包(上游)的发布许可证,需要 SPDX 许可证表达式 格式。
[package]
name = "Hello, world!"
authors = ["misaka10987 <misaka10987@outlook.com>"]
description = "A simple *Hello, world!* package"
license = "MIT"

通过定义 依赖 ,creeper 可以自动化处理不同包之间的关系。模组对加载器 API 的依赖,模组对其前置模组的依赖,或者光影包对光影 API 的依赖都在这里指定。

[dependencies]
minecraft = "=1.21.1"

[dependencies] 章节的每一个键值对指定一个依赖。其中,键名是依赖的包的标识符,而对应的值指定需要的版本范围。版本约束由逗号隔开的多个比较运算符和版本构成,与 Cargo 的格式相同。

有时候,情况并不是你的包需要另一个包才能工作。相反,它和特定的包同时安装,会产生错误。你可以通过指定 冲突 来让 creeper 避免同时安装会造成问题的包。

[[comflicts]]
optifine = "*"

一个冲突和依赖一样,都是标识符和版本约束的键值对,定义了当前的包与冲突包的指定版本区间不能共存。

你也可以指定依赖于一组包当中的任意一个,而不关心具体是哪个包(比如,你打包的模组 JAR 文件在 NeoForge 和 Fabric 都可以加载)。creeper 在 任一 数组中的每张表格挑选一个条目,作为依赖。

[[either-dependency]]
neoforge = "21"
fabric = "0.19"

请注意,这一组包中 完全可能有多个包被同时安装(只要它们不互相冲突)。如果你希望的是「有且仅有一个包」,则需要配合指定冲突来实现。

包文件中的 [install] 章节告诉 creeper 如果要安装这个包,需要哪些操作。

我们在此需要引入一个新概念。无论安装什么,一个很常见的操作是将指定文件放到指定位置。为了让所有用户取得一致的文件,并尽量减少传输,creeper 使用 工件 (Artifact) 这一概念来抽象文件。

键名解释
blake3BLAKE3 校验和。
name文件名。这个名称对 creeper 的行为没有任何影响,仅用于显示。
src下载文件的 URL.
len文件的大小(字节数)。
sha1可选的 SHA-1 校验和。
sha256可选的 SHA-256 校验和。
md5可选的 MD5 校验和。
blake3 = "d61152a1e1a3092548460179b02f76440890a421c11f93bf7dfbad2f574f58af"
name = "minecraft.jar"
src = "https://piston-data.mojang.com/v1/objects/30c73b1c5da787909b2f73340419fdf13b9def88/client.jar"
len = 26836906
sha1 = "30c73b1c5da787909b2f73340419fdf13b9def88"

你不需要手动检查文件的长度与校验和。creeper tool download <url> 命令可以从指定的 URL 下载文件,自动计算这些信息,以 TOML 形式生成工件。

mc-flag 数组中的字符串将在游戏启动时传递。

mc-mod 数组中的工件会放置到游戏的 mods 文件夹中,就像手动操作一样。

[[install.mc-mod]]
blake3 = "0121f52b53af9cea6e00b14362617a5a1b9bc75fa92c69d51c96a0815ad25703"
name = "sodium-neoforge-0.6.13+mc1.21.1.jar"
src = "https://cdn.modrinth.com/data/AANobbMI/versions/Pb3OXVqC/sodium-neoforge-0.6.13%2Bmc1.21.1.jar"
len = 1162994

resource-pack , shader-pack 数组中的工件会放置到游戏的 resourcepacks , shaderpacks 文件夹中。

id = "helloworld"
version = "0.1.0"
[package]
name = "Hello, world!"
authors = ["misaka10987 <misaka10987@outlook.com>"]
description = "A simple *Hello, world!* package"
license = "MIT"
[dependencies]
minecraft = "=1.21.1"
sodium = "*"
[[conflicts]]
optifine = "*"
[[either-dependency]]
neoforge = "21"
fabric = "0.19"
[[install.mc-mod]]
blake3 = "8621517971027dd81f501b01da824ea75c2b0b712b07683babfa3e5a3a10af21"
name = "iris-1.8.8+mc1.21.1.jar"
src = "https://cdn.modrinth.com/data/YL57xq9U/versions/oXIoDcGE/iris-neoforge-1.8.8%2Bmc1.21.1.jar"
len = 2437216
[[install.shader-pack]]
blake3 = "8bc331ee97e067ffdc11aaa13f54619b9bdd907a10d532b7824b6e696e936145"
name = "BSL_v10.1.3.zip"
src = "https://cdn.modrinth.com/data/Q1vvjJYV/versions/hIibTfxn/BSL_v10.1.3.zip"
len = 1127026