Minecraft server.properties 設定:人數、難度與種子碼改完確實生效

摘要

Minecraft Java 版伺服器的人數上限、難度、種子碼與 MOTD 都寫在伺服器的設定檔裡,但修改後重新啟動,常常看不到變化。原因多半是那個設定在新版已經不再讀取、只對新世界有效,或是值寫錯了。只要先停止伺服器再修改,並依設定的生效條件處理,修改的值就會生效。

文章目錄

架好 Minecraft 伺服器後,我們常會想修改人數上限、難度、種子碼,或伺服器清單上的說明文字 MOTD,這些都寫在伺服器資料夾的 server.properties。但修改後重新啟動時,設定常常沒有變化,原因可能是那個設定已經改成遊戲規則、只在建立新世界時有效,或是值寫錯了。我在 26.3 的伺服器逐一修改常用的設定,發現以前用來關閉 PvP 的 pvp=false 已經不會作用,寫錯的值也不會出現任何錯誤訊息。

測試環境是 Windows 11 與 Java 25,伺服器是官方與 Paper 的 26.3。還沒有伺服器的話,可以先架設 Java 原版伺服器。

設定沒生效的原因

修改設定後卻沒有變化時,可以先對照自己的情況:

情況 處理方式
在伺服器執行中修改 先輸入 stop 停止伺服器再修改,見「修改設定的步驟」
加上 pvp=false 想關閉 PvP 新版已改成遊戲規則,見「新版移除的設定」
修改 level-seed、level-type 或 hardcore 後,世界沒有改變 這三項只在建立新世界時有效,見「建立新世界」
用 difficulty 或 defaultgamemode 指令改的值,重新啟動後變回原本的值 原版伺服器每次啟動都會套用設定檔的值,因此要改在設定檔裡
修改 gamemode 後,進入過的玩家模式沒有改變 把 force-gamemode 改成 true,玩家每次進入時都會套用 gamemode
設定變回預設值,或是那一行完全沒有作用 設定的名稱或值打錯了,見「設定寫錯時」
MOTD 的中文變成亂碼 改用 UTF-8 存檔,見「MOTD 的中文與顏色」

修改設定的步驟

伺服器只在啟動時讀取 server.properties,reload 指令也不會重新讀取,因此在執行中修改的值,要到下次啟動時才會套用。此外,有人輸入 whitelist on 或 whitelist off 時,伺服器還會用啟動時讀到的值覆寫整個檔案,執行中修改的內容就會消失。修改設定前,要先停止伺服器:

  1. 在伺服器視窗輸入 stop,等伺服器關閉。
  2. 用記事本打開伺服器資料夾裡的 server.properties,修改 = 後面的值。存檔前,先確認記事本右下角的狀態列顯示「UTF-8」。
  3. 啟動伺服器,看到 Done 後確認設定的結果,例如在伺服器視窗輸入 difficulty,就會印出目前的難度。

伺服器啟動時會依字母順序重寫整個檔案,檔案開頭以 # 起頭的兩行是標題與存檔時間,不用理會。改壞的設定可以整行刪掉,下次啟動時伺服器會再補上預設值。

常用設定對照

26.3 第一次啟動時產生的預設值與生效方式如下:

