- 注册
- 2021/03/12
- 消息
- 409
- 金粒
- 1,088金粒
原文:https://forums.papermc.io/threads/the-future-of-paper-hard-fork.1451/
随着 Minecraft 1.21.4 第一个构建版本的发布,我们激动地向大家宣布一些振奋人心的消息。继 1.20.5 版本成功推出 Mojang 映射服务器后,Paper 项目迎来了关键的下一步——从上游硬分叉。
一个巨大优势是 Paper 在 Minecraft 发布期间的发布速度将显著加快。硬分叉后,我们能够更新 Paper 到发布候选版本、预发布版本,甚至可能是快照版本,以便尽早将实验构建提供给大家。
通过 paperweight-userdev 使用服务器内部功能也将像以前一样继续工作,但我们建议您慢慢准备您的插件在禁用 jar 和反射重映射的 Mojang 映射服务器上运行。这可以通过 -Dpaper.disablePluginRemapping=true 启动标志实现。如果您还没有使用 paperweight-userdev,尽管直接使用内部 Vanilla 类,您应该转向它。如果您已经在使用,您不需要做任何其他事情,因为您稍后可以简单地移除混淆步骤,将与未来的变更兼容——只需要处理反射调用。然而,我们会给您足够的时间来准备这一点,并将继续自动重映射插件一段时间。一旦发生这种情况,支持多个版本将变得更加容易,这正是当前混淆映射和任意 CraftBukkit 包重定位所阻止的。单一的标准映射集也将使调试和代码共享变得更加容易。
随着转向 Paper-API 以及后来的 Mojang 映射服务器,您的插件可能不再在 Spigot 上运行。Paper 在最近版本上的市场份额为 85%-90%(根据 bStats 上一些最大的插件统计,包括 Paper 的分支),这应该使您能够支持几乎所有的用户在硬分叉后的版本,即使不兼容 Spigot。发布需要 Paper 的插件可以在许多平台上完成,最著名的是 Hangar 和 modrinth。
为了保留历史记录,我们已经合并了多个 git 树,包括我们完整的补丁文件历史记录,并将这些补丁应用到现有的 Spigot 历史记录中的实际提交中。包含已反编译的 Vanilla 源文件的旧状态已被过滤掉。不幸的是,历史记录的变化意味着所有开放的 PR 将不得不稍后关闭,它们也不能被强制推送到新分支。请不要在我们提供如何半自动更新旧拉取请求的详细信息并为新拉取请求开绿灯之前重新打开 PR。
我们将花费接下来的几周更新仓库,通过改变补丁结构和修复更新的反编译器和新的本地/参数映射集带来的无尽补丁冲突。一旦完成,我们将这些构建作为实验构建推出,以确保我们没有破坏任何向后兼容性或引入任何新问题。一旦我们完成了围绕分叉和用户开发的工具,我们将发布一个公告,说明如何更新分叉,并通知 Paper 贡献者如何正确更新他们的拉取请求到新的主分支。在新的 Minecraft 发布中,您可以期待 API 和初步构建甚至在完整的 Minecraft 发布日之前发布。最终,我们将开始清理和自动迁移不同的配置,并逐步移除长期不工作的弃用 API,但我们的重点仍然是使这些过渡尽可能平滑和优雅。
随着 Minecraft 1.21.4 第一个构建版本的发布,我们激动地向大家宣布一些振奋人心的消息。继 1.20.5 版本成功推出 Mojang 映射服务器后,Paper 项目迎来了关键的下一步——从上游硬分叉。
硬分叉背景
自项目启动以来,Paper 一直基于 Spigot 开发,与其引入的功能保持同步。如今,Paper 在 Spigot 基础上已应用了近 1600 个额外补丁,超过 130000 行代码。这种分歧使我们严格遵循 Spigot 更新政策,限制了项目发展,尤其是版本更新变慢,因为 Spigot 对快照、预发布和候选发布的更新是在封闭环境中进行的。硬分叉意义
硬分叉消除了这种不必要的延迟,使 Paper 成为独立项目,简化了服务器和主要缺失 API 的开发,如最近的注册表和物品数据组件 API。从 1.21.4 版本开始,Paper 不再受 Spigot 未来变化约束,让我们和社区能按自己的条件前进。尽管这可能听起来有些可怕,但我们为每个相关用户群体准备了有用的声明,致力于使这个过程尽可能平滑。如有任何问题,请随时在我们的 Discord 上提问。对各用户群体的影响
服务器所有者/管理员
作为服务器所有者/管理员,最初将没有变化。目前,bukkit.yml 和 spigot.yml 会继续像往常一样工作。已在稳定 1.21.4 版本上运行的插件以及编译到旧版 Spigot 的插件也将继续运行。随着 Paper 和 Spigot 插件 API 的逐渐分歧,唯一可能的问题是插件尝试使用硬分叉后引入的 Spigot 特性。一个巨大优势是 Paper 在 Minecraft 发布期间的发布速度将显著加快。硬分叉后,我们能够更新 Paper 到发布候选版本、预发布版本,甚至可能是快照版本,以便尽早将实验构建提供给大家。
插件开发者
对于服务器所有者来说,插件 API 最初将没有变化。从 Spigot 继承的现有方法将被保留并继续工作,包括我们弃用的旧文本/聊天颜色等方法。然而,我们不再拉取 Spigot 在硬分叉后添加的所有新 API。为了避免意外调用这些方法,我们强烈建议将您的插件构建依赖于 Paper-API。我们仍然愿意手动拉取一些新的上游 API 到 Paper 中,以确保插件开发者不会失去功能,但你不应该依赖于此。通过 paperweight-userdev 使用服务器内部功能也将像以前一样继续工作,但我们建议您慢慢准备您的插件在禁用 jar 和反射重映射的 Mojang 映射服务器上运行。这可以通过 -Dpaper.disablePluginRemapping=true 启动标志实现。如果您还没有使用 paperweight-userdev,尽管直接使用内部 Vanilla 类,您应该转向它。如果您已经在使用,您不需要做任何其他事情,因为您稍后可以简单地移除混淆步骤,将与未来的变更兼容——只需要处理反射调用。然而,我们会给您足够的时间来准备这一点,并将继续自动重映射插件一段时间。一旦发生这种情况,支持多个版本将变得更加容易,这正是当前混淆映射和任意 CraftBukkit 包重定位所阻止的。单一的标准映射集也将使调试和代码共享变得更加容易。
随着转向 Paper-API 以及后来的 Mojang 映射服务器,您的插件可能不再在 Spigot 上运行。Paper 在最近版本上的市场份额为 85%-90%(根据 bStats 上一些最大的插件统计,包括 Paper 的分支),这应该使您能够支持几乎所有的用户在硬分叉后的版本,即使不兼容 Spigot。发布需要 Paper 的插件可以在许多平台上完成,最著名的是 Hangar 和 modrinth。
Paper 贡献者
硬分叉对 Paper 的贡献产生了巨大影响,大多数都是积极的。随着硬分叉,Paper 仓库将进行全面重组,将整个 API 和 API 实现直接作为源代码移动到仓库中。现在可以直接在.java 文件上进行这些贡献,无需编辑/重建补丁。对 Mojang 拥有的源代码的更改仍将基于补丁,但每个 Vanilla 源文件将由单个文件补丁表示。对于像 anti-xray 和 moonrise 这样的大型更改,Paper 也将在之前描述的布局之上提供旧的功能基础补丁方法,结合了两种技术的最佳实践,旁边还有更新的反编译器(Vineflower)和映射集(Parchment)。为了保留历史记录,我们已经合并了多个 git 树,包括我们完整的补丁文件历史记录,并将这些补丁应用到现有的 Spigot 历史记录中的实际提交中。包含已反编译的 Vanilla 源文件的旧状态已被过滤掉。不幸的是,历史记录的变化意味着所有开放的 PR 将不得不稍后关闭,它们也不能被强制推送到新分支。请不要在我们提供如何半自动更新旧拉取请求的详细信息并为新拉取请求开绿灯之前重新打开 PR。
Paper 分叉开发者
您需要处理的主要变化是更新的反编译器和映射。一旦我们的初步更新过程完成,我们将为您提供更多信息。将发布与我们的新仓库结构兼容的新版本的 Paperweight 补丁程序。目前,请确保将 1.21.3 及更旧版本的上游目标更改为新的存档仓库。下一步/大致时间线
很难给出确切的时间线,但您可以通过以下 GitHub 问题跟踪我们的硬分叉进程的大致进展:PaperMC/Paper#11735我们将花费接下来的几周更新仓库,通过改变补丁结构和修复更新的反编译器和新的本地/参数映射集带来的无尽补丁冲突。一旦完成,我们将这些构建作为实验构建推出,以确保我们没有破坏任何向后兼容性或引入任何新问题。一旦我们完成了围绕分叉和用户开发的工具,我们将发布一个公告,说明如何更新分叉,并通知 Paper 贡献者如何正确更新他们的拉取请求到新的主分支。在新的 Minecraft 发布中,您可以期待 API 和初步构建甚至在完整的 Minecraft 发布日之前发布。最终,我们将开始清理和自动迁移不同的配置,并逐步移除长期不工作的弃用 API,但我们的重点仍然是使这些过渡尽可能平滑和优雅。
简而言之
这一变化使我们能够处理快照版本,并更自由地处理主要缺失的 API。对 Paper 的贡献变得更加容易,插件开发也将变得更加容易,无论是在 API 还是服务器内部!- 服务器管理员:无需采取行动,但从 1.21.4 开始,您可能不再能够回到 Spigot。
- 插件开发者:无需立即采取行动,但从 1.21.4 开始,您应该针对 Paper-API 进行编译。
- Paper 贡献者:您将不得不重新做您的 PR,但我们将稍后告诉您更多,并为您提供有用的脚本和工具。
- 分叉/服务器托管商:迁移任何旧版本分支的使用(例如 ver/1.8.8,ver/1.21.1;所有低于 1.21.4 的版本)到新的存档仓库。
最后编辑: