Jak korzystać z NMS w Bukkit

Jak korzystać z NMS w Bukkit

Chociaż Minecraft jest przyjazny dla różnych wtyczek (których możesz użyć, aby zmienić swoje wrażenia z gry), niektóre elementy gry są chronione przed manipulacją wtyczkami. Net.Minecraft.Server (NMS) jest jednym z tych chronionych pakietów, ponieważ zawiera kluczowy kod serwera dla gry. Ten kod pochodzi bezpośrednio od twórców Minecrafta, firmy Mojang, i nie powinien być dostępny dla graczy.

Dzięki Bukkitowi gracze mogą stworzyć warstwę abstrakcji wokół kodu NMS. Pozwala im to na tworzenie wtyczek, które wchodzą w interakcje z kodem serwera bez wprowadzania bezpośrednich zmian w bazie kodu, która jest niezbędna do gry. Pomyśl o tym jak o oknie, które pozwala spojrzeć na kod, którego chcesz użyć we wtyczce, ale działa również jako bariera uniemożliwiająca bezpośrednią zmianę kodu.

Przyjrzyjmy się, jak używać Bukkit z NMS Minecrafta.

Zanim zaczniesz – co musisz wiedzieć o Bukkit

Bukkit to interfejs API, który umożliwia tworzenie i używanie wtyczek, które zmieniają sposób korzystania z wieloosobowego aspektu gry Minecraft. Przynajmniej tak było. Ostatnia wersja Bukkita pojawiła się w 2016 roku i od tego czasu została wycofana, aby zrobić miejsce dla innego API o nazwie Spigot. Działając podobnie do Bukkita, oferuje lepszą wydajność serwera.

Tak więc korzystanie z Bukkit dla wtyczek wymaga zarówno grania w przestarzałą wersję gry Minecraft, jak i zaakceptowania faktu, że Bukkit nie jest tak dobry, jak jego zastępczy interfejs API. Zakładając, że jesteś zadowolony z przyjęcia tych poświęceń, oto jedyne rzeczy, których potrzebujesz:

  • Java Development Kit (JDK) 7 lub nowszy, przy czym większość zaleca JDK 8.

Dzięki temu możesz utworzyć kilka wtyczek.

Jak tworzyć wtyczki Bukkit dla Minecrafta

Zanim zaczniesz używać Bukkit do uzyskiwania dostępu do NMS Minecrafta, musisz dodać API jako zależność, ustawić główną klasę, która pozwoli Bukkitowi na interakcję z tworzoną wtyczką i dostarczyć Bukkitowi informacje potrzebne do załadowania wtyczki do gra. Każdy krok wymaga kodowania, a poniższe przykłady pochodzą z samouczka RIP .

Krok 1 – Dodaj Bukkit jako zależność

W przeszłości można było dodać Bukkit jako zależność w Minecrafcie, pobierając plik Bukkit.jar z repozytorium Bukkit i dodając go do ścieżki klasy projektu. Ta opcja nie jest już dostępna, ponieważ Repozytorium nie jest już dostępne.

Na szczęście istnieje alternatywna metoda wykorzystująca plik pom.xml Twojej gry. Otwórz plik i dodaj następujące wiersze:

<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>

Krok 2 – Utwórz główną klasę swojej wtyczki

Twoja wtyczka musi być w stanie utworzyć pojedynczą instancję swojej głównej klasy, która służy do rozszerzania „JavaPlugin”, tak aby rozpoznawała wtyczkę i umożliwiała jej używanie podczas gry. Pomyśl o tej głównej klasie jako o drzwiach, przez które Bukkit może wejść, aby załadować i manipulować wtyczką. Większość nadaje swojej głównej klasie wtyczki taką samą nazwę jak sama wtyczka, co ułatwia odwoływanie się do głównej klasy podczas kodowania.

Poniższy przykładowy kod z RIP Tutorial przedstawia przykład głównej klasy wtyczki o nazwie „MyPlugin”:

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!");
}
}

Dostęp do wtyczki z innej klasy

Możesz chcieć uzyskać dostęp do swojej wtyczki za pośrednictwem innej klasy niż klasa główna, którą dla niej utworzysz, co może być pomocne przy uzyskiwaniu dostępu do kilku wtyczek w jednej grze Minecraft.