設定 用途 預設值 常用值 生效方式
server-port 連接埠 25565 同一台電腦開第二台伺服器時改成 25566 重新啟動後生效
max-players 人數上限 20 10 重新啟動後生效
motd 伺服器清單上的說明文字 A Minecraft Server 見「MOTD 的中文與顏色」 重新啟動後生效
white-list 只讓白名單上的玩家進入 true false 重新啟動後生效,或輸入 whitelist off 立即生效
online-mode 驗證正版帳號 true 設成 false 時,任何名稱都能進入 重新啟動後生效
gamemode 玩家第一次進入時的模式 survival creative、adventure 重新啟動後生效
force-gamemode 玩家每次進入都套用 gamemode false true 重新啟動後生效
difficulty 難度 easy normal、hard 原版重新啟動後生效,Paper 只對新世界有效
hardcore 極限模式 false true 只對新世界有效,原版會把難度固定為困難
level-name 世界資料夾的名稱 world world2 重新啟動後生效,資料夾不存在時會建立新世界
level-seed 種子碼 空白,代表隨機產生 數字或文字 只對新世界有效
level-type 地形類型 minecraft\:normal,一般地形 minecraft:flat,超平坦 只對新世界有效
spawn-protection 重生點周圍不能破壞的範圍 16 0 重新啟動後生效,但伺服器沒有管理員時不會作用
view-distance 傳給玩家的區塊範圍 10 8 重新啟動後生效
pause-when-empty-seconds 沒有玩家在線幾秒後暫停伺服器 原版是 60,Paper 是 -1 設成 -1 時不會暫停 重新啟動後生效

white-list 從 26.3 的 Snapshot 2 起預設為 true,玩家要先加入白名單才能進入。spawn-protection 擋住地圖的機關時,處理方式可以參考把單人世界搬上伺服器。

新版移除的設定

以前常用的幾個設定裡,有四個在 1.21.9 的開發版 25w35a 改成了遊戲規則,1.21.2 的開發版 24w33a 則移除了另外兩個。這些設定寫在 26.3 的檔案裡不會報錯,但伺服器不會讀取,因此要改用下面的指令:

舊設定 26.3 的做法
pvp=false 輸入 gamerule pvp false
spawn-monsters=false 輸入 gamerule spawn_monsters false
allow-nether=false 輸入 gamerule allow_entering_nether_using_portals false
enable-command-block=false 指令方塊預設會運作,要關閉時輸入 gamerule command_blocks_work false
spawn-animals、spawn-npcs 這兩個設定已經移除,也沒有對應的遊戲規則

如果世界是用 1.20.1 伺服器搭配 pvp=false、spawn-monsters=false 與 allow-nether=false 建立的,換成 26.3 啟動後,這三個設定雖然還留在檔案裡,但對應的遊戲規則都是 true,因此 PvP、怪物生成與地獄傳送門都會重新開啟:

26.3 伺服器開啟 1.20.1 的世界後,gamerule pvp、spawn_monsters 與 allow_entering_nether_using_portals 都顯示 currently set to true

在伺服器視窗執行上表的指令後,遊戲規則會存在世界裡,重新啟動後也會保留。如果伺服器是 1.21.9 或 1.21.10,規則名稱和 26.3 不同,可以查 gamerule 新舊名稱對照。另外,升級時伺服器會改寫世界資料,因此升級前要先備份世界。

建立新世界

要使用新的種子碼、地形類型或極限模式時,就讓伺服器建立一個新的世界資料夾:

  1. 在伺服器視窗輸入 stop。
  2. 修改 level-seed 這類設定,並把 level-name 改成新的名稱,例如 world2。原本的 world 不用刪除,之後把 level-name 改回 world 就會回到舊世界。
  3. 啟動伺服器,在伺服器視窗輸入 seed 確認種子碼。

建立新世界時,伺服器視窗會先印出 No existing world data, creating new world。種子碼也可以寫成文字,伺服器會把它換算成數字:

伺服器視窗印出 No existing world data, creating new world 後啟動完成,輸入 seed 顯示文字種子碼 vervecode 換算成的 Seed: [-1325265281]

建立超平坦世界時,伺服器視窗會印出一行 No key layers in MapLike[{}] 的 ERROR,但世界仍會正常建立,不用理會。

MOTD 的中文與顏色

伺服器清單上的說明文字寫在 motd,中文可以直接輸入,也可以寫成跳脫碼:

