【MCDR 系列教程 01】简介

近几年的 Minecraft 原版技术生存成为了一个热门话题,或许是因为疫情大家得以闲暇捡起数年前放下的游戏、或许是 TIS 成功的宣传让学生们从索然无味的手机游戏中抬起头来,这个历史悠久但小众的玩法逐渐进入了大众的视野。近三年,大量新的技术生存服务器不断涌现又逐渐没落,无论新老玩家都被这款有着十年历史的游戏所展现出来的无限潜力而震撼。而在这些服务器的背后,几乎都在使用一个划时代的服务端管理工具——MCDReforged。

演变历史

2018 年 11 月[1],TIS 开服前夕,chino_desu 开发了服务端管理工具 MCDaemon[2]。在不修改原版服务端的情况下,提供了多种服务端管理功能,例如服务器重启、存档备份和自动回档、跨服聊天、镜像服存档同步等。

MCDaemon 的第一条 commit<sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><span class="hint--top hint--rounded" aria-label="kafuuchino-desu. [Initial commit](https://github.com/kafuuchino-desu/MCDaemon/commit/ab6e9d92fdcb0f2a2a13c77d573d1af61fc51920). GitHub. 2018-11-03 [2022-08-23]. (原始内容[存档](https://web.archive.org/web/20220823093612/https://github.com/kafuuchino-desu/MCDaemon/commit/ab6e9d92fdcb0f2a2a13c77d573d1af61fc51920)于2022-08-23).">[3]</span></a></sup>

随着 TIS 开服和发展,MCDaemon 展示出来的强大功能,尤其是备份回档受到了越来越多人的关注,并期望使用它来管理自己的服务器。但 MCDaemon 有个明显的缺点:不支持 Windows。于是 lightbrotherV 创建了 MCDaemon-go[4] 项目,实现了 Windows 支持。

已经归档的 MCDaemon-go 项目

MCDaemon-go 的第一条 commit<sup id="fnref:5" class="footnote-ref"><a href="#fn:5" rel="footnote"><span class="hint--top hint--rounded" aria-label="lightbrotherV. [Initial commit](https://github.com/TISUnion/MCDaemon-go/commit/72322490b6aa5570baafc3de10f3af5b32380e20). GitHub. 2018-12-02 [2022-08-23]. (原始内容[存档](https://web.archive.org/web/20220823112917/https://github.com/TISUnion/MCDaemon-go/commit/72322490b6aa5570baafc3de10f3af5b32380e20)于2022-08-23).">[5]</span></a></sup>

虽然 MCDaemon-go 支持了 windows,但是并不支持 MCDaemon 的 Python 插件,重复开发两个生态的插件显然不是明智之举,对于长期社区发展也不是好事。这段时间里,社区用户也创建了一些 Fork,例如 MCD-Windows。这些 Fork 现在大部分已经删库。

MCDaemon 在被 TIS 使用一段时间后暴露出许多问题,有很大的优化空间,于是 MCD 2.0 的开发也提上了日程。

2020年3月,Fallen_Breath 开始了 MCDReforged[6] 的开发,其支持在 Windows 下运行。

MCDReforged 的第一条 commit<sup id="fnref:7" class="footnote-ref"><a href="#fn:7" rel="footnote"><span class="hint--top hint--rounded" aria-label="Fallen-Breath. [init](https://github.com/Fallen-Breath/MCDReforged/commit/e7cc72a523f8c8b113df37c41015704cf4031e2b). GitHub. 2020-05-30 [2022-08-23]. (原始内容[存档](https://web.archive.org/web/20220823113116/https://github.com/Fallen-Breath/MCDReforged/commit/e7cc72a523f8c8b113df37c41015704cf4031e2b)于2022-08-23).">[7]</span></a></sup>

chino 将 MCD 2.0 的源码和预期功能列表给了 Fallen_Breath。2020年4月,MCDR 发布了第一个预览版本。同年5月,chino 宣布停止 MCDaemon 的开发和维护。

我一个周末搓的所以根本不想重构。MCDR 开发初期,我是把写了一小部分的 MCD 2.0 源码给了 Fallen 的,以及一个 MCD 2.0 预期的功能列表。很难说有没有帮上狐狸写 MCDR,但是 MCDR 的 src 里面目录结构的确是 MCD 2.0 的样子。
—— chino_desu

MCDaemon 的文档声明其已经停止维护

功能简介

