###### tags: `minecraft` # WorldEdit 共用 schematic file * Author: jerrycool123 ## 作為 GM 組員,你需要知道的事 ### 已串聯伺服器列表 (`SERVER_NAME`) * lobby * S-1 * S-2 * S-3 * S-4 * S-5 * R-1 ### 什麼是 schematic file * `.schem` 檔案是 WorldEdit 用來將 **地圖選擇區塊** 轉換為 **檔案** 儲存的 **檔案格式**。 * 如何使用? [請參考官方說明文件](https://worldedit.enginehub.org/en/latest/commands/#schematic-and-clipboard-commands) [中文說明](https://forum.gamer.com.tw/Co.php?bsn=18673&sn=681308) * 主要就是 `/schem save [filename]` 和 `/schem load [filename]` 兩個指令,需要搭配 **clipboard** 使用。 ### 過去伺服器 schematic file 的處理 * 目前所有舊有的 `X.schem` 檔案會存放在 `/{SERVER_NAME}/X.schem` * 比如原本在 S-1 的 `jerry.schem`,現在會跑到 `/S-1/jerry.schem` ### >> 重要 << 命名慣例 * **命名慣例**:`/{SERVER_NAME}/{FILE_NAME}` * 請各位 gm 組成員,未來在 `save/load` 時,維持這樣的命名慣例。 * 舉例:假設現在我在 S-2 要儲存名為 `pekoland` 的建築物。 * **正確示範**:`/schem save /S-2/pekoland` * **錯誤示範**:`/schem save pekoland` * 這樣其他人就**不知道他是從哪一個 server 來的**,會造成混亂,麻煩大家要共同維護! * Tips: `save/load` 的時候不需要加上副檔名 `.schem` ! ### 目前的缺陷 * 各伺服器的 schematics 資料夾無法直接從後端網頁介面讀取,造成下載/上傳不易,之後會繼續想辦法。 ## 底層技術原理 * 看看就好XD ### Pterodactyl Mount * Mount 是一種讓 docker container 內外共享檔案的方式。 * 簡單來說就是提供一個 **實體主機目錄** 和一個 **docker container 內目錄**,並且把他們「串起來」,我們稱這個動作為 **mount**。 * 實體主機目錄:`/srv/share-minecraft-data/ddcc/plugins/WorldEdit/schematics` * Symlink: `/srv/ddcc-schematics` * Docker container 內目錄:`/share_schematics` * 翼手龍預設只能看到 `/home/container` 裡面的東西,且 mount 的目錄 **不會顯示在網頁介面上** 也因此 **無法直接存取**。 * 但是 WorldEdit 預設的 schematics 目錄的真實路徑為 `/home/container/plugins/WorldEdit/schematics`。 * 翼手龍預設也不允許 docker container 內 mount 的目錄包含 `/home/container`。 * 因此沒有辦法讓 **Docker container 內目錄** 直接設定為這個路徑。 * 那怎麼辦!請看下面 Symbolic Link 的章節。 * Mount 資訊 * UID: `9071fd2e-724f-4e65-a10e-42b956014a03` * Source: `/srv/share-minecraft-data/ddcc/plugins/WorldEdit/schematics` * Read only: false (allow write) * Target: `/shared-schematics` * User mountable: false * Name: `ddcc WorldEdit shared schematics` * Egg: `purpur` / Node: `2d2c.main` * 在 admin control panel 新增 mount 之後,因為 **翼手龍預設安全性考量**,還需要將主機上的 `/etc/pterodactyl/config.yml` 的 `allowed_mounts` 欄位加上剛才的 mount 資訊內的 Source 才能使用。 * 此外,因為實體主機目錄需要可以被不同的伺服器 **讀+寫**,所以還需要使用指令將該目錄的權限改成 **777**,也就是在主機上直接輸入 `chmod 777 /srv/share-minecraft-data/ddcc/plugins/WorldEdit/schematics` ### Symbolic Link * 承接剛剛的問題:WorldEdit 預設的 schematics 目錄的真實路徑為 `/home/container/plugins/WorldEdit/schematics`。 * 翼手龍預設也不允許 docker container 內 mount 的目錄包含 `/home/container`。 * 因此沒有辦法讓 **Docker container 內目錄** 直接設定為這個路徑。 * 我們可以在 UNIX 系統使用類似 Windows「**捷徑**」的概念,在 `/home/container/plugins/WorldEdit/schematics` 改成放置捷徑,使其指向 `/share-schematics`! * 然而,翼手龍預設 **不允許從網頁介面新增捷徑**,因此還需要使用指令來創建。 * 由於這需要一些 UNIX 系統的基礎,在此就不細講,僅列出 SOP: * 當創建一個新的伺服器時,需要安裝 WorldEdit 插件,並且開啟伺服器讓他產生空的 `schematics` 目錄。為了等一下產生捷徑,需要先將其 **刪除**。 * 然後將我寫好的指令集 `mount.sh` 放到 `/home/container` (就是預設點 file manager 會看到的頁面)。 * **[重要]** 需要將 permissions 設為 **7xx** (xx照預設),這對翼手龍的意義是他才能 **執行** `mount.sh`。 * 為了讓 WorldEdit 支援「捷徑」,需要在 `WorldEdit/config.yml` 內將 `files: allow-symbolic-links` 改成 `true` 。 * 將 startup command 改成 `./mount.sh`,啟動一次之後就算建好捷徑了。 * 最後將 startup command 設為原本使用的 command 就可以了。