Minecraft 伺服器狀態擷取:於 Unity 中獲取 Java / Bedrock 版即時狀態 (MCStatusForUnity)

Ted Liou 2025.07.22 Unity 最後更新 2026.03.17

快速摘要

如果想在 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-UPMRestClient。這個順序沒有變,所以我們先照這個流程走。只要電腦能讓 Unity 透過 Git URL 安裝套件即可。

請先打開 Unity 專案,從上方選單進入「Window > Package Manager」。

Unity 編輯器中從 Window 開啟 Package Manager

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

Package Manager 選擇 Add package from git URL

然後依序輸入下面三個 Git URL:

  1. https://github.com/RoryDungan/C-Sharp-Promise-UPM.git
  2. https://github.com/proyecto26/RestClient.git#upm
  3. https://github.com/tedliou/MCStatusForUnity.git

三個都裝完之後,Package Manager 應該會看到它們已經列在專案裡。

Package Manager 已安裝 MCStatusForUnity 與相依套件

目前套件安裝順序與 Git URL 仍以各自專案 README 為準,請參考:MCStatusForUnity GitHubRestClient 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 掛上去。

將 MCServerChecker 腳本掛到場景中的空物件

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

Console 顯示 Java 與 Bedrock 伺服器狀態

「即時」這兩個字要保留一點現實感

這裡有一個很容易忽略的地方。MCStatusForUnity 背後用的是 mcstatus.io,而 mcstatus.io 官方文件目前明講所有資料路由都有快取。命中快取時,回應會帶 X-Cache-HitX-Cache-Time-Remaining header。

這代表畫面上看到的狀態有可能比真實伺服器晚一點更新,延遲也不是固定 1 分鐘。若你做的是資訊面板、伺服器介紹頁或一般監控畫面,這通常沒有問題;但若你想做秒級告警或精準統計,就要把這層快取算進去。

mcstatus.io 的欄位與快取說明,請參考:Minecraft Server Status API Documentation

總結

如果目標只是把 Minecraft 伺服器狀態接進 Unity,MCStatusForUnity 已經把最麻煩的查詢流程包掉了。把相依套件裝好之後,Java 和 Bedrock 的用法都很直接。實務上只要再多留意一件事就夠了:mcstatus.io 有快取,因此這份資料適合做狀態展示,不要把它當成完全即時、沒有延遲的監控來源。

常見問題

可以,但要分別使用對應的型別,例如 Java 用 MCStatusJava,Bedrock 用 MCStatusBedrock,兩者的查詢流程很接近。

因為 MCStatusForUnity 目前就是建立在這兩個套件上。少了它們,套件本身就沒辦法正常運作,GitHub README 目前也仍然把這兩個相依套件列在安裝步驟裡。

原因在 mcstatus.io 會做快取。官方文件寫得更精確:命中快取時,回應會帶 X-Cache-HitX-Cache-Time-Remaining header,所以延遲不是固定 1 分鐘,要看當下快取剩餘時間。

作者

Ted Liou

現職 Unity C# 工程師,主要分享 Unity、C# 與 Vibe Coding 相關技術教學。

上一篇 使用 WinGet 安裝 OpenJDK:Windows 下載、驗證與移除教學 下一篇 Google Play Games 開發人員模擬器能當無廣告 Android 模擬器嗎?實測非遊戲 APP 安裝流程