众所周知因为 Minecraft 使用 Java 作为开发语言,这导致其他人很容易就能反编译出他的源代码,进行二次修改后扩展游戏内容,这种开放性最终也造就了这款史上最畅销的游戏传奇。
然而多年过去,随着游戏内容越来越多,Java 作为一个半解释性、半编译性的语言,性能逐渐捉襟见肘。外加 ojang 的历史遗留代码(俗称“屎山代码”),导致其性能表现越来越不尽如人意。
当然,这些年 Java 也在持续进行版本迭代,优化其 JVM 虚拟机性能,同时加入了许多新特性,例如更高效的调用方式、新的 GC 内存回收机制等。原本按照玩家设想,ojang 应该积极采用 Java 的新特性来优化游戏性能,然而 ojang 似乎并未完全朝这个方向努力,导致游戏性能越来越跟不上日益庞大和复杂的游戏内容。
随着后续出现的各种优化 Mod,客户端的游戏性能确实得到了极大改善。同样,服务端这边也涌现出许多基于原版开发的第三方服务端,其中以 Bukkit API 为主,衍生出了众多插件类服务端。PaperMC 旗下也推出了几乎重写了整个区块系统的 Folia 服务端。
这些服务端功能各异,但都统一在性能上做了大量优化。然而,Minecraft 从最初设计上就没考虑单服务器下承载大量玩家的情况。由于其核心框架是单线程的,若不能进行大刀阔斧的重构,那么无论怎样修改,都无法脱离主要逻辑处理仍受限于单线程的瓶颈。
Pumpkin 是由 Pumpkin-MC 社区开发的一款全新的、开源的、高性能、可扩展的 Minecraft 服务端,它使用 Rust 作为开发语言。
它旨在为玩家提供快速、高效且高度可定制的游戏体验,专注于极致的性能优化和流畅的玩家体验,同时严格遵循原版游戏的核心机制与行为。
那么 Pumpkin 的核心功能和相较于其他同样完全重写服务端到底有什么竞争优势?
然而多年过去,随着游戏内容越来越多,Java 作为一个半解释性、半编译性的语言,性能逐渐捉襟见肘。外加 ojang 的历史遗留代码(俗称“屎山代码”),导致其性能表现越来越不尽如人意。
当然,这些年 Java 也在持续进行版本迭代,优化其 JVM 虚拟机性能,同时加入了许多新特性,例如更高效的调用方式、新的 GC 内存回收机制等。原本按照玩家设想,ojang 应该积极采用 Java 的新特性来优化游戏性能,然而 ojang 似乎并未完全朝这个方向努力,导致游戏性能越来越跟不上日益庞大和复杂的游戏内容。
随着后续出现的各种优化 Mod,客户端的游戏性能确实得到了极大改善。同样,服务端这边也涌现出许多基于原版开发的第三方服务端,其中以 Bukkit API 为主,衍生出了众多插件类服务端。PaperMC 旗下也推出了几乎重写了整个区块系统的 Folia 服务端。
这些服务端功能各异,但都统一在性能上做了大量优化。然而,Minecraft 从最初设计上就没考虑单服务器下承载大量玩家的情况。由于其核心框架是单线程的,若不能进行大刀阔斧的重构,那么无论怎样修改,都无法脱离主要逻辑处理仍受限于单线程的瓶颈。
什么是 Pumpkin?
Pumpkin 是由 Pumpkin-MC 社区开发的一款全新的、开源的、高性能、可扩展的 Minecraft 服务端,它使用 Rust 作为开发语言。它旨在为玩家提供快速、高效且高度可定制的游戏体验,专注于极致的性能优化和流畅的玩家体验,同时严格遵循原版游戏的核心机制与行为。
那么 Pumpkin 的核心功能和相较于其他同样完全重写服务端到底有什么竞争优势?
遵循原版游戏机制
1.
- 与 Cuberite、Obsidian、Ferrumc 等服务端不同,我们完全遵守原版游戏的核心特性和机制,我们的开发团队中有相当一部分成员是资深的红石大佬,确保每个细节都符合预期。
2.
- 在开发服务端功能时,我们优先保证代码逻辑与原版特性和行为完全一致,其次才考虑性能提升。这确保了最大程度的兼容性和原汁原味的体验。
多平台&版本支持:
1.
- 南瓜端同时支持 Java 版 和 基岩版客户端登录,实现了真正的跨平台同服。当然,游戏特性的实现主要以 Java 版为基准。
- 支持的基岩版本:1.21.30
2.
- 南瓜自带多版本支持(目前只维护 Java 客户端且实际内容以最新支持版本为主),截止到本文编写时主分支已经支持 1.21.7 ~ 1.21.11 的客户端登陆。
- 更多历史版本支持正在开发中:https://github.com/Pumpkin-MC/Pumpkin/pull/1435
3.
- 允许管理员配置身份验证服务器,可接入第三方验证服务器,也可允许盗版和正版账户同时登陆。
- 注意:暂时还无法多个身份验证服务器共存。
强大的区块系统:
1.
- 全新开发的多线程生成和保存/读取区块系统,并提供 API 接口以实现第三方插件调用,经最新测试,使用原版 50 到 100 倍的飞行速度将区块视距拉高到最高 32 视距飞行,在更低的资源使用情况下区块加载/保存/生成的性能相较原版预计提升 20~30 倍左右。
2.
- 得益于使用 Rust 重写的底层,我们的区块系统在支持相同格式时,拥有更高的性能和更低的资源占用,未来还将支持更多区块格式。
- Anvil(原版默认):已完全支持
- Linear(线性区域):已完全支持
- Slime(Anvil 的改进版):尚在计划中
- Schematic(结构):尚在计划中
3.
- 使用我们自己实现的算法库,能够在编译阶段完成 SIMD 指令的支持,加速世界的生成,并且具备更高的可定制化的体验。
4.
- 使用相比原版性能更强,速度更快,稳定性更好的 Lz4-java-wrc、flate2、ruzstd 强大的算法库,得益于 Rust 的实现效率以及避免了 JNI 开销所以相较于原版预计综合提升 30%~数倍不等的性能提升和降低了超过 30% 的内存使用率。
5.
- 现已支持调用特定 CPU 或 SoC 的指令集(如 SIMD)来实现关键算法的硬件加速优化。未来还可能探索加入 GPU 加速地形生成等功能,以进一步降低和平衡 CPU 负载。
更快的网络性能:
1.
- 由于重写了整个网络栈,大量采用多线程与异步 I/O 模型,相较于原版,数据处理效率更高,带宽占用更少,网络延迟也更低。
2.
- 原生支持主流反代理服务,且兼容稳定,数据包处理性能高效,未来还会扩展其他网络协议支持。
- BungeeCord:已完全支持
- BungeeGuard:暂时不支持
- Velocity:已完全支持
- Query:已完全支持
- RCON:已完全支持
- Gourd(一个基于 Pumpkin 协议库的轻量级代理端):https://github.com/Purdze/Gourd
3.
- 使用了更高效的压缩库,同时支持更强的压缩算法,相较于原版使用的 ZLIB 库,具有更高的压缩效率,更低的延迟,更强的资源利用率。
4.
- 列如,当方块或者实体距离玩家超过一定视野距离或者不在玩家视野范围内时自动较少非必要的状态更新(如熊猫的情绪、鸡的产蛋冷却、熔炉状态、行为动画等),当玩家接近方块或者实体一定距离时恢复正常更新,从而显著降低网络流量。
5.
- 允许插件通过自定义负载(Custom Payload)访问插件通道,实现与客户端模组的深度互操作性(例如与 Simple Voice Chat模组通信)。这使 Pumpkin 插件能够与依赖插件通道的各类客户端模组进行双向通信。
全面的扩展方式:
1.
- 南瓜端在拥有自身高效原生 API 的同时,其架构允许通过“插件加载器”作为桥梁,来支持其他编程语言编写的插件。
- Lua 脚本加载器:https://github.com/PumpkinPlugins/PLua
- Bukkit、Spigot、Paper插件加载器:https://github.com/Pumpkin-MC/PatchBukkit
- C# 插件加载器:尚未完成
2.
- 南瓜拥有一个非官方(是一位项目管理员开发的)的可视化插件开发工具,由于主体 API 尚处于快速迭代期,因此工具后续开发已经暂停。
3.
- 规划在未来支持向服务端添加真正的 Mod(即新增内部物品、方块、功能逻辑)。
4.
- 南瓜拥有官方的扩展市场,目前处于小范围测试阶段。设计目标是支持多语言插件、多平台分发,并包含付费资源支持机制
5.
- 不与本文中出现的插件重复
- 基础功能:
- ESS 基础:https://github.com/tangjuyo/PumpkinEssentials
- 世界管理(类似 Multiverse-Core):https://github.com/PumpkinPlugins/PumpkinVerse
- 区块预生成:https://github.com/Purdze/Planter
- 命令限制器:https://github.com/PumpkinPlugins/CommandLimiter
- TAB:https://github.com/topi-banana/pumpkin-tabtps
- 世界编辑:https://github.com/topi-banana/pumpkin-worldedit
- 权限(写这个帖子的时候南瓜还没有权限系统):https://discord.com/channels/1268592337445978193/1340462812606103584
- Simple Voice Chat(因开源协议暂未开放):https://discord.com/channels/854659575324344340/1470260490805706833/1470267714890367190
- 玩法扩展:
- PvP插件(因南瓜缺少很多基本功能暂停开发):https://github.com/tn-lorenz/PumpkinSoup
- NPC:https://github.com/Purdze/NPCs
- 飞行:https://github.com/CuzImClicks/Pumpkin_FlyCommand
强大的牛马团队:
1.
- 南瓜的目标是在 2026 年底之前完成 1.0.0 的第一个正式版发布,这会具备一个可通关的生存玩法的基本要求,以下是几个主要的官方的完成进度列表。
- 区块(Chunk):https://github.com/Pumpkin-MC/Pumpkin/issues/36
- 命令(Commands):https://github.com/Pumpkin-MC/Pumpkin/issues/15
- 实体(AI):https://github.com/Pumpkin-MC/Pumpkin/issues/1406
- 对话(Dialog):https://github.com/Pumpkin-MC/Pumpkin/issues/1452
- 插件(Plugins):https://github.com/Pumpkin-MC/Pumpkin/issues/1407
- 玩家(Player):https://github.com/Pumpkin-MC/Pumpkin/issues/1405
- 战斗(Combat):https://github.com/Pumpkin-MC/Pumpkin/issues/1404
- 红石(Redstone):https://github.com/Pumpkin-MC/Pumpkin/issues/1402
- 协议(Protocol):https://github.com/Pumpkin-MC/Pumpkin/issues/1401
2.
- 目前截止文档编辑直接向南瓜端贡献的开发者共有 193 位开发者,这还不包括他的各种衍生项目,直接或者间接向南瓜和各种衍生项目(包括文档,压测工具,网站等)贡献的开发者超过 300+。Github 的 Star 更是达到 7k+ 甚至比 Folia(4.2k)还要多。
3.
- 只记录官方和一些主要的第三方的项目(不与本文上方出现的项目重复)。
- BotMark(南瓜官方的压测工具):https://github.com/Pumpkin-MC/BotMark
- Extractor(南瓜官方的客户端数据导出工具):https://github.com/Pumpkin-MC/Extractor
- Sprout(可以理解为类似 GUI+Plan 管理工具):https://github.com/Purdze/Sprout
4.
- 我们广泛地接受来自社区的意见和建议,这会使得我们的发展更加充满创意和动力。
我们面临的挑战:
1.
- 由于需要遵循原版游戏特性,因此会造成在整体设计上的一些缺陷,虽然南瓜对比原版各方面都拥有大量的提升,但是当一个功能拥有效率更高、资源更低的方式来实现的时候,常常为了能够与原版行为类似而采用效率更低的方式来运行,但是我们相信只要持续坚持和改进总能都取得特性和性能之间的平衡。
2.
- 即便我们开发出了能够加载 Bukkit、Spigot、Paper 插件的 PatchBukkit 也依然无法 100% 完美兼容原有生态,列如 PatchBukkit 不支持 NMS 和多线程插件。
3.
- 我们不得不承认完全重写服务端的 BUG 和稳定性相对比较差,这是一个需要长期维护和修复的过程。
4.
- 即便我们做了很多内容但是对比原版游戏内容来说还是杯水车薪,但是随着我们的快速更新和强大的开发团队,我们一定会在计划规定的时间内给大家一个相对完整的游戏体验。