CurseForge 模組包架設 Minecraft 伺服器:和朋友在同一個世界玩模組包

摘要

用 Prism Launcher 玩 CurseForge 模組包時,想和朋友一起玩,就要架一台模組與版本都和遊戲相同的伺服器。模組包有提供 Server Pack 時,執行附的啟動腳本就能啟動,沒有提供時則要自己安裝模組載入器並複製模組,再移出只在遊戲端運作的模組。

文章目錄

用 Prism Launcher 玩 CurseForge 模組包時,如果想和朋友在同一個世界玩,就要架一台模組與版本都和遊戲相同的伺服器。遊戲的實例裡沒有伺服器要執行的程式,因此直接複製過去無法啟動。這時要使用模組包提供的 Server Pack,如果模組包沒有提供,就要自己安裝模組載入器並複製模組。用這兩種方式架好的伺服器,玩家用原本的實例就能連進世界。

測試環境是 Windows 11。Server Pack 用 Minecraft 1.21.1 的 All the Mods 10(ATM10)示範,手動組裝則用 Minecraft 1.20.1 的 TerraFirmaGreg-Modern 示範。

Server Pack 的位置

打開模組包的 CurseForge 頁面,切到「Files」分頁並點選自己正在玩的版本,Server Pack 就在檔案頁下方的「Additional Files」,CurseForge 的說明文件也有同樣的說明。下圖是 ATM10 的檔案頁:

CurseForge 檔案頁的 Additional Files 分頁,列出 ServerFiles-8.5.zip,遊戲版本 1.21.1、載入器 NeoForge、大小 1.2 GB

如果這裡找不到,可以到模組包的說明頁查看,因為有些模組包會把 Server Pack 放在 GitHub。找到 Server Pack 後,把它解壓縮到一個新的空資料夾,再依照裡面的檔案選擇做法:

情況 做法
Server Pack 裡有 startserver.bat 這類啟動腳本 執行附的啟動腳本,步驟見「Server Pack 的啟動」
Server Pack 裡只有 mods、config 等資料夾,例如 Monifactory 安裝模組載入器後放入這些資料夾,步驟見「手動組裝的流程」
模組包沒有提供 Server Pack 安裝模組載入器後從遊戲的實例複製模組,步驟見「手動組裝的流程」

Server Pack 的啟動

ATM10 的 Server Pack 裡有啟動腳本 startserver.bat 與記憶體設定檔 user_jvm_args.txt。啟動前只要確認 Java 與記憶體,其他檔案都不用修改。其他模組包的腳本寫法雖然不同,但要確認的同樣是這兩項。

ATM10 需要 Java 21 以上的版本。電腦上找不到 Java 時,雙擊腳本只會出現 Minecraft 1.21 requires Java 21 - Java not found 並停止,這時可以改用 Prism 已經下載好的 Java 21。用記事本開啟 startserver.bat,把 set ATM10_JAVA=java 這一行最後的 java,換成 Prism 裡 Java 21 的完整路徑。路徑要換成自己的 Prism 資料夾:

1set ATM10_JAVA=E:\minecraft\tools\PrismLauncher\java\java-runtime-delta\bin\java.exe

伺服器的記憶體上限寫在 user_jvm_args.txt 裡,預設值是 -Xmx8G。如果電腦的記憶體不夠,可以把數字改小,例如 -Xmx6G。確認好後,照下面的順序啟動:

  1. 雙擊 startserver.bat。第一次啟動時會先安裝 NeoForge,視窗印出 The server installed successfully 後,就會接著啟動伺服器。
  2. 視窗停在 EULA: 時,閱讀上一行連結的 Minecraft EULA,同意後輸入 true 並按 Enter。
  3. 視窗印出 Done 就代表啟動完成。

啟動途中捲過的數百行 WARN 與幾十行 ERROR 都不用理會:

伺服器視窗先印出 The server installed successfully,接著是 EULA 提示與 EULA accepted,最後一行是 Done

要關閉伺服器時,在伺服器視窗輸入 stop 並按 Enter。ATM10 的腳本預設會在伺服器關閉後自動重新啟動,因此看到 Restarting automatically in 10 seconds 時,直接關閉視窗即可。

