应该有小伙伴听说了我最近退出 PotatoCraft Studio 和停止维护 QuickShop-Reremake 并单开一个分支的事情。
我一直没有正面回应过这件事,所以这一次我打算好好说一说。
回顾 QuickShop-Reremake 的起源和历史
QuickShop-Reremake 最初由我 fork 自 KaiKikuchi 的 QuickShop 项目,目的是为了让早已关闭的 “阳光之城-SunnySide” Minecraft 服务器在升级 1.13 的时候尽快能用上所需要的插件。
由于 Bukkit 1.13 一次著名的破坏性更新(MaterialData 被彻底废弃),原 QuickShop 已无法在 1.13 运行,且原作者几乎完全停止更新。
为了让大家都能用上 QuickShop,我在此期间和 Mgazul 一同修改和测试 QuickShop-Reremake,并随后在 2018 年在 SpigotMC 上公开了这个项目。
随后的 5 年间,我通过贡献超过 6k+ 个 commit 给 QuickShop-Reremake 带来了大量的新特性和错误修复。
于是,到了 2022 年,这个插件已在超过 3500+ 个服务器上运行 (源于 bStats 统计)。
在 2021 年下半年,因个人原因,将插件交由 sandtechnology 继续维护。
Apollo 分支
QuickShop-Reremake 在过去的 5 年间添加了大量功能,并经历了 MC 从 1.13 到 1.18 的过渡。
在此期间,Mojang 向 Minecraft 添加了大量的游戏内容,例如著名的 1.16 Hex Text 等。
然而到 5.1.0.3 为止,Reremake 已经存在了超级大量的 workaround 和冗余代码。
所以我发起了 Apollo 专项计划,对底层进行大改:
- 放弃 BungeeChat,转而使用 Adventure
- 模块化项目,在 Paper 平台使用 Paper API 以提升性能和降低代码复杂度并减少依赖项
- 启用 SQLite 数据库,转用 H2 并添加 EasySQL 解决手写 SQL 的问题
- 改良交互逻辑
- 使用 Spigot 推荐的 Library Loader 来避免 shade 大量依赖库,导致 jar 体积居高不下的问题
- 支持 BungeeCord 跨服务器消息传输
- 启用新的基于规则的价格限制器
- 新的统计信息记录器(FOr Plan)
- 一堆新的 API 等等…
当然,也有一些激进的部分:
- 需要 Java 16 和更高版本
- 需要 MC 1.16.5 和更高版本
2 月 11 日,上述内容基本都已开发完毕,并提供了从 Reremake 对配置文件和数据进行升级的转换器。
看起来挺好的,为什么突然发生了这些
因为合并被拒绝了,理由是 “v5已经足够稳定”。
诚然,v5 和 v4 目前都已非常稳定,可以投入生产环境使用,基本不会出现大问题。
然而,Reremake 最初出现并受到欢迎的原因就是持续对新功能的跟进和支持。如果我们不在跟进更新,那么 Reremake 就是下一个 NoLikeMe,终将被时代所淘汰。
大量的 workaround 也会成为升级迭代的阻碍,例如毫无意义的 Trader,延迟 2.5 秒发送信息的workaround,没有明显意义的翻译键 等等。
稳定性不是停滞不前原地踏步的理由。
而且,Hikari (Apollo/v6) 从一开始就不被看好(点击图片放大):
v6 从一开始就被认为会胎死腹中,即使做出来了也甚至不愿意尝试一下测试稳定性。
同时拒绝新改进,只是原地踏步维护已知没有问题的版本,害怕改变,惧怕新事物,惧怕不稳定。
而且何况这只是合并到 master 分支,而不是 release。
Reremake 作为创新而火起来的分支居然变成这样,实属可悲。
以及,长期以来双方都看对方代码感觉不爽,写的不完美,风格不一样,那么不如自己写自己的。解决一切问题。
根据开源世界的一贯法则,看着不爽就自己来。我决定退出 PCS,且放弃 Reremake 项目的维护,并进行硬分支。
说走就走
QuickShop-Hikari 现已在 Github 上发布,我将在测试稳定后发布到 SpigotMC。
如果你愿意一起让 QuickShop 变得更好,欢迎参与和贡献代码 :)。
Reremake 怎么办?
我已不再维护 Reremake,所以 Reremake 不管出现什么问题我都不会管了。
同时,Reremake 使用的错误追踪服务 “Rollbar” 和本地化翻译服务 “Crowdin” 届时也会收回,服务不再可用。
一直想说的话
我认识的很多人都有一种 “只要不出问题我就不去动它”、 “只要我不动它出了问题也不是我的责任” 和 “能用就行” 的态度 。
这种情况发生在用户和普通人的身上可以理解,但是在开发者身上出现是完全无法理解的。
软件的最终目的还是服务对象,追求更好的人机交互。
一个开发者都只想摆烂的话,为什么不赶紧回上个世纪 90 年代用翻盖手机和 MS-DOS 呢?
毕竟它们也不是不能用,而且也足够稳定不是吗?