如何在 Bukkit 中使用 NMS

雖然 Minecraft 歡迎使用各種插件(您可以使用它們來改變您的遊戲體驗),但遊戲的某些元素不受插件操作的影響。 Net.Minecraft.Server (NMS) 是這些受保護的軟件包之一,因為它包含遊戲的重要服務器代碼。此代碼直接來自 Minecraft 的開發人員 Mojang,玩家不應訪問。

使用 Bukkit,玩家可以圍繞 NMS 代碼創建一個抽象層。這使他們能夠開發與服務器代碼交互的插件,而無需直接更改玩遊戲所必需的代碼庫。可以將它想像成一個窗口,讓您可以查看要在插件中使用的代碼,但也可以作為防止您直接更改代碼的屏障。

讓我們探討如何將 Bukkit 與 Minecraft 一起使用NMS。

開始之前 – 關於 Bukkit 您需要了解的內容

Bukkit 是一個 API,它允許您創建和使用插件來改變您體驗 Minecraft 多人遊戲的方式。至少,它是。 Bukkit 的最後一個版本於 2016 年問世,此後已停產,取而代之的是名為 Spigot 的不同 API。雖然與 Bukkit 的工作方式類似,但它提供了更好的服務器性能。

因此,使用 Bukkit 作為您的插件需要您既玩過時版本的 Minecraft,又接受 Bukkit 不如其替代品的事實應用程序接口。假設您樂於接受這些犧牲,那麼您只需要這些:

Java 開發工具包 (JDK) 7 或更高版本,最推薦 JDK 8。

有了它,您就可以創建一些插件了。

如何為 Minecraft 創建 Bukkit 插件

在開始使用 Bukkit 訪問 Minecraft 的 NMS 之前,您需要將 API 添加為依賴項,設置一個允許 Bukkit 與您創建的插件交互的主類,並為 Bukkit 提供將插件加載到遊戲中所需的信息。每個步驟都需要編碼,隨後的示例來自 RIP 教程

第 1 步 –將 Bukkit 添加為依賴項

過去,您可以通過從 Bukkit 存儲庫下載 Bukkit.jar 文件並將其添加到項目的類路徑中,將 Bukkit 添加為 Minecraft 中的依賴項。該選項不再可用,因為無法再訪問存儲庫。

值得慶幸的是,有一種替代方法可以使用遊戲的 pom.xml 文件。打開文件並添加以下行:

spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ org.bukkit bukkit {VERSION provided

第 2 步 – 創建插件的主類

您的插件需要能夠創建單個實例它的主類,用於擴展“JavaPlugin”,以便它識別並允許您在遊戲中使用該插件。將這個主類視為 Bukkit 可以進入以加載和操作的門大多數插件的主類都使用與插件本身相同的名稱,以便在編碼時更容易引用主類。

RIP 教程中的以下示例代碼提供了一個主類的示例對於名為“MyPlugin:”的插件

package com.example.myplugin;//{$TopLevelDomain}.{$Domain}.{$PluginName};導入 org.bukkit.plugin.java.JavaPlugin; public final class MyPlugin extends JavaPlugin { @Override public void onEnable() {//插件啟用時調用 getLogger().info(“onEnable has been invoked!”); } @Override public void onDisable() {//當插件被禁用時調用 getLogger().info(“onDisable has been invoked!”); } }

從另一個類訪問您的插件

您可能希望通過與您為其創建的主類不同的類訪問您的插件,這可能有助於在單個 Minecraft 中訪問多個插件

為此,您需要首先存儲您使用 Bukkit 創建的主類的實例,以便其他類可以訪問它。同樣,以下示例代碼來自 RIP 教程並使用“MyPlugin”類名:

public class MyPlugin extends JavaPlugin { private static MyPlugin instance;//有效的包含插件實例的最終變量 public MyPlugin(){ if( MyPlugin.instance !=null) {//不必要的檢查但確保你的插件只初始化一次。throw new Error(“Plugin already initialized!”); } MyPlugin.instance=this;//一個插件的構造函數應該只被調用一次} public static MyPlugin getInstance(){//Get’s your plugin’s instance return instance; }//your other code… }

一旦你有了實例,你就可以訪問你的主類(通過 Bukkit 創建)使用“getInstance()”命令。下面是一個使用 RIP 教程的“MyPlugin”主類的示例:

public class MyOtherClass { public void doSomethingWithMainClass(){ MyPlugin.getInstance().getLogger().info(“We just used MyPlugin”); } }

第 3 步 – 創建您的 plugin.yml 文件

一個 plugin.yml 文件包含關於您的插件的重要信息,這意味著它作為插件的基本配置文件。沒有這個文件,Bukkit 將不會有將插件加載到 Minecraft 所需的信息,導致插件無法加載並且遊戲可能崩潰。

此文件應包含以下詳細信息:

名稱 – 這是您為插件指定的名稱(即 RIP 教程的“MyPlugin”),它將顯示在日誌消息和插件列表中。版本 – 使用此字段表示插件的版本歷史,從 1.0.0 開始,隨著您更改或編輯插件而上升。Main – 包含插件主類的名稱,它擴展了“JavaPlugin”,允許 Bukkit 進入插件.在 RIP 教程示例中,這個名稱將是“package com.example.myplugin”,您可以在上面的主類代碼中看到它。描述 – 對您的插件功能的基本描述。Author – 您可以有一個作者或多個作者,後者用方括號和逗號表示如下 – [Author1, Author2, Author3]。Contributors – 您將使用此部分來標記為您的插件做出貢獻的任何人,格式與“作者”部分相同。網站 – 如果您有一個網站要插入,或希望將人們鏈接到插件的頁面或 GitHub 存儲庫,您可以在此處輸入 URL。API 版本 – 在此處輸入您使用的 Bukkit API 的版本。如果您不輸入 API 版本,Minecraft 將假定它正在加載舊版插件。該插件可能仍然有效,但您會在加載時在控制台中看到有關它是舊版本的警告。

以下是基於 RIP 教程中使用的命名約定的 plugin.yml 文件示例本文使用的代碼:

名稱:MyPlugin 版本:1.0.0 主要:package com.example.myplugin 描述:Minecraft 測試插件 作者:RIP 教程網站:https://riptutorial.com/bukkit api-version: 1.17

Bukkit 是否適合訪問和使用 NMS?

至此,您已經創建了 Bukkit 依賴項,構建了一個主類作為 Bukkit 進入插件的大門,並擁有了一個插件Bukkit 可以用來查看插件功能的.yml 文件。但是,您可能不想這樣做,因為 Bukkit 已經過時了,您需要運行非常舊版本的 Minecraft 才能有效地使用它。大多數人已經轉移到 Sprigot,它反映了 Bukkit 所做的大部分工作,同時提供了更好的性能。

如果您仍然想使用 Bukkit 來訪問插件,為什麼在更現代的 API 之前選擇它?您使用哪種插件來增強您的 Minecraft 體驗?在下面的評論部分告訴我們所有相關信息。

免責聲明:本網站的某些頁面可能包含附屬鏈接。這不會以任何方式影響我們的社論。

發送給某人

丟失設備

Categories: IT Info