Try   HackMD
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 用來將 地圖選擇區塊 轉換為 檔案 儲存的 檔案格式
  • 如何使用? 請參考官方說明文件 中文說明
  • 主要就是 /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.ymlallowed_mounts 欄位加上剛才的 mount 資訊內的 Source 才能使用。
  • 此外,因為實體主機目錄需要可以被不同的伺服器 讀+寫,所以還需要使用指令將該目錄的權限改成 777,也就是在主機上直接輸入 chmod 777 /srv/share-minecraft-data/ddcc/plugins/WorldEdit/schematics
  • 承接剛剛的問題: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 就可以了。