手動組裝的流程

模組包沒有 Server Pack 時,就要自己組裝伺服器。下面用 TerraFirmaGreg-Modern 的實例示範 Forge 模組包的做法。NeoForge 模組包安裝載入器的方式,可以參考 Pixelmon 伺服器。

安裝模組載入器

在 Prism 對實例按右鍵並選擇「編輯」,「版本」頁會列出這個實例的 Minecraft 與 Forge 版本。查到版本後,照下面的步驟安裝:

  1. 建立一個空的伺服器資料夾。

  2. 從 Forge 官方的 Maven 下載安裝器,網址裡的 1.20.1-47.4.13 要換成剛才查到的版本:

    1https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.1-47.4.13/forge-1.20.1-47.4.13-installer.jar
    
  3. 把安裝器放進伺服器資料夾,在這個資料夾開啟命令提示字元並執行:

    1java -jar forge-1.20.1-47.4.13-installer.jar --installServer
    
  4. 視窗印出 The server installed successfully 後,資料夾裡會多出 libraries、run.bat 與 user_jvm_args.txt,這時就可以刪除安裝器。

複製模組與設定

載入器裝好後,就從 Prism 的實例資料夾 instances\<實例名稱>\minecraft 複製模組與設定。下圖灰色的 saves、resourcepacks 與 options.txt 只在遊戲端使用,因此不用複製,其他資料夾則要整個複製過去。模組包自己加的資料夾也要一起複製,例如 TerraFirmaGreg-Modern 的 tacz。因為用的是複製,遊戲的實例不會受到影響:

左邊是 Prism 實例的 minecraft 資料夾,mods、config、defaultconfigs、kubejs 與其他資料夾會整個複製到右邊的伺服器資料夾。saves、resourcepacks 與 options.txt 只在遊戲端使用,因此不複製。右邊的 libraries、run.bat 與 user_jvm_args.txt 由安裝器產生

記憶體與 EULA

run.bat 會用電腦預設的 Java 啟動伺服器。我用電腦上的 Java 25 啟動 Forge 1.20.1,也能正常運作。啟動前要先修改兩個檔案:

  1. 用記事本開啟 user_jvm_args.txt,刪掉最後一行 # -Xmx4G 前面的「# 」,並把數字改成要給伺服器的記憶體,例如 -Xmx6G。

  2. 開啟 run.bat,在倒數第二行的 win_args.txt 後面加上 nogui,伺服器就只會在命令提示字元的視窗執行:

    1java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.4.13/win_args.txt nogui %*
    

接著雙擊 run.bat,載入模組約一分鐘後,視窗會印出 You need to agree to the EULA in order to run the server 並停止。閱讀 Minecraft EULA 並同意後,用記事本把 eula.txt 的 eula=false 改成 eula=true。

遊戲端模組的處理

再雙擊一次 run.bat。從實例複製來的模組裡,有些只在玩家的畫面上運作,例如光影模組 Oculus。如果模組有標明自己只在遊戲端運作,伺服器會自動略過它,沒有標明的模組則會讓伺服器在載入時崩潰。

伺服器崩潰後,用記事本開啟伺服器資料夾 crash-reports 裡最新的報告。每個出問題的模組都有一段 -- MOD <模組 ID> --,這一段裡的 Mod File 就是要移出的 jar:

crash report 的 MOD cwb 段落,Mod File 是 mods 資料夾裡的 cwb-5.0.0+1.20.0.forge.jar,Exception message 是 Attempted to load class for invalid dist DEDICATED_SERVER

同一段的 Exception message 會寫出崩潰的原因:

Exception message 的內容 原因 處理方式
Attempted to load class ... for invalid dist DEDICATED_SERVER 這個模組只在遊戲端運作 把報告指到的 jar 移出 mods
ClassMetadataNotFoundException,而且後面的類別以 net.minecraft.client 或 com.mojang.blaze3d 開頭 模組要修改的遊戲端程式不在伺服器上 把報告指到的 jar 移出 mods
Neither 'itemphysic' nor 'itemphysiclite' is installed! 這個模組的相依模組已經被移出 把這個模組的 jar 也移出 mods

