Vorbereitung für die mc-plugins und etwas Struktur hinter einem mc-Server

MineCraft-Java-Server

Im Laufe der Jahre haben die Programmier:innen und Entwickler:innen von minecraft immer wieder neue Features (Objekte, Eigenschaften, …)  eingebaut. All die Entwicklungsarbeit steckt z.B. in  der Datei spigot1.16.jar — die Dateiendung jar steht für java-archive; also ein Archiv gefüllt mit kompilierten (ausführbaren) Java-Dateien.
Die mc-Server.jar-Dateien sind kostenlos und man damit sich einfach einen eigenen mc-Server aufbauen. Was in manchen Fällen Geld kostet, ist das Hosten bei Internet-Provider o.ä..
Was zu tun ist, um einen eigenen (lokalen) mc-Java-Server zu betreiben, ist nach dem Download der Datei, ein Doppelklick auf diese. Dadurch wird u.a. in dem Ordner, in dem sich die jar-Datei befindet die Datei eula.txt angelegt. Öffne diese Datei und ändere die Zeile eula = false auf eule = true um. Speichere die  Datei, schließe sie und klicke erneut doppelt auf die jar-datei. Nun beginnt der erste Start deines mc-Servers.
Je nach Rechnerleistung erscheint nach ca. 10 Sekunden eine Fenster mit weißen Hintergrund, das den Fortschritts des Startens (Erstellung der Welt usw.) anzeigt.
Ist dieser Vorgang fertig ( =  100%), dann kannst du dich mit dem mc-Client durch Eingabe der IP-Adresse des PC, auf dem der mc-Server läuft, verbinden und es kann losgehen.

Minecraft-Plugins

Neben anderen Entwicklungszweigen lässt es  spigot  zu, dass so genannte plugins zum nackten Server dazu geladen werden können. Diese plugins nutzen die bereits in der spigot.jar-Datei bereitgestellten d.h. wir können z.B. eigene Kommandos erstellen oder spezielle Reaktion auf bestimmte Ereignisse implementieren, damit das Spielen sowohl eine persönlichere Note bekommt als auch ganz neue Spielzüge möglich werden.
Daher binden wir dieses Java-Archive in unsere Entwicklung ein und erstellen hier Anwendungen vom Typ JavaPlugin, wie wir in Kürze sehen werden.

Was wir sonst noch benötigen?

Um uns das Leben etwas einfacher zu machen, werden wir eine Entwicklungsumgebung (IDE) wie z.B. eclipse verwenden. Es gibt auch noch andere IDEs; manche schwören auf InteliJ; jeder darf natürlich das von ihm bevorzugte Produkt verwenden.

Auf dem PC, auf dem wir die plugins programieren, benötigen wir neben der IDE auch noch ein JavaDevelopmentKit (kurz JDK), das man z.B. bei Bedarf bei oracle  herunterladen kann. Hier muss man einen Account erstellen, der jedoch kostenlos ist. Oder man wählt die Alternative OpenJDK. Bei beiden Varianten sollte man sich vorher informieren, welche Version von Java für den geplanten mc-Server nötig ist. So lässt sich etwas Ärger ersparen, wann man gerne mit dem Coding loslegen möchte, jedoch die einzelne Tools nicht vollständig zusammenpassen.

Minimalstruktur eines mc-JavaPlugins

So, nun beginnen wir mit der eigentlich Programmierung. Neben der Java-Datei, die das eigentlich Plugin enthalten wird, müssen  wir noch 2 weitere Dateien erstellen.
Main.java ist quasi der „Einsprungpunkt“, in dem die einzelnen Funktionen, die wir erstellen wollen, deklariert bzw. implementiert werden.
Dann gibt es noch plugin.yml — eine reine Textdatei –, die neben ein paar nötigen Informationen auch die Bezeichnung der Kommandos enthalten wird.

Unser erstes Plugin

Wir erstellen nun ein Plugin, das zuerst nur aus einem Kommando, mit dem sich der Spieler  heilen kann, besteht. Tippt der Spieler das Kommando /heile ein, dann wird sowohl der Foodlevel (Hungerkeulen)  als auch Health (Herzen) auf den Maximalwert  gesetzt.

Main.java
Main.java Wir haben eine JavaKlasse mit dem Namen Main im Package main erstellt. Diese JavaKlasse soll als „Einsprungpunkt“ und „Kontrollzentrum“ unseres Plugins dienen.
Mittels extends JavaPlugin (Zeile 7) machen wir aus der JavaKlasse ein Plugin.
Wir müssen nach dem Tippen, was zuerst eine roten Wellenlinie unter extends JavaPlugin ergibt, den benötigten Teil aus dem Archive importiert (siehe Zeile 3).
Nun erstellen wir die Methode onEnable(), die beim Einbinden unseres Plugins am Server ausgeführt wird.  Dadurch wird unser Kommando heile deklariert und kann daher auch aufgerufen werden.
Die JavaKlasse, die hinter dem Kommando heile steht, ist Heal.java, das wir gleich separat erstellen werden.

 

Heal.java

Nun erstellen wir im Packages command die JavaKlasse Heal.
Da dies ein Kommando werden soll, fügen wir implements CommandExecutor (Zeile 8) hinzu — importieren der Teile aus spigot*.jar nicht vergessen.
So erhalten wir eine Fehlermeldung, da die Methode onCommand noch fehlt. Diese Zeilen (10+11) bitte nicht abtippen, sondern von eclipse erstellen lassen (siehe Video).
Sobald diese Zeile eingefügt wurden, ändern wir die Bezeichnungen der Parameter von args0, ..   auf sender, command, label und args um. Dies ist nicht verpflichtend, macht jedoch unsere Arbeit etwas klarer.Unser Kommando soll nur ein Player ausführen dürfen, daher fragen wir in Zeile 13, ob es sich beim Aufrufer (sender) des Kommandos (CommandSender) um eine Instanz eines Players handelt.
Ist dies der Fall, dann legen wir (Zeile 15) temporär eine Instanz  eines Players mit dem Namen spuela an, damit wir die weiteren Programmschritte einfacher durchführen können.
Dann setzen wir (Zeile 17) die Eigenschaft Health unsers Players spuela mittels spuela.setHealth(20.0) auf den Maximalwert — Achtung Wert muss Dezimalzahl sein.
In Zeile 19 erstellen wir eine Nachricht für den Spieler, dass das Kommando erfolgreich war.
Handelt es sich beim Ausführer des Kommandos nicht um einen Player , dann melden wir dies (Zeile 22) zurück.

 

plugin.yml

Die yml-Datei beginnt mit ein paar wichtigen Werten u.a. ist der „Pfad“ zum „Einsprungpunkt“ (main) nötig, ebenso die api-Version (Version des mc-Servers).

In Zeile 7 steht das Schlüsselwort commands. Ab hier deklarieren wir die Kommandos, die das Pluign zur Verfügung stellt.
Wir rücken 3 Zeichen (3xLeertaste) ein und tippen das Kommando — bei uns hier heile —  inkl. Doppelpunkt ein. In der nächste Zeile kommen zuerst wieder 3 Leerzeichen und das Schlüsselwort description mit einem Doppelpunkt. Dahinter können wir einen beliebigen Beschreibungstext einfügen.

 

Im folgenden Video werden sowohl die Vorbereitung als auch die Erstellung unseres ersten plugins durchgeführt.