快速摘要
如果想在 Unity 裡顯示 Minecraft 伺服器是否在線、目前幾個人與 MOTD,MCStatusForUnity 已經把 Java / Bedrock 的查詢流程包好了。本文直接帶你完成安裝、查詢與結果驗證。

如果我們只是想在 Unity 裡顯示 Minecraft 伺服器有沒有在線、目前幾個人、MOTD 是什麼,沒有必要先自己去碰 Java Ping 協定或 Bedrock 查詢流程。MCStatusForUnity 已經把 mcstatus.io 的查詢封裝好了,Java 版和 Bedrock 版都能用同一套入口拿資料。
這種做法很適合做伺服器資訊面板、掛在平板上的監控畫面,或直接嵌進遊戲內的伺服器列表。本文直接從安裝開始,帶到查詢 Java / Bedrock 的完整流程,最後再補一個實務上很重要的限制:mcstatus.io 會做快取,所以這份資料不是每次都會秒級同步。
先把套件裝完整
MCStatusForUnity 目前 GitHub README 仍然要求先安裝兩個相依套件:C-Sharp-Promise-UPM 和 RestClient。這個順序沒有變,所以我們先照這個流程走。只要電腦能讓 Unity 透過 Git URL 安裝套件即可。
請先打開 Unity 專案,從上方選單進入「Window > Package Manager」。

接著在 Package Manager 左上角點擊「+」,選擇「Add package from git URL…」。不同 Unity 版本的按鈕文字可能是「Add」或「Install」,但流程一樣。

然後依序輸入下面三個 Git URL:
https://github.com/RoryDungan/C-Sharp-Promise-UPM.githttps://github.com/proyecto26/RestClient.git#upmhttps://github.com/tedliou/MCStatusForUnity.git
三個都裝完之後,Package Manager 應該會看到它們已經列在專案裡。

目前套件安裝順序與 Git URL 仍以各自專案 README 為準,請參考:MCStatusForUnity GitHub、RestClient GitHub。
建立查詢腳本
接下來新增一個「MonoBehaviour C#」腳本,命名為「MCServerChecker」。MCStatusForUnity 的 API 都在 VerveCode 命名空間裡,所以一開始先把它引進來。
1using UnityEngine;
2using VerveCode;
3
4public class MCServerChecker : MonoBehaviour
5{
6 private void Start()
7 {
8 // 遊戲啟動時會執行這一區塊
9 }
10}
查詢 Java 版 Minecraft 伺服器狀態
先從 Java 版開始。MCStatus.GetServerStatus<T> 需要三個參數:伺服器位址、連接埠,以及查詢成功後要執行的回呼。泛型 T 則用來指定你要查的是 MCStatusJava 還是 MCStatusBedrock。
下面這段會查詢 Java 版伺服器,並把 MOTD、線上玩家與最大玩家數印到 Console。MCStatusForUnity 的 README 目前也提到,失敗時回呼可能收到 null,所以這裡順手把檢查補上。
1MCStatus.GetServerStatus<MCStatusJava>(
2 address: "twilightrpg.net",
3 port: 25565,
4 callback: status =>
5{
6 if (status == null)
7 {
8 Debug.LogWarning("Java 伺服器狀態查詢失敗。");
9 return;
10 }
11
12 Debug.Log($"Java Server MOTD (Clean): {status.Motd.Clean}");
13 Debug.Log($"Java Server Online Players: {status.Players.Online}/{status.Players.Max}");
14});
查詢 Bedrock 版 Minecraft 伺服器狀態
Bedrock 版的寫法幾乎一樣,差別只有泛型改成 MCStatusBedrock,以及連接埠通常用 19132。
如果你要查的是 Bedrock 伺服器,可以這樣寫:
1MCStatus.GetServerStatus<MCStatusBedrock>(
2 address: "bedrock.mcfallout.net",
3 port: 19132,
4 callback: status =>
5{
6 if (status == null)
7 {
8 Debug.LogWarning("Bedrock 伺服器狀態查詢失敗。");
9 return;
10 }
11
12 Debug.Log($"Bedrock Server MOTD (Clean): {status.Motd.Clean}");
13 Debug.Log($"Bedrock Server Online Players: {status.Players.Online}/{status.Players.Max}");
14});
一次把 Java 和 Bedrock 都查出來
如果你想在同一個畫面同時顯示兩種版本的伺服器,直接把兩段都放進 Start 就可以了。完整腳本如下:
1using UnityEngine;
2using VerveCode;
3
4public class MCServerChecker : MonoBehaviour
5{
6 private void Start()
7 {
8 MCStatus.GetServerStatus<MCStatusJava>(
9 address: "twilightrpg.net",
10 port: 25565,
11 callback: status =>
12 {
13 if (status == null)
14 {
15 Debug.LogWarning("Java 伺服器狀態查詢失敗。");
16 return;
17 }
18
19 Debug.Log($"Java Server MOTD (Clean): {status.Motd.Clean}");
20 Debug.Log($"Java Server Online Players: {status.Players.Online}/{status.Players.Max}");
21 });
22
23 MCStatus.GetServerStatus<MCStatusBedrock>(
24 address: "bedrock.mcfallout.net",
25 port: 19132,
26 callback: status =>
27 {
28 if (status == null)
29 {
30 Debug.LogWarning("Bedrock 伺服器狀態查詢失敗。");
31 return;
32 }
33
34 Debug.Log($"Bedrock Server MOTD (Clean): {status.Motd.Clean}");
35 Debug.Log($"Bedrock Server Online Players: {status.Players.Online}/{status.Players.Max}");
36 });
37 }
38}
執行結果
把腳本存檔後,回到 Unity 場景。新增一個空的 GameObject,然後把 MCServerChecker 掛上去。

接著執行遊戲,等一到兩秒,Console 就會看到 Java 與 Bedrock 的 Minecraft 伺服器資訊被印出來。

「即時」這兩個字要保留一點現實感
這裡有一個很容易忽略的地方。MCStatusForUnity 背後用的是 mcstatus.io,而 mcstatus.io 官方文件目前明講所有資料路由都有快取。命中快取時,回應會帶 X-Cache-Hit 和 X-Cache-Time-Remaining header。
這代表畫面上看到的狀態有可能比真實伺服器晚一點更新,延遲也不是固定 1 分鐘。若你做的是資訊面板、伺服器介紹頁或一般監控畫面,這通常沒有問題;但若你想做秒級告警或精準統計,就要把這層快取算進去。
mcstatus.io 的欄位與快取說明,請參考:Minecraft Server Status API Documentation。
總結
如果目標只是把 Minecraft 伺服器狀態接進 Unity,MCStatusForUnity 已經把最麻煩的查詢流程包掉了。把相依套件裝好之後,Java 和 Bedrock 的用法都很直接。實務上只要再多留意一件事就夠了:mcstatus.io 有快取,因此這份資料適合做狀態展示,不要把它當成完全即時、沒有延遲的監控來源。
常見問題
MCStatusJava,Bedrock 用 MCStatusBedrock,兩者的查詢流程很接近。MCStatusForUnity 目前就是建立在這兩個套件上。少了它們,套件本身就沒辦法正常運作,GitHub README 目前也仍然把這兩個相依套件列在安裝步驟裡。mcstatus.io 會做快取。官方文件寫得更精確:命中快取時,回應會帶 X-Cache-Hit 與 X-Cache-Time-Remaining header,所以延遲不是固定 1 分鐘,要看當下快取剩餘時間。