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