文章

编译 Folia 服务端

Folia(https://papermc.io/software/folia)是 PaperMC 推出的一款新的 Minecraft 服务端。其解决了 Minecraft 高度依赖单核性能的问题,能够充分利用多核处理器的性能。但是,目前 PaperMC 没有释放任何 Folia 的发行版,这也是为什么我们需要自己构建它。

有一个 Folia Fork 叫做 Luminol(https://github.com/LuminolMC/Luminol),其提供 Bundler 和 PaperClip 构建。此外它还具备生电所需的许多特性,例如破基岩等。如果您需要这些功能或者不想自己构建,这是您很好的选择。

准备工作

安装和配置 Git

您需要安装 Git(https://git-scm.com/downloads),这是一个版本控制工具。下载安装包,遵循安装指引进行安装。随后设置 Git 用户名和密码:

$ git config --global user.name UserName
$ git config --global user.email "[email protected]"

通过配置用户名和邮箱,之后的步骤便不会因此而出错了!

拉取代码

cd 到一个合适的位置,然后让我们先克隆存储库:

git clone https://github.com/PaperMC/Folia.git

因为网络问题而不能正常克隆?您也许想试试通过代理服务器克隆:

git clone https://ghp.ci/https://github.com/PaperMC/Folia.git

如果您完成了这一步,输出看起来是这样的:

user@host Example % git clone https://ghp.ci/https://github.com/PaperMC/Folia.git
Cloning into 'Folia'...
remote: Enumerating objects: 2197, done.
remote: Counting objects: 100% (344/344), done.
remote: Compressing objects: 100% (172/172), done.
remote: Total 2197 (delta 228), reused 257 (delta 170), pack-reused 1853 (from 1)
Receiving objects: 100% (2197/2197), 4.55 MiB | 3.06 MiB/s, done.
Resolving deltas: 100% (1364/1364), done.
user@host Example % 

通过这几个步骤,您的计算机上已经有了 Git 和 Folia 的源代码。别忘了安装 Java Runtime!您可以使用 GraalVM(https://www.graalvm.org/downloads),Java 运行时的安装方法在此不做赘述。

合并代码

获取依赖

您下载的 Folia 源代码不包含来自 Mojang、Spigot、PaperMC 的构建依赖。因此,您需要拉取它们到您的计算机上才可继续构建,先执行cd Folia 切换到 Folia 源代码目录,然后拉取这些依赖文件:

./gradlew applyPatches

这一步根据网络情况进度有快有慢,当然很有可能会拉取失败,您只需重新执行命令即可。如果还是不行,您可能需要使用代理。完成后,输出可能看起来是这样的:

user@host Folia % ./gradlew applyPatches
Starting a Gradle Daemon (subsequent builds will be faster)

> Configure project :
paperweight-patcher v1.7.1 (running on 'Mac OS X')

> Configure project :paper
paperweight-core v1.7.1 (running on 'Mac OS X')

> Task :applyApiPatches
Creating Folia-API from patch source...
Applying patches to Folia-API...
5 patches applied cleanly to Folia-API

> Task :applyGeneratedApiPatches
Creating generated from patch source...
Applying patches to generated...
No patches found

> Task :applyServerPatches
Creating Folia-Server from patch source...
Importing 23 classes from vanilla...
Importing 0 data files from vanilla...
Importing 0 classes from library sources...
Applying patches to Folia-Server...
18 patches applied cleanly to Folia-Server

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 3m 30s
5 actionable tasks: 5 executed
user@host Folia % 

开始构建

完成这一步之后,您可正式开始构建:

./gradlew createMojmapPaperclipJar
# 建议使用这个命令来构建 PaperClip 可执行 Jar 文件,因为这样其内部的映射关系不会被打乱。这样构建出的服务端会在第一次运行时下载 Mojang 的服务端文件并 Patch 它,所以第一次运行时必须联网。
./gradlew createReobfBundlerJar
# 不建议使用这个命令来构建,因为 Mojang 在 Minecraft EULA 中禁止分发服务端,而且这样做可能导致其内部映射关系被打乱。但如果您需要离线运行 Folia 服务器,这无疑也是个好的选择。

在您完成构建后,输出应该看起来像这样:

user@host Folia % ./gradlew createMojmapPaperclipJar

> Configure project :
paperweight-patcher v1.7.1 (running on 'Mac OS X')

> Configure project :paper
paperweight-core v1.7.1 (running on 'Mac OS X')

BUILD SUCCESSFUL in 1m 9s
19 actionable tasks: 10 executed, 9 up-to-date
user@host Folia % 

恭喜您!到这里您已经完成了构建。请在build/libs 文件夹中找到您的构建产物。

注意事项

目前,Folia 的 1.21.1 版本仍在开发,如果您需要 Folia 1.21.1,您可以使用这个命令来获取它的源代码:

git clone https://github.com/PaperMC/Folia.git --branch dev/1.21.1

这样将指定我们所需的 1.21.1 开发版本分支。要构建它,请根据上面的教程来进行。

License:  CC BY 4.0