与基岩版全平台互通(Geyser + Spigot)
前面几篇搭的都是纯 Java 版服务器,只有 PC Java 客户端能进。但中国版还有庞大的**基岩版(PE / 手机、Win10)**玩家群体。这一篇讲怎么用 Geyser + Spigot 方案,让一套 Java 服务端同时接纳 Java 和基岩版玩家——实现全平台互通。
进阶 / 实验性主题
本篇涉及协议层适配,难度明显高于前面的插件开发。标准 Geyser 只支持国际版基岩版,要兼容网易中国版协议需要额外改造。没有 Java 网络编程与协议基础的话,建议直接用现成方案(见文末现成方案),别硬啃协议层。
为什么需要 Geyser
Java 版和基岩版是两套完全不同的网络协议:
- Java 版:TCP,基于 Netty 的 Java 版 packet 协议
- 基岩版:UDP + RakNet,Bedrock packet 协议,登录带身份链
两者无法直接互通。Geyser 就是中间的"翻译官"——它监听基岩版端口,把基岩版客户端的 UDP/RakNet 协议实时翻译成 Java 版协议,再转发给本地的 Spigot 服务端。对 Spigot 来说,进来的基岩版玩家和普通 Java 玩家没区别。
Java 客户端 ──(Java 协议 TCP)──────────────┐
▼
基岩版客户端 ──(Bedrock 协议 UDP)──▶ Geyser ──(翻译成 Java 协议)──▶ Spigot 服务端
Floodgate(账号桥接)为什么是 Spigot 不是 BungeeCord
Geyser 可以以插件形式跑在 Spigot/Paper 里(Geyser-Spigot),也可独立部署或跑在 BC 上。单机服直接用 Spigot 插件版最简单;多子服架构则把 Geyser 放代理层。本篇以 Geyser-Spigot 插件模式为主线讲。
标准方案:Geyser + Floodgate
先看国际版的标准接入方式(后面再讲网易版的改造),理解链路:
组件
| 组件 | 作用 |
|---|---|
| Geyser | 基岩⇄Java 协议翻译 |
| Floodgate | 允许基岩版玩家无需 Java 正版账号即可进服,负责账号桥接与身份注入 |
安装
把两个插件丢进 plugins/ 目录:
plugins/
├── Geyser-Spigot.jar
└── floodgate-spigot.jar重启生成配置。核心配置 plugins/Geyser-Spigot/config.yml:
bedrock:
address: 0.0.0.0
port: 19132 # 基岩版监听端口
remote:
address: auto # 自动指向本机 Spigot
port: 25565 # Java 服务端端口
auth-type: floodgate # 与 Floodgate 配合时用 floodgate标准情况下重启后,国际版基岩客户端连 IP:19132 即可进服。
但这套连不上网易客户端
以上是国际版流程。网易中国版基岩客户端连不进来——因为网易用的是魔改协议和自己的账号体系。下面讲怎么改。
网易版的难点
网易中国版基岩版(PE)不是国际版 Bedrock,标准 Geyser 无法直接对接,差异主要在三处:
| 差异点 | 国际版 | 网易中国版 |
|---|---|---|
| RakNet / 加密 | 标准 Bedrock RakNet 与加密流程 | 网易魔改的握手与加密 |
| 登录身份链 | Xbox Live 的 JWT 身份链(chain) | 网易账号体系,走网易认证 |
| 协议版本 / packet | CloudburstMC 标准 Bedrock Codec | 网易版本号与部分 packet 结构不同 |
结果就是:Geyser 默认的 BedrockCodec(packet 编解码)、握手加密、登录验证这三层,都要替换成兼容网易协议的实现,网易 PE 客户端才能被 Geyser 正确识别、解密、验证并转发。
兼容网易协议:思路与参考
核心工作量在让 Geyser 的基岩侧协议层"听得懂"网易客户端。没有官方现成的网易版 Geyser 源码,但可以参考几个开源项目里已经实现网易协议的部分:
可参考的开源实现
| 项目 | 参考价值 |
|---|---|
| NukkitMOT | 网易改造过的 Nukkit 服务端分支,原生兼容中国版基岩协议。其登录握手、加密流程、packet 编解码、版本号定义是最直接的参考——把它处理网易协议的那套逻辑,移植/对照到 Geyser 的基岩侧 |
| EaseCation 开源项目 | 知名中国版 PE 服务器团队,开源了协议与分布式相关代码(如 Protocol / Nemisys / SynapseAPI)。其对网易 packet、登录链的处理可作为交叉参考,验证协议细节 |
改造要点
对照上述项目,在 Geyser 基岩侧主要改这几处:
- 协议版本 / Codec:把 Geyser 使用的 Bedrock 协议版本号、packet 编解码器,改成与目标网易客户端版本匹配的定义
- RakNet 握手与加密:适配网易魔改的握手流程与加密密钥协商,否则连接建立不起来
- 登录身份链验证:网易客户端登录带的不是 Xbox 身份链,而是网易账号信息——这一步要接网易的 PE 认证接口(见下节),验证通过再放行
- Floodgate 身份注入:验证通过后,把玩家身份注入 Java 侧(用户名、UUID),让 Spigot 认作合法玩家
协议逆向的合规红线
网易中国版协议属于私有协议。分析、适配协议须遵守《网易游戏使用许可及服务协议》及相关法律法规,仅用于官方允许的正规服务器接入,不得用于外挂、破解、盗版联机等用途。参考开源项目也应遵守其开源许可证。
与网易 PE 认证结合
互通服务器上线时,认证要同时接 PC 和 PE 两套:
- 网易的认证接口、商业化 key 区分 PC 和 PE,即使是互通服务器,也要分别申请 PC 和 PE 的 game_id 与密钥(见认证接入、商业化接入)
- PE 玩家通过 Geyser 进来时,其登录验证要走网易 PE 认证接口,而非 Xbox
- Java 玩家仍走 PC 认证(BungeeCord / Velocity 那套)
认证是上线硬门槛
无论 Java 还是 PE,中国版玩家都必须通过官方启动器 + 官方认证进服。互通方案里,Geyser 的登录环节必须接好网易 PE 认证,否则 PE 玩家进不来、也无法上线合规。
现成方案:少走弯路
自己改 Geyser 协议层成本很高。如果不想从零适配,社区已有现成的网易版 Geyser 方案可直接用或参考:
- 网易版 Geyser 扩展 / 魔改包:社区(如布吉岛开源计划、MineBBS 等)提供了已适配网易协议的 Geyser 魔改版本或扩展,开箱即用或改动量小
- 网易官方开服工具:网易开发者平台也提供了
Spigot + Geyser、NukkitMOT、AllayMC等开服工具组合,优先看官方文档给的推荐方案
优先用现成的
除非你有明确的协议定制需求,否则优先用现成的网易版 Geyser 方案 / 官方工具,把精力放在玩法上。自己适配协议只在现成方案满足不了时才考虑。
互通的体验差异
即便协议接通了,Java 和基岩版机制不同,运营时要注意:
- 战斗 / 红石 / 机制:Geyser 以 Java 版逻辑为准,基岩玩家的手感(如攻击间隔、移动)会和原生 PE 有差异
- 表单 / UI:基岩版特有的 Form 表单可用,但复杂的 Java 版 GUI(箱子界面)对基岩玩家的呈现有限制
- 材质 / 皮肤:需处理两端材质与皮肤的兼容
- 版本对应:网易 PE 版本更新常滞后于国际版,Geyser 协议版本要与目标 PE 客户端严格对应,不匹配就连不上
落地流程小结
- 搭好 Spigot/Paper Java 服务端,玩法跑通
- 装 Geyser-Spigot + Floodgate,先用国际版逻辑验证链路能通
- 换成兼容网易协议的 Geyser(现成魔改包,或参考 NukkitMOT / EaseCation 自行适配)
- 接好 PE 认证(网易 PE 认证接口 + PE game_id / 密钥)
- 用网易基岩版客户端测试进服,验证登录、玩法、材质
- 按上线流程走入驻、二审、上架(PC/PE 认证与商业化分别配置)
全平台互通让你的服务器同时覆盖 Java 与基岩版玩家,是扩大用户盘的关键一步——但协议适配门槛高,能用现成方案就别造轮子。回到Java 网络游戏首页。
