Bár a Minecraft üdvözli a különféle beépülő modulokat (amelyekkel megváltoztathatja a játékélményt), a játék egyes elemei védve vannak a beépülő modulok manipulálásától. A Net.Minecraft.Server (NMS) egyike ezeknek a védett csomagoknak, mivel a játék létfontosságú szerverkódját tartalmazza. Ez a kód közvetlenül a Minecraft fejlesztőitől, a Mojangtól származik, és állítólag nem lesz elérhető a játékosok számára.
A Bukkit segítségével a játékosok absztrakciós réteget hozhatnak létre az NMS kód körül. Ez lehetővé teszi számukra, hogy olyan beépülő modulokat fejlesszenek ki, amelyek kölcsönhatásba lépnek a szerver kódjával anélkül, hogy a játékhoz nélkülözhetetlen változtatásokat végeznének a kódbázison. Tekintsd úgy, mint egy ablakot, amely lehetővé teszi a beépülő modulban használni kívánt kód megtekintését, de akadályként is működik, amely megakadályozza a kód közvetlen megváltoztatását.
Fedezzük fel, hogyan használhatjuk a Bukkit a Minecraft NMS-szel.
Mielőtt elkezdené – Amit a Bukkitről tudni kell
A Bukkit egy API, amely lehetővé teszi olyan beépülő modulok létrehozását és használatát, amelyek megváltoztatják a Minecraft többszereplős aspektusát. Legalábbis az volt. A Bukkit utolsó verziója 2016-ban jelent meg, és azóta megszűnt, hogy helyet adjon egy másik, Spigot nevű API-nak. Miközben a Bukkithez hasonlóan működik, jobb szerverteljesítményt kínál.
Tehát a Bukkit beépülő modulokhoz való használatához le kell játszania a Minecraft elavult verzióját, és el kell fogadnia azt a tényt, hogy a Bukkit nem olyan jó, mint a helyettesítő API. Feltéve, hogy örömmel fogadja ezeket az áldozatokat, csak a következőkre van szüksége:

- Java Development Kit (JDK) 7 vagy újabb, a legtöbb ajánlott JDK 8.
Ezzel készen áll néhány bővítmény létrehozására.
Hogyan készítsünk Bukkit beépülő modulokat a Minecrafthoz