MCDReforged 是一个基于 Python 的 Minecraft 服务端控制工具,可以在完全不对 Minecraft 服务端进行修改的情况下,通过可自定义的插件系统,提供对服务端的管理能力的工具。小至计算器、高亮玩家、B 站弹幕姬,大至操控计分板、管理结构文件、自助备份回档,都可以通过 MCDR 及相配套的插件实现。
—— MCDReforged 自述文件[6]

MCDReforged 的自述文件

MCDReforged 彻底解放了 MC 服务端控制的限制,相对独立的服务端控制工具可以在关服时操作服务器文件,或是在玩家无 OP 权限的情况下为原版生存实现各种功能。

这十分符合原版技术生存玩家的需求,切实推动了近几年 MC 原版技术生存的蓬勃发展。在疫情期间国内重新兴起的 MC 相关话题背后也有它的影子。

如今,许多插件服和模组服也会使用 MCDR 实现服务器存档管理和回档、跨服聊天等功能。

Minecraft 的百度指数

工作原理

实际上,MCDR 的实现原理非常简单。

它将服务端作为子进程启动,以此拥有了控制服务端标准输入/输出流的能力。服务端输出会被 MCDR 获取,而 MCDR 也可以向控制台内输入指令。Minecraft 的控制台输出非常标准,通过解析输出即可将其抽象成不同的事件并派发给插件进行响应。在 Minecraft 内置指令系统的帮助下,MCDR 可以通过向服务端标准输入流发送 Minecraft 指令来与 Minecraft 服务器做出交互。[6]

MCDReforged 会启动服务端,并获取它的输入输出流

插件根据不同的事件做出不同的反应。例如,玩家在聊天框打出特定指令即可备份存档、向其他玩家发送自己所在的位置、使用计算器、管理和存储假人玩家等。

玩家在聊天中打出 !!qb make 以备份存档

玩家在聊天中打出 !!here 以发送自己所在位置

游戏内计算器

假人管理插件

独特功能

  • 对服务端运行状态的控制。没有任何插件或模组能控制已关闭的服务端,而在服务端之外运行的 MCDReforged 可以轻易做到。这是 Bukkit 系插件、Forge/Fabric 模组不可能实现的特性。
  • 对于服务端文件的管理能力。自由控制服务端的运行的能力让 MCDR 可以方便地修改必须重启服务端才可用的文件。例如关服回档、管理服务端模组或插件,都可以方便地通过 MCDR 插件实现,不再需要繁琐地登录服务器后台手动操作。

软件优势

  • 服务端之外的管理能力。独立于服务端运行使 MCDR 与服务端解耦,得以实现原本不可能实现的功能。
  • 容易上手、开发简单。完善的文档让服主只需基本的计算机基础即可上手。完善的文档、API 和事件系统,使插件开发简单清晰。MCDR 及其插件均使用 Python 语言,这门对新手十分友好的语言使新手能够轻松地通过互联网快速学习并直接开始插件开发。
  • 优秀的社区活力和支持服务。MCDR 社区仍有不少优秀插件涌现,新的用户成为插件开发者,迭代更新老旧插件,为社区注入新的活力和思想。庞大的用户群体与积极活跃的 MCDR 开发者共同提供了多平台、响应迅速、满意度高的技术支持、应用部署、应急维护等服务。

参考文献

  1. TIS_TrinityUnion. 一起见证原版生存科技的巅峰!TIS服务器一周年纪念视频 TIS Trinity Union First Anniversary. bilibili. 2019-11-29 [2022-08-23]. (原始内容存档于2022-08-23).
  2. kafuuchino-desu. MCDaemon. GitHub. [2022-08-23]. (原始内容存档于2022-08-23).
  3. kafuuchino-desu. Initial commit. GitHub. 2018-11-03 [2022-08-23]. (原始内容存档于2022-08-23).
  4. TISUnion. MCDaemon-go. GitHub. [2022-08-23]. (原始内容存档于2022-08-23).
  5. lightbrotherV. Initial commit. GitHub. 2018-12-02 [2022-08-23]. (原始内容存档于2022-08-23).
  6. Fallen-Breath. MCDReforged. GitHub. [2022-08-23]. (原始内容存档于2022-05-15).
  7. Fallen-Breath. init. GitHub. 2020-05-30 [2022-08-23]. (原始内容存档于2022-08-23).

【MCDR 系列教程 01】简介
https://blog.zhanganzhi.com/zh-CN/2022/08/fc02d61c8889/
作者
Andy Zhang, Alex3236
发布于
2022年8月23日
许可协议