確認要移出的模組後,照下面的步驟處理:

  1. 在伺服器資料夾建立 removed-mods,把報告指到的 jar 從 mods 搬到這個資料夾。
  2. 再雙擊一次 run.bat。如果伺服器又崩潰,就開啟最新的報告,並重複步驟 1。
  3. 視窗印出 Done 就代表啟動完成。之後要還原時,把 jar 搬回 mods 即可。

1.12.2 舊版模組包的差異

RLCraft 這類 1.12.2 的模組包,架設的順序和上面相同,但有下列差異:

項目 1.12.2 的情況
Prism 替實例下載的 Java Java 8,位置在 Prism 資料夾的 java\jre-legacy
安裝器產生的檔案 只有 forge-1.12.2-14.23.5.2860.jar,因此要自己建立 start.bat
用錯 Java 時的訊息 用 Java 21 或 25 啟動時,一秒內就會出現 cannot be cast to class java.net.URLClassLoader
只在遊戲端運作的模組 多半會被伺服器自動停用,視窗會顯示 Disabling mod <名稱> it is client side only

1.12.2 的伺服器要自己在伺服器資料夾建立 start.bat,指定用 Prism 的 Java 8 啟動,並把記憶體設定寫在同一行。路徑要換成自己的 Prism 資料夾:

1"E:\minecraft\tools\PrismLauncher\java\jre-legacy\bin\java.exe" -Xmx4G -jar forge-1.12.2-14.23.5.2860.jar nogui
2pause

玩家連線

伺服器印出 Done 後,玩家用同一個模組包的 Prism 實例,在「多人遊戲」新增伺服器並輸入伺服器的位址。防火牆與連接埠轉發的設定,可以參考架設 Java 原版伺服器。如果清單裡的伺服器顯示人數與訊號格,就代表遊戲連得到這台伺服器:

多人遊戲清單裡的 TerraFirmaGreg 伺服器,右側顯示 0/20 人與滿格的訊號

選取伺服器後按「加入伺服器」。手動組裝時移出的模組只需要從伺服器拿掉,玩家的實例即使保留這些模組,也能進入世界:

進入伺服器後的 TerraFirmaCraft 世界,畫面下方有口渴與飢餓列,左上顯示夏季第 1 天

如果遊戲顯示「與伺服器連線失敗」與 This server has mods that require Forge to be installed on the client,就代表玩家用了沒有安裝 Forge 的遊戲,這時要改用模組包的 Prism 實例連線。

實測紀錄

測試電腦的作業系統是 Windows 11,處理器是 i7-12700。伺服器只綁定 127.0.0.1 並關閉 online-mode,再用同一台電腦的 Prism 實例連線。TerraFirmaGreg-Modern 其實有提供 Server Pack,但這次用它的實例示範手動組裝。同版的 Server Pack 比實例少了 50 個遊戲端模組。

模組包 做法 載入器與 Java 啟動時間 結果
ATM10 8.5 執行 Server Pack NeoForge 21.1.265、Prism 的 Java 21 第一次約 5 分鐘,之後約 3 分半 記憶體上限設為 6 GB,Java 最多使用約 6.4 GB
TerraFirmaGreg-Modern 0.13.18 手動組裝 Forge 47.4.13、Java 25 第一次約 4 分半,之後約 3 分鐘 268 個模組在崩潰兩次後,共移出 6 個
Monifactory 0.13.8 Server Pack 只有資料夾,手動安裝載入器 Forge 47.4.13、Java 25 第一次約 6 分鐘 沒有移出任何模組
RLCraft 2.9.3 手動組裝 Forge 14.23.5.2860、Java 8 第一次約 1 分半 遊戲端模組都由伺服器自動停用

總結

模組包有提供 Server Pack 時,執行附的啟動腳本即可。如果沒有提供,就要安裝相同版本的模組載入器並複製模組與設定,再依 crash report 移出只在遊戲端運作的模組。實測手動組裝的伺服器移出 6 個模組後,保留全部模組的實例仍然能進入世界。

延伸閱讀

Ted Liou

Ted Liou

現役軟體工程師,分享 Unity 與 AI 的技術開發經驗。

留言