寫法 範例 結果
以 UTF-8 存檔 motd=偵錯桐人的伺服器 正常顯示
\u 跳脫碼 motd=\u5075\u932f\u6850\u4eba\u7684\u4f3a\u670d\u5668 正常顯示,伺服器啟動後會把檔案裡的跳脫碼換成中文字
以 ANSI 編碼存檔 motd=偵錯桐人的伺服器 伺服器清單顯示為亂碼,伺服器啟動後還會改寫檔案裡的中文,改寫後就無法復原
§ 顏色代碼 motd=§6偵錯桐人§r的伺服器 「偵錯桐人」顯示為金色
\u00a7 顏色代碼 motd=\u00a7a偵錯桐人\u00a7r的伺服器 「偵錯桐人」顯示為綠色
& 顏色代碼 motd=&a偵錯桐人&r的伺服器 &a 與 &r 原樣顯示,沒有顏色
\n 換行 motd=\u00a76\u00a7l偵錯桐人的伺服器\n\u00a77歡迎加入 分成兩行顯示

顏色代碼的對照可以參考 Minecraft Wiki 的格式代碼,例如 6 是金色、7 是灰色、l 是粗體,r 則會清除前面的格式。§ 不好輸入時,可以改寫成 \u00a7。

照表格最後一列設定 MOTD,並把 max-players 改成 10 後,遊戲的伺服器清單會顯示如下:

伺服器清單中名為設定檔測試的伺服器,MOTD 第一行是金色粗體的偵錯桐人的伺服器,第二行是灰色的歡迎加入,人數顯示 0/10

以 ANSI 編碼存檔時,記事本裡的中文看起來仍然正常,只有狀態列會顯示「ANSI」。這時要用「另存新檔」,把對話框下方的「編碼方式」改成「UTF-8」再存檔,並重新輸入被改寫的中文。

設定寫錯時

設定寫錯時,伺服器仍會照常啟動,也不會指出是哪一行寫錯:

寫錯的方式 例子 結果
值打錯或大小寫不同 difficulty=hardd、difficulty=Hard 難度變成預設的 easy,檔案裡的值也被改成 easy
值的後面多了空白 difficulty=hard 後面多一個空白 難度變成預設的 easy
數字的欄位寫了文字 max-players=abc 人數上限變成預設的 20
true 打錯 online-mode=ture 被當成 false,因此伺服器會以離線模式啟動
設定名稱打錯 max-player=5 這一行會原樣保留,但伺服器不會讀取,人數上限維持原本的值
同一個設定寫兩次 兩行 max-players= 寫了不同的值 以後面那一行為準,檔案只會留下這一行
用了全形等號 max-players=10 整行被當成名稱不明的設定,人數上限維持 20

等號前後的空白,以及 true、false 的大小寫都不影響讀取。以前用數字表示模式的 gamemode=1 這類寫法也能讀取,伺服器會把它改寫成 creative。

online-mode 打錯時,伺服器會以離線模式啟動,任何人都能用別人的名稱進入。這時伺服器視窗的離線模式警告是唯一的線索,看到這段警告時,就要先停止伺服器,把 online-mode 改回 true 再重新啟動:

online-mode 寫成 ture 時,伺服器啟動後印出 SERVER IS RUNNING IN OFFLINE/INSECURE MODE 開頭的四行 WARN

實測紀錄

實測的伺服器是官方 26.3 與 Paper 26.3 的 build 238,舊設定的差異則另外用 1.20.1 與 1.21.11 的官方伺服器比對。Paper 的結果和原版相同,只有難度與極限模式世界的難度不同。伺服器清單的人數上限與 MOTD,是用 Server List Ping 協定讀回伺服器的回應來確認,顏色、兩行的 MOTD 與玩家進入後的模式,則再用 26.3 的遊戲確認。ANSI 的情境是在繁體中文 Windows 上,用記事本的 ANSI 編碼存檔,這個編碼就是 Big5。

總結

修改伺服器設定時,要先停止伺服器再修改,並依設定的生效條件重新啟動、建立新世界或改用遊戲規則。實測官方與 Paper 的 26.3,照表中的生效方式處理後,設定都會生效,兩者只有難度的生效方式不同。

延伸閱讀

Ted Liou

Ted Liou

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

留言