Aby to zrobić, musisz najpierw zapisać instancję klasy głównej, którą utworzyłeś za pomocą Bukkit, aby inne klasy miały do ​​niej dostęp. Poniższy przykładowy kod pochodzi z samouczka RIP i używa nazwy klasy „MyPlugin”:

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...
}

Po utworzeniu instancji możesz uzyskać dostęp do swojej głównej klasy (utworzonej za pomocą Bukkit) za pomocą polecenia „getInstance()”. Oto przykład użycia głównej klasy „MyPlugin” RIP Tutorial:

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

Krok 3 – Utwórz swój plik plugin.yml

Plik plugin.yml zawiera istotne informacje o Twojej wtyczce, co oznacza, że ​​służy jako podstawowy plik konfiguracyjny wtyczki. Bez tego pliku Bukkit nie będzie miał informacji potrzebnych do załadowania wtyczki do gry Minecraft, co może prowadzić do niepowodzenia ładowania wtyczki i prawdopodobnej awarii gry.

Ten plik powinien zawierać następujące szczegóły:

  • Nazwa — jest to nazwa, którą nadałeś swojej wtyczce (tj. „Moja wtyczka” w samouczku RIP), która będzie wyświetlana w komunikatach dziennika i na liście wtyczek.
  • Wersja — użyj tego pola, aby wskazać historię wersji wtyczki, począwszy od 1.0.0 i idąc w górę w miarę wprowadzania zmian lub edycji wtyczki.
  • Main – Zawiera nazwę głównej klasy wtyczki, która rozszerza „JavaPlugin”, umożliwiając Bukkitowi wejście do wtyczki. W przykładzie z samouczkiem RIP ta nazwa to „package com.example.myplugin”, co widać w kodzie głównej klasy powyżej.
  • Opis – Podstawowy opis tego, co robi Twoja wtyczka.
  • Autor — możesz mieć jednego autora lub wielu autorów, przy czym ci ostatni są oznaczani nawiasami kwadratowymi i przecinkami w następujący sposób — [Autor1, Autor2, Autor3].
  • Współtwórcy – użyjesz tej sekcji, aby odnotować każdego, kto przyczynił się do powstania Twojej wtyczki, przy czym formatowanie będzie takie samo jak w sekcji „Autorzy”.
  • Witryna internetowa — jeśli masz witrynę internetową do podłączenia lub chcesz połączyć ludzi ze stroną wtyczki lub repozytorium GitHub, możesz wprowadzić adres URL tutaj.
  • API-Version – Wprowadź tutaj wersję API Bukkit, której używasz. Jeśli nie wpiszesz wersji API, Minecraft założy, że ładuje starszą wtyczkę. Wtyczka może nadal działać, ale po załadowaniu w konsoli zobaczysz ostrzeżenie, że jest to starsza wersja.

Poniżej znajduje się przykład pliku plugin.yml opartego na konwencji nazewnictwa stosowanej w kodzie samouczka RIP użytym w tym artykule:

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

Czy Bukkit jest odpowiedni do uzyskiwania dostępu i korzystania z NMS?

W ten sposób utworzyłeś zależność Bukkita, zbudowałeś główną klasę, która będzie służyć jako drzwi Bukkita do wtyczki i masz plik plugin.yml, którego Bukkit może użyć, aby zobaczyć, co robi wtyczka. Jednak możesz nie chcieć tego robić, ponieważ Bukkit jest tak przestarzały, że będziesz musiał uruchomić bardzo starą wersję Minecrafta, aby efektywnie z niego korzystać. Większość przeszła już na Sprigot, który odzwierciedla większość tego, co zrobił Bukkit, oferując jednocześnie lepszą wydajność.

Jeśli nadal chcesz używać Bukkit do uzyskiwania dostępu do wtyczek, dlaczego wybrałeś go zamiast bardziej nowoczesnych interfejsów API? Jakich wtyczek używasz, aby poprawić wrażenia z gry Minecraft? Opowiedz nam o tym w sekcji komentarzy poniżej.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *