【MCDReforged 快速入门手册】1·开始之前

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

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

虽然 MCD-go 支持了 windows,但是并不支持 MCDaemon 生态的 Python 插件。重复开发两个生态的插件显然不是明智之举,对于长期社区发展也不是好事。因而,这段时间里,社区用户(比如我)也创建了一些 Fork,例如 MCD-Windows,以实现相同生态的跨平台支持。这些 Fork 现在大部分已经删库。
MCDaemon 在被 TIS 使用一段时间后暴露出许多问题,有很大的优化空间,于是 MCD 2.0 的开发也提上了日程。
2020年3月,Fallen_Breath 开始了 MCDReforged 的开发,其支持在 Windows 下运行。

chino 将 MCD 2.0 的源码和预期功能列表移交给 Fallen_Breath。4 月,MCDR 发布了第一个预览版本。同年 5 月,chino 宣布停止 MCDaemon 的开发和维护。
我一个周末搓的所以根本不想重构。MCDR 的开发初期是我把写了一小部分的 MCD 2.0 源码给了 Fallen 以及一个 MCD 2.0 的功能列表。很难说有没有帮上狐狸写 MCDR,但是 MCDR 的 src 里面目录结构的确是 MCD 2.0 的样子。

MCD 系列的意义
MCD 系列彻底解放了 MC 服务端控制的限制。
相对独立的服务端控制工具可以在关服时操作服务器文件、在玩家无 OP 权限的情况下为原版生存实现各种功能。
这十分符合原版技术生存玩家的需求,切实推动了近几年 MC 原版技术生存的蓬勃发展。在疫情期间国内重新兴起的 MC 相关话题背后也有它的影子。

如今,许多插件服和模组服也会使用 MCDR 实现服务器存档管理和回档、跨服聊天等功能。
MCDR 是什么?
要了解这个问题,不妨参考 MCDReforged 仓库的 README:

这是如何实现的?
MCDR 使用了 Popen 来将服务端作为一个子进程启动,因此它便拥有了控制服务端标准输入/输出流的能力。
Minecraft 服务器控制台的输出格式是稳定的,且包含了大量与服务器相关的有用信息(如玩家聊天信息)。借此,MCDR 可以 解析并分析服务端输出,将它们抽象成不同的事件,派发给插件进行响应。
在 Minecraft 内置指令系统的帮助下,MCDR 可以通过向服务端标准输入流发送 Minecraft 指令来与 Minecraft 服务器做出交互。如果你愿意的话,你可以将 MCDR 视为 一个盯着服务端控制台看的,可以根据服务端的输出快速地做出响应、并向服务端输入相关指令的机器人。

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

MCDR 与模组/插件的区别
对服务端运行状态的控制。没有任何插件或模组能控制已关闭的服务端,而在服务端之外运行的 MCDReforged 可以轻易做到。这是 Bukkit 系插件、Forge/Fabric 模组不可能实现的特性。
对于服务端文件的管理能力。自由控制服务端的运行的能力让 MCDR 可以方便地作用于必须重启服务端才起作用的文件。例如关服回档、管理服务端模组或插件,都可以方便地通过 MCDR 插件实现,不再需要繁琐地登录服务器后台手动操作。
为什么要用 MCDR
服务端之外的管理能力。独立于服务端运行使 MCDR 得以突破与服务端耦合的限制,无需复杂的 Mixin,为一些原本不可能的功能提供了空间和基础。
容易上手、开发简单。完善的文档让服主只需基本的计算机基础即可上手。完善的文档、API 和事件系统,使插件开发简单清晰。MCDR 及其插件均使用 Python 语言,这门对新手十分友好的语言使新手能够轻松地通过互联网快速学习并直接开始插件开发。
优秀的社区活力和支持服务。MCDR 社区仍有不少优秀插件涌现,新的用户成为插件开发者,迭代更新老旧插件,为社区注入新的活力和思想。庞大的用户群体与积极活跃的 MCDR 开发者相辅相成,提供了多平台、迅速响应、满意度高的支(售)持(后)服务。此外,社区中还有不少反馈良好的技术支持和部署服务。
MCDR 的劣势
事实上,MCDR 的优势就是它的劣势。完全不对服务端进行修改或注入,使它的能力十分有限。例如,MCDR 不可能响应方块放置事件,因为方块放置信息不包含在 Minecraft 控制台输出中。
本系列参考文献
本系列教程(文集)所有参考文献在此统一列出。
TIS_TrinityUnion. (2019, Nov. 29). 一起见证原版生存科技的巅峰!TIS服务器一周年纪念视频. Retrieved Aug. 23, 2022. from https://www.bilibili.com/video/av77327350
kafuuchino-desu et al. (2020, May 12). MCDaemon(V1.0). Retrieved Aug. 23, 2022. from https://github.com/kafuuchino-desu/MCDaemon/blob/master/README.md
TISUnion. (2020, Apr 5). MCDaemon-go. Retrieved Aug. 23, 2022. from https://github.com/TISUnion/MCDaemon-go/blob/master/README.md
Fallen-Breath et al. (2021, Sep 23). MCDReforged. Retrieved Aug. 23, 2022. from https://github.com/Fallen-Breath/MCDReforged/blob/master/README_cn.md
Fallen-Breath et al. (2022, Jul 19). MCDReforged’s documentation. Retrieved Aug. 23, 2022. from https://mcdreforged.readthedocs.io/en/latest/
zhang-anzhi, & Alex3236. (2022, Aug). 【MCDR 系列教程 01】简介. Retrieved Aug. 23, 2022. from https://zhanganzhi.notion.site/7fda6a526c1743c19aa69bd1d1bddf98
青小蛙. (2019, Oct 31). 用轻量级工具 Notepad3 替代 36 岁的微软记事本. Retrieved Aug. 23, 2022. from https://www.appinn.com/notepad3/
soapy1 et al. (2022, Jun 2). Miniconda. Retrieved Aug. 23, 2022. from https://docs.conda.io/en/latest/miniconda.html
Why requests raise this exception "check_hostname requires server_hostname"?. Retrieved Aug. 23, 2022. from https://stackoverflow.com/questions/66642705/
unitwk et al. (2022, Jul 18). 在 MCSM 面板中使用 MCDReforged. Retrieved Aug. 23, 2022. from http://docs.mcsmanager.com/#/tutorial/mcdr
Eric Matthes. (2019, May 3). Python Crash Course: A Hands-On, Project-Based Introduction to Programming (2nd ed.). No Starch Press.
Eric S. Raymond, & Rick Moen. (2014). How To Ask Questions The Smart Way (3nd ed.). Retrieved Aug. 23, 2022. from http://www.catb.org/~esr/faqs/smart-questions.html