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

Ted Liou 2025.07.22 Unity
想在 Unity 遊戲或應用程式中顯示 Minecraft 伺服器的即時狀態嗎?本文將透過我開發的 MCStatusForUnity 套件,說明要如何在 Unity 中整合並取得 Java / Bedrock 版的即時伺服器資訊、線上玩家數量與遊戲版本等資訊。

Unity 是個跨平台遊戲引擎,也是一個高度自由的設計工具。我們能用 Unity 來自行設計能顯示伺服器資訊 UI,並把它安裝到閒置的平板或手機中,當作一個精美的 Minecraft 伺服器 監控介面。

我使用 mcstatus.io 提供的 Minecraft 伺服器狀態查詢 API,並配合 RestClient 來取得任意的 Minecraft 伺服器狀態,最後打包並開源為「MCStatusForUnity」套件。

本文主要聚焦在我開發的「MCStatusForUnity」的使用上,我們後續再其它文章中分別說明如何使用 RestClient 來和 mcstatus.io 的 API 溝通。

安裝依賴套件

「MCStatusForUnity」依賴 RestClient 與 C-Sharp-Promise-UPM 兩個套件,RestClient 是一個用 Promise 模式開發的套件,大幅簡化在 C# 中與 RESTful API 溝通的複雜度;C-Sharp-Promise-UPM 則是 C# 的 Promise 模式的實現,RestClient 就是使用它來開發。我們使用 Unity 的 Package Manager (UPM) 來安裝這三個套件,請先確保電腦中已安裝 Git

首先,請開啟 Unity 專案,從左上角的選單進入「Window > Package Manager」。

Unity編輯器,從頂部選單打開Window、Package Manager

接著,在 Package Manager 視窗中,點擊左上角的「+」按鈕,然後選擇「Add package from git URL…」。

Unity的Package Manager,點擊左上角+按鈕,點擊Install package from git URL

在彈出的輸入框中,依序輸入以下三個套件的 Git URL,每輸入一個就點擊 Install:

1. C-Sharp-Promise-UPM

1https://github.com/RoryDungan/C-Sharp-Promise-UPM.git

2. RestClient

1https://github.com/proyecto26/RestClient.git#upm

3. MCStatusForUnity

1https://github.com/tedliou/MCStatusForUnity.git

每次點擊 Install,Unity 都會自動下載並安裝對應的套件。完成這三個步驟後,你就已成功安裝了 MCStatusForUnity 及其所有依賴套件。

Unity的Package Manager,已安裝C-Sharp-Promise-UPM、RestClient、MCStatusForUnity

建立 C# 腳本

進入重頭戲,我們要在遊戲啟動時自動去取得 Minecraft 伺服器的即時狀態。請新增一個「MonoBehaviour C#」腳本,命名為「MCServerChecker」,並引入 VerveCode 命名空間 (第 2 行反白處),類別內保留 Start 方法。

 1using UnityEngine;
 2using VerveCode;
 3
 4public class MCServerChecker : MonoBehaviour
 5{
 6    private void Start()
 7    {
 8        // 遊戲啟動時會執行這一區塊
 9    }
10}

查詢 Java 版 Minecraft 伺服器狀態

假設我們現在要取得 暮色契約 Java 版 Minecraft 伺服器的狀態,請呼叫 MCStatus.GetServerStatus<T> 方法,並設定泛型 T 為 MCStatusJava

MCStatus.GetServerStatus<T> 方法需要輸入三個參數,分別為 address (伺服器位址)、port (伺服器端口) 與 callbackcallback 使用 UnityAction 實作,可透過 Lambda 語法來在成功獲得伺服器狀態時,自動執行區塊內的程式碼。

取得「暮色契約」Minecraft 伺服器的 MOTD、線上人數、最大人數的程式碼如下:

1MCStatus.GetServerStatus<MCStatusJava>(
2    address: "twilightrpg.net", // Java 伺服器位址
3    port: 25565,                // Java 伺服器端口
4    callback: status =>
5{
6    // 印出伺服器的 MOTD 和 線上人數 / 最大人數
7    Debug.Log($"Java Server MOTD (Clean): {status.Motd.Clean}");
8    Debug.Log($"Java Server Online Players: {status.Players.Online}/{status.Players.Max}");
9});

查詢 Bedrock 版 Minecraft 伺服器狀態

Bedrock 版的 Minecraft 伺服器狀態查詢用法幾乎一樣,差異在於泛型 T 要改用 MCStatusBedrockMCStatus.GetServerStatus<T> 所需參數與 Java 版相同。

取得「廢土基岩村」Minecraft 伺服器的 MOTD、線上人數、最大人數的程式碼如下:

1MCStatus.GetServerStatus<MCStatusBedrock>(
2    address: "bedrock.mcfallout.net",   // Bedrock 伺服器位址
3    port: 19132,                        // Bedrock 伺服器端口
4    callback: status =>
5{
6    // 印出伺服器的 MOTD 和 線上人數 / 最大人數
7    Debug.Log($"Bedrock Server MOTD (Clean): {status.Motd.Clean}");
8    Debug.Log($"Bedrock Server Online Players: {status.Players.Online}/{status.Players.Max}");
9});

範例程式碼

如果我們將 Java 版 (暮色契約) 與 Bedrock 版 (廢土基岩村) Minecraft 伺服器的即時狀態取得程式碼同時寫在 Start 中,整體程式碼如下:

 1using UnityEngine;
 2using VerveCode;
 3
 4public class MCServerChecker : MonoBehaviour
 5{
 6    private void Start()
 7    {
 8        // 查詢 Java 版「暮色契約」Minecraft 伺服器狀態
 9        MCStatus.GetServerStatus<MCStatusJava>(
10            address: "twilightrpg.net",
11            port: 25565,
12            callback: status =>
13        {
14            Debug.Log($"Java Server MOTD (Clean): {status.Motd.Clean}");
15            Debug.Log($"Java Server Online Players: {status.Players.Online}/{status.Players.Max}");
16        });
17
18        // 查詢 Bedrock 版「廢土基岩村」Minecraft 伺服器狀態
19        MCStatus.GetServerStatus<MCStatusBedrock>(
20            address: "bedrock.mcfallout.net",
21            port: 19132,
22            callback: status =>
23        {
24            Debug.Log($"Bedrock Server MOTD (Clean): {status.Motd.Clean}");
25            Debug.Log($"Bedrock Server Online Players: {status.Players.Online}/{status.Players.Max}");
26        });
27    }
28}

執行結果

快結束了!我們將 C# 腳本存檔,回到 Unity 編輯器。請新增一個 GameObject 空物件,並將 MCServerChecker 腳本拖曳到物件上。

Unity編輯器,新增GameObject空物件,拖曳C#腳本到GameObject空物件的Inspector中

接著,執行遊戲,等待 1 ~ 2 秒,即可從 Console 面板中分別看到 Java 與 Bedrock 的 Minecraft 伺服器 MOTD、線上玩家、最大玩家資訊已被取得並顯示出來。

Unity編輯器,Console中顯示Minecraft Java、Bedrock伺服器的即時狀態

我們也能將結果和 McList 網站比對一下,伺服器狀態通常不會差太多。我開發的「MCStatusForUnity」使用 mcstatus.io 的 Minecraft 伺服器查詢 API 來取得即時狀態。其中,因為 mcstatus.io 會有固定 1 分鐘的狀態暫存,所以伺服器的狀態更新最多可能會延遲 1 分鐘才會生效。

McList的暮色契約Minecraft伺服器資訊

McList的廢土基岩村Minecraft伺服器資訊

相關文章

Ted Liou

我是一位遊戲開發工程師 / 軟體工程師,專精於 Unity 和 C#。我善於自學新技術,並樂於將所學轉化為淺顯易懂的教材,幫助他人學習與成長。