文章目錄

玩家跑到沒去過的地方時,Minecraft 伺服器要當場生成新的區塊(Chunk,16 × 16 格的地圖單位)。多人同時跑圖時,區塊就可能來不及送達,地圖也跟著缺一塊。Chunky 是預先生成區塊的外掛,只要設定中心與半徑,就能在玩家進入前把這個範圍生成好。
本文的測試環境是 Windows 11、i7-12700、Java 25 與 Paper 26.3,文中的指令都在伺服器視窗輸入。如果伺服器還在用 Spigot,可以先把伺服器轉成 Paper。
預先生成的效果
一個人玩時,有沒有預先生成幾乎沒有差別,因此不用特地處理。四個人同時跑圖時,沒有預先生成的世界會有區塊來不及送達,電腦越弱、跑得越快就越明顯,預先生成後區塊則全部送達。如果伺服器在沒有人跑圖時也卡,延遲就不是區塊生成造成的,這時要用 spark 找出延遲的來源。
安裝 Chunky
Chunky 可以從 Modrinth 或 Hangar 下載,1.5.66 支援 Paper 26.1 到 26.3,檔名是 Chunky-Paper-1.5.66.jar。安裝時世界與 server.properties 都不用動:
- 在伺服器視窗輸入
stop,等伺服器停止。 - 把下載的 jar 檔放進伺服器資料夾裡的
plugins,放好後的樣子如下圖。 - 啟動伺服器,再輸入
plugins,清單裡出現 Chunky 就代表安裝完成。

半徑的選擇
Chunky 預設生成正方形,半徑是中心到邊的距離,因此半徑 1000 代表 2,000 × 2,000 格。主世界生成後的世界大小與耗時如下:
| 半徑 | 涵蓋範圍 | 世界大小 | 耗時 |
|---|---|---|---|
| 500 | 1,000 × 1,000 格 | 55 MB | 19 秒 |
| 1000 | 2,000 × 2,000 格 | 173 MB | 1 分 5 秒 |
| 2000 | 4,000 × 4,000 格 | 632 MB | 4 分 2 秒 |
電腦較弱時耗時會變長,把伺服器限制成只能用 4 條 CPU 執行緒時,半徑 2000 花了 16 分 18 秒。Chunky 的官方文件建議先用較小的半徑,之後要加大範圍時,設定新的半徑再生成一次。我實測時已存在的區塊會被跳過,原本的方塊也還在。
主世界的生成
決定半徑後,在伺服器視窗輸入下面三行,Chunky 就會開始生成。中心可以換成我們要的座標,例如 chunky center 100 -50:
1chunky center 0 0
2chunky radius 1000
3chunky start
開始後,主控台每秒會印出一行進度,結束時印出 Task finished 與 100.00% 就代表完成:

ETA 是預估的剩餘時間,剛開始時會偏高,例如上圖一開始顯示 4 分 31 秒,實際只花了 1 分 5 秒。任務進行中可以用下面的指令控制:
| 指令 | 用途 |
|---|---|
chunky progress |
印出目前的進度 |
chunky pause |
暫停任務並保留進度 |
chunky continue |
從保留的進度繼續 |
chunky cancel |
取消任務,再輸入 chunky confirm 確認 |
生成途中可以直接停止伺服器,重新啟動後輸入 chunky continue,任務就會繼續。
地獄與終界
主世界生成完後,用 chunky world 切換維度。中心會沿用,半徑則視維度重新設定。地獄的距離和主世界是 1:8,因此主世界半徑 1000 在地獄對應半徑 125:
1chunky world the_nether
2chunky radius 125
3chunky start
看到 Task finished for minecraft:the_nether 後,再生成終界:
1chunky world the_end
2chunky radius 1000
3chunky start
維度名稱要寫 the_nether 與 the_end。輸入 world_nether 時,Chunky 會印出 World world_nether not found,並列出可用的名稱。
世界邊界的設定
Chunky 只負責生成區塊,不會限制玩家的活動範圍,玩家走出生成範圍時,伺服器仍然要當場生成。如果要把玩家留在範圍內,可以用原版的世界邊界。worldborder set 的數字是邊長,也就是半徑的兩倍。設定好邊界後,chunky worldborder 會直接讀取邊界作為中心與半徑:
1worldborder center 0 0
2worldborder set 2000
3chunky worldborder
4chunky selection
5chunky start
chunky selection 顯示 Radius: 1000 就代表讀取正確。每個維度有各自的邊界,在伺服器視窗輸入 worldborder 只會改變主世界。
實測紀錄
半徑對照都在相同種子的新世界測得,沒有玩家連線,上面的耗時是 i7-12700 的 20 條執行緒。跑圖比較的玩家是我寫的測試程式,它用原版的連線協定登入伺服器並送出移動封包,沒有實際的遊戲畫面。每種組合交替跑 3 次,未生成的世界每次都是新世界。視野內沒有送達的區塊比例如下,已生成的世界在這些組合都是 0%:
| 玩家與速度 | CPU 執行緒 | 未生成的世界 |
|---|---|---|
| 1 人,每秒 30 格 | 20 條 | 0% |
| 4 人,每秒 30 格 | 20 條 | 9% |
| 4 人,每秒 10 格 | 4 條 | 35% |
| 4 人,每秒 30 格 | 4 條 | 97% |
測試時同一台電腦也有其他程式在執行,因此結果會有波動,例如 4 人、20 條執行緒,3 次的比例分別是 23%、3% 與 0.3%。
總結
預先生成時要先依硬碟空間與時間決定半徑,再依序處理三個維度。實測一個玩家時,有沒有預先生成幾乎沒有差異,四個玩家時未生成的世界會有區塊來不及送達。