【MCDReforged 快速入門(mén)手冊(cè)】1·開(kāi)始之前

MCD 系列的歷史
2018 年 11 月,TIS 開(kāi)服前夕,chino_desu 開(kāi)發(fā)了服務(wù)端管理工具 MCDaemon。在不修改原版服務(wù)端的情況下,其提供了如服務(wù)器重啟、存檔備份和自動(dòng)回檔、跨服聊天、鏡像服存檔同步等的服務(wù)端管理功能。

隨著 TIS 開(kāi)服和發(fā)展,MCDaemon 展示出來(lái)的強(qiáng)大功能,尤其是備份回檔受到了越來(lái)越多人的關(guān)注,并期望使用它來(lái)管理自己的服務(wù)器。但 MCDaemon 有個(gè)明顯的缺點(diǎn):不支持 Windows。為此,lightbrotherV 創(chuàng)建了 MCDaemon-go 項(xiàng)目,實(shí)現(xiàn)了 Windows 支持。

雖然 MCD-go 支持了 windows,但是并不支持 MCDaemon 生態(tài)的 Python 插件。重復(fù)開(kāi)發(fā)兩個(gè)生態(tài)的插件顯然不是明智之舉,對(duì)于長(zhǎng)期社區(qū)發(fā)展也不是好事。因而,這段時(shí)間里,社區(qū)用戶(比如我)也創(chuàng)建了一些 Fork,例如 MCD-Windows,以實(shí)現(xiàn)相同生態(tài)的跨平臺(tái)支持。這些 Fork 現(xiàn)在大部分已經(jīng)刪庫(kù)。
MCDaemon 在被 TIS 使用一段時(shí)間后暴露出許多問(wèn)題,有很大的優(yōu)化空間,于是 MCD 2.0 的開(kāi)發(fā)也提上了日程。
2020年3月,F(xiàn)allen_Breath 開(kāi)始了 MCDReforged 的開(kāi)發(fā),其支持在 Windows 下運(yùn)行。

chino 將 MCD 2.0 的源碼和預(yù)期功能列表移交給?Fallen_Breath。4 月,MCDR 發(fā)布了第一個(gè)預(yù)覽版本。同年 5 月,chino 宣布停止 MCDaemon 的開(kāi)發(fā)和維護(hù)。
我一個(gè)周末搓的所以根本不想重構(gòu)。MCDR 的開(kāi)發(fā)初期是我把寫(xiě)了一小部分的 MCD 2.0 源碼給了 Fallen 以及一個(gè) MCD 2.0 的功能列表。很難說(shuō)有沒(méi)有幫上狐貍寫(xiě) MCDR,但是 MCDR 的 src 里面目錄結(jié)構(gòu)的確是 MCD 2.0 的樣子。

MCD 系列的意義
MCD 系列徹底解放了 MC 服務(wù)端控制的限制。
相對(duì)獨(dú)立的服務(wù)端控制工具可以在關(guān)服時(shí)操作服務(wù)器文件、在玩家無(wú) OP 權(quán)限的情況下為原版生存實(shí)現(xiàn)各種功能。
這十分符合原版技術(shù)生存玩家的需求,切實(shí)推動(dòng)了近幾年 MC 原版技術(shù)生存的蓬勃發(fā)展。在疫情期間國(guó)內(nèi)重新興起的 MC 相關(guān)話題背后也有它的影子。

如今,許多插件服和模組服也會(huì)使用 MCDR 實(shí)現(xiàn)服務(wù)器存檔管理和回檔、跨服聊天等功能。
MCDR 是什么?
要了解這個(gè)問(wèn)題,不妨參考 MCDReforged 倉(cāng)庫(kù)的 README:

這是如何實(shí)現(xiàn)的?
MCDR 使用了 Popen 來(lái)將服務(wù)端作為一個(gè)子進(jìn)程啟動(dòng),因此它便擁有了控制服務(wù)端標(biāo)準(zhǔn)輸入/輸出流的能力。
Minecraft 服務(wù)器控制臺(tái)的輸出格式是穩(wěn)定的,且包含了大量與服務(wù)器相關(guān)的有用信息(如玩家聊天信息)。借此,MCDR 可以 解析并分析服務(wù)端輸出,將它們抽象成不同的事件,派發(fā)給插件進(jìn)行響應(yīng)。
在 Minecraft 內(nèi)置指令系統(tǒng)的幫助下,MCDR 可以通過(guò)向服務(wù)端標(biāo)準(zhǔn)輸入流發(fā)送 Minecraft 指令來(lái)與 Minecraft 服務(wù)器做出交互。如果你愿意的話,你可以將 MCDR 視為 ?一個(gè)盯著服務(wù)端控制臺(tái)看的,可以根據(jù)服務(wù)端的輸出快速地做出響應(yīng)、并向服務(wù)端輸入相關(guān)指令的機(jī)器人。

插件根據(jù)不同的事件做出不同的反應(yīng)。例如,玩家在聊天框打出特定指令即可備份存檔、向其他玩家發(fā)送自己所在的位置、使用計(jì)算器、管理和存儲(chǔ)假人玩家等。

MCDR 與模組/插件的區(qū)別
對(duì)服務(wù)端運(yùn)行狀態(tài)的控制。沒(méi)有任何插件或模組能控制已關(guān)閉的服務(wù)端,而在服務(wù)端之外運(yùn)行的 MCDReforged 可以輕易做到。這是 Bukkit 系插件、Forge/Fabric 模組不可能實(shí)現(xiàn)的特性。
對(duì)于服務(wù)端文件的管理能力。自由控制服務(wù)端的運(yùn)行的能力讓 MCDR 可以方便地作用于必須重啟服務(wù)端才起作用的文件。例如關(guān)服回檔、管理服務(wù)端模組或插件,都可以方便地通過(guò) MCDR 插件實(shí)現(xiàn),不再需要繁瑣地登錄服務(wù)器后臺(tái)手動(dòng)操作。
為什么要用 MCDR
服務(wù)端之外的管理能力。獨(dú)立于服務(wù)端運(yùn)行使 MCDR 得以突破與服務(wù)端耦合的限制,無(wú)需復(fù)雜的 Mixin,為一些原本不可能的功能提供了空間和基礎(chǔ)。
容易上手、開(kāi)發(fā)簡(jiǎn)單。完善的文檔讓服主只需基本的計(jì)算機(jī)基礎(chǔ)即可上手。完善的文檔、API 和事件系統(tǒng),使插件開(kāi)發(fā)簡(jiǎn)單清晰。MCDR 及其插件均使用 Python 語(yǔ)言,這門(mén)對(duì)新手十分友好的語(yǔ)言使新手能夠輕松地通過(guò)互聯(lián)網(wǎng)快速學(xué)習(xí)并直接開(kāi)始插件開(kāi)發(fā)。
優(yōu)秀的社區(qū)活力和支持服務(wù)。MCDR 社區(qū)仍有不少優(yōu)秀插件涌現(xiàn),新的用戶成為插件開(kāi)發(fā)者,迭代更新老舊插件,為社區(qū)注入新的活力和思想。龐大的用戶群體與積極活躍的 MCDR 開(kāi)發(fā)者相輔相成,提供了多平臺(tái)、迅速響應(yīng)、滿意度高的支(售)持(后)服務(wù)。此外,社區(qū)中還有不少反饋良好的技術(shù)支持和部署服務(wù)。
MCDR 的劣勢(shì)
事實(shí)上,MCDR 的優(yōu)勢(shì)就是它的劣勢(shì)。完全不對(duì)服務(wù)端進(jìn)行修改或注入,使它的能力十分有限。例如,MCDR 不可能響應(yīng)方塊放置事件,因?yàn)榉綁K放置信息不包含在 Minecraft 控制臺(tái)輸出中。
本系列參考文獻(xiàn)
本系列教程(文集)所有參考文獻(xiàn)在此統(tǒng)一列出。
TIS_TrinityUnion. (2019, Nov. 29). 一起見(jiàn)證原版生存科技的巔峰!TIS服務(wù)器一周年紀(jì)念視頻. 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】簡(jiǎn)介. Retrieved Aug. 23, 2022. from https://zhanganzhi.notion.site/7fda6a526c1743c19aa69bd1d1bddf98
青小蛙. (2019, Oct 31). 用輕量級(jí)工具 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