现代的 Minecraft 包管理器。
creeper init ${path-to-new-game}
cd ${path-to-new-game}
creeper add vanilla@=1.21.1 mekanism@10 "bsl@*" create@6
creeper launch
creeper 启动的 Minecraft 1.21.1 + Mekanism 10.7.19 + Create 6.0.10 + BSL 10.1.3
自动安装了 NeoForge 21.1.234, Sodium 0.6.13 和 Iris 1.8.8
cargo install --git https://github.com/misaka10987/creeper或者在 Releases 下载相应构建。
creeper 的使用手册仍在编写中。无论如何,你都可以使用 help 子命令,或 --help 参数来查看 creeper 的内置帮助。
Usage: creeper [OPTIONS] <COMMAND>
Commands:
tool Collection of CLI tools
add Add dependencies to the current game instance
launch Launch the current game instance
build-index Build the lookup index for a package registry
install Install the current game instance as described in `creeper.toml`
nuke Remove all configurations, user data, and cache
login Add a new Minecraft user account to the local configuration
init Create a new creeper package in an existing directory
dev CLI for development use
help Print this message or the help of the given subcommand(s)现在已经有了很多 Minecraft 第三方启动器,包括国内的 HMCL , PCL , BakaXL , 国外的 Prism Launcher 等。这些启动器编写得很完善,各种功能齐全,看似编写一个新的启动器已经是没有多少价值的重复劳动。然而,我们认为,即使第三方启动器的技术和规范已经很成熟,对模组玩家来说,仍有三个大问题亟须解决:
-
依赖与冲突。Minecraft 模组和一般的软件一样,会互相依赖。想要安装一个模组,经常需要先安装其他模组。mcmod.cn 就记载了 红石兵工厂 -> 热力膨胀5 -> 热力基本 -> CoFH 核心 -> Redstone Flux API 的依赖链条。显然,手动遍历整个依赖树,一个个下载文件,是很麻烦的。同时,经常有两个或多个模组冲突的情况,必须去掉其中一个,游戏才能正常运行。排查这些问题也很耗费时间。有时候玩家还必须手动重命名模组文件,通过字母排序调整模组的加载顺序,才能游玩。这也造成很多玩家不愿意更新模组(麻烦,「只要能跑就别动」)。
-
可复现性。如今,你可以在各个在线平台上看到 Minecraft 游戏错误的求助问题。众所周知,如果不能可靠地复现问题,就只有基于经验的猜测来解决。而由于不同玩家安装的模组不同,相同的模组安装的版本不同,设定了不同的配置项等,即使有了日志和崩溃报告等数据,帮助他人解决游戏问题,依然是一件费时费力的工作。模组玩家经常要自己解决问题,甚至学习相关的计算机技术。这客观上提高了模组游玩的门槛。
-
巨大的整合包。正因为上述的问题,许多玩家选择直接下载和安装整合包,而不是自己为游戏加装模组。尽管这种方案很便捷,但整合包通常占用巨大的存储空间:假设有十个整合包都安装了机械动力模组,在模组的
.jar文件一样的情况下,仍然会在电脑上保存十份(考虑到 Btrfs, APFS 这样的 CoW 文件系统还不普及,而且一般不会自动去重)。而且,如果玩家想在整合包的基础上,自己添加和修改一些模组,则还是会遇到之前的问题。我们认为,Minecraft 模组的趣味在于玩家可以自己定制游戏体验。要依赖于预制好的整合包,才能方便地游玩,是背道而驰的。
正如你所看到的,creeper 更适合被定义为「包管理器」而非 Minecraft 启动器。也就是说,creeper 在原理上更接近 npm , cargo , 或者 dnf , apt , pacman 这样的包管理器,附加了 Minecraft 启动功能,而非其他的第三方启动器。
我们认为,解决上文中问题所需要的工作,与现代包管理器的工作是完全一致的。包管理器通过 SAT 求解来自动满足依赖之间的约束关系,生成依赖锁文件来保证不同机器上的版本一致,并通过软链接和引用计数垃圾清理等手段,节省磁盘空间。Minecraft 模组玩家也应当受益于这些技术。
creeper 是一个包管理器命令行工具。就像其他包管理器,它可以创建项目(游戏实例),添加依赖(模组),生成和使用锁文件,并有用户管理,游戏安装,和启动的功能。
creeper-registry 是一个中心化的软件包仓库。所有人——不只是模组作者——都可以在此打包和发布模组(通过 GitHub Pull Request),以供所有 creeper 用户使用。
creeper 的 UI 基于命令行(不要害怕!)。如果你会操作命令行(其实很简单!),使用过其他的包管理器,或者愿意花一点点时间学习的话,creeper 完全可以作为你日常游玩 Minecraft 用的启动器。同时,creeper 基于 MIT 协议开源。这意味着如果你是 Minecraft 启动器作者或者软件开发者,你完全可以将 creeper 嵌入你的作品中,为你的用户提供更好的 Minecraft 模组游玩体验。
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.