Mielőtt elkezdené használni a Bukkit a Minecraft NMS-hez való hozzáféréséhez, hozzá kell adnia az API-t függőségként, be kell állítania egy fő osztályt, amely lehetővé teszi, hogy a Bukkit kölcsönhatásba lépjen az Ön által létrehozott beépülő modullal, és meg kell adnia a Bukkit számára azokat az információkat, amelyekre szüksége van a bővítmény betöltéséhez játszma, meccs. Minden lépés kódolást igényel, a következő példák pedig innen származnak RIP oktatóanyag.
1. lépés – Adja hozzá a Bukkit függőségként
A múltban a Bukkit függőségként hozzáadhatta a Minecrafthoz úgy, hogy letöltötte a Bukkit.jar fájlt a Bukkit Repository-ból, és hozzáadta a projekt osztályútvonalához. Ez a lehetőség már nem elérhető, mert a tárhely már nem érhető el.
Szerencsére van egy alternatív módszer, amely a játék pom.xml fájlját használja. Nyissa meg a fájlt, és adja hozzá a következő sorokat:
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<!--Bukkit API-->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>{VERSION}</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. lépés – Hozd létre a beépülő modulod fő osztályát
A beépülő modulnak képesnek kell lennie a fő osztály egyetlen példányának létrehozására, amely a „JavaPlugin” kiterjesztésére szolgál, hogy felismerje és lehetővé tegye a bővítmény használatát, amikor játékban van. Tekintsd ezt a fő osztályt úgy, mint egy ajtót, amelyen keresztül a Bukkit beléphet a bővítmény betöltésére és manipulálására. A legtöbben a beépülő modul fő osztályának ugyanazt a nevet adják, mint magának a beépülő modulnak, így könnyebben hivatkozhatunk a fő osztályra a kódolás során.
A RIP oktatóprogram következő példakódja példát mutat a „MyPlugin” nevű bővítmény fő osztályára:
package com.example.myplugin; //{$TopLevelDomain}.{$Domain}.{$PluginName};
import org.bukkit.plugin.java.JavaPlugin;
public final class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
//Called when the plugin is enabled
getLogger().info("onEnable has been invoked!");
}
@Override
public void onDisable() {
//Called when the plugin is disabled
getLogger().info("onDisable has been invoked!");
}
}
Beépülő modul elérése egy másik osztályból
Előfordulhat, hogy a bővítményt más osztályon keresztül szeretné elérni, mint a számára létrehozott fő osztályt, ami hasznos lehet több bővítmény eléréséhez egyetlen Minecraft játékban.
Ehhez először el kell tárolnia a Bukkit segítségével létrehozott fő osztály egy példányát, hogy más osztályok hozzáférhessenek. A következő példakód ismét a RIP oktatóprogramból származik, és a „MyPlugin” osztálynevet használja:
public class MyPlugin extends JavaPlugin {
private static MyPlugin instance; //Effectively final variable containing your plugin's instance
public MyPlugin(){
if(MyPlugin.instance != null) { //Unnecessary check but ensures your plugin is only initialized once.
throw new Error("Plugin already initialized!");
}
MyPlugin.instance = this; //A plugin's constructor should only be called once
}
public static MyPlugin getInstance(){ //Get's your plugin's instance
return instance;
}
//your other code...
}
Ha a példány a helyén van, a „getInstance()” paranccsal elérheti a fő osztályt (a Bukkit segítségével hozta létre). Íme egy példa erre a RIP Tutorial „MyPlugin” főosztályának használatával:
public class MyOtherClass {
public void doSomethingWithMainClass(){
MyPlugin.getInstance().getLogger().info("We just used MyPlugin");
}
}
3. lépés – Hozd létre a plugin.yml fájlt
A plugin.yml fájl létfontosságú információkat tartalmaz a beépülő modulról, ami azt jelenti, hogy a beépülő modul alapvető konfigurációs fájljaként szolgál. E fájl nélkül a Bukkit nem rendelkezik azokkal az információkkal, amelyekre szüksége van ahhoz, hogy betöltse a bővítményt a Minecraftba, ami a beépülő modul betöltésének sikertelenségéhez és a játék valószínűleg összeomlásához vezethet.
Ennek a fájlnak a következő részleteket kell tartalmaznia:
-
Név – Ez az a név, amelyet a beépülő modulnak adott (azaz a RIP oktatóprogram „MyPlugin”), és ez megjelenik a naplóüzenetekben és a beépülő modulok listájában.
-
Verzió – Ezzel a mezővel jelölheti a beépülő modul verzióelőzményeit, az 1.0.0-tól kezdve, és a beépülő modul módosításával vagy szerkesztésével felfelé haladva.
-
Main – A plugin fő osztályának nevét tartalmazza, amely kiterjeszti a „JavaPlugin”-t, lehetővé téve a Bukkit számára, hogy belépjen a bővítménybe. A RIP oktatóprogram példájában ez a név „package com.example.myplugin” lenne, amelyet a fenti fő osztálykódban láthat.
-
Leírás – A beépülő modul működésének alapvető leírása.
-
Szerző – Egy vagy több szerzője lehet, az utóbbiakat szögletes zárójelekkel és vesszőkkel jelöljük a következők szerint – [Author1, Author2, Author3].
-
Közreműködők – Ebben a szakaszban megjegyezhet mindenkit, aki hozzájárult a bővítményéhez, a formázás pedig megegyezik a „Szerzők” szakasz formázásával.
-
Webhely – Ha be kell dugnia egy webhelyet, vagy ha embereket szeretne linkelni a beépülő modul oldalához vagy a GitHub-tárházhoz, akkor ide írja be az URL-t.
-
API-verzió – Adja meg itt a Bukkit API használt verzióját. Ha nem ad meg API-verziót, a Minecraft feltételezi, hogy egy régebbi beépülő modult tölt be. A beépülő modul továbbra is működhet, bár a betöltéskor megjelenik egy figyelmeztetés, miszerint régi verzióról van szó.
A következő egy példa egy plugin.yml fájlra, amely a jelen cikkben használt RIP oktatóprogram kódjában használt elnevezési konvenciókon alapul:
name: MyPlugin
version: 1.0.0
main: package com.example.myplugin
description: A test plugin for Minecraft
author: RIP Tutorial
website: https://riptutorial.com/bukkit
api-version: 1.17
A Bukkit megfelelő az NMS eléréséhez és használatához?
Ezzel létrehozta a Bukkit-függőséget, felépített egy fő osztályt, amely Bukkit ajtajaként szolgál a beépülő modulba, és rendelkezik egy plugin.yml fájllal, amelyet a Bukkit használhat a bővítmény működésének megtekintéséhez. Lehetséges azonban, hogy ezt nem szeretné megtenni, mivel a Bukkit annyira elavult, hogy a hatékony használathoz a Minecraft egy nagyon régi verzióját kell futtatnia. A legtöbben már áttértek a Sprigot-ba, ami tükrözi a legtöbbet, amit Bukkit tett, miközben jobb teljesítményt nyújtott.
Ha továbbra is a Bukkit szeretné használni a bővítmények eléréséhez, miért ezt választotta a modernebb API-k előtt? Milyen típusú bővítményeket használ a Minecraft élmény fokozására? Mondjon el nekünk mindent az alábbi megjegyzések részben.