Tutorial für Einsteiger - Java - Bukkit Plugin

  • 1. Vorwort
    Mit diesem Tutorial möchte ich den Einstieg in die geheimnisvolle Welt der Server Plugins vereinfachen.
    Dieses Tutorial ist für alle gedacht, die mit dem Gedanken spielen Plugins zu schreiben, aber dann doch von der scheinbaren Komplexität abgeschreckt werden.


    Ich möchte aber hier niemandem Java beibringen, oder zeigen wie man zu programmieren hat. Jeder entwickelt mit der Zeit seinen eigenen Stil und wie bei so vielem gilt auch hier "Learning by Doing".


    2. Einleitung
    Ich werde hier nur kurze Einleitungen zu generellen Themen bieten um ein Grundverständnis zu vermitteln.


    Die am meisten genutzte Minecraft Server Software war CraftBukkit, welche die zu verwechselnde Programmierschnittstelle (Application Programming Interface, kurz API) Bukkit verwendet. Bukkit und CraftBukkit sind in Java geschrieben.
    CraftBukkit geriet letztendlich durch Mojang in eine Community Krise und zerbrach. Es hat jedoch die Abwandlung Spigot überlebt, welche sich in kürzester Zeit als Nachfolger etablierte.


    Rennschnitzel betreibt nur Spigot Server und nutzt neben vielen eigenen Plugins auch Plugins von anderen Entwicklern.



    2.a. Java
    Bevor man anfängt Plugins für Bukkit zu entwickeln, sollte man erst die Funktionsweise von Java kennen.


    Objektorientierung:
    Java ist eine objektorientierte Sprache.


    Ein Objekt ist eine Instanz eines Bauplans, der Klasse (class).
    Jede Klasse kann entweder nur einmal von einer anderen Klasse erben (extends), oder die Klasse erbt von der Klasse "Object".
    D.h. jede Instanz ist vom Typ "Object".


    Zusätzlich gibt es Schnittstellen (interface), welche nur Methoden deklariert und von Klassen mehrfach implementiert werden kann.


    Generics:
    Java ermöglicht so genannte generische Klassen.

    • ArrayList<String>
    • Event<? extends UsersRecord>
    • Map<Integer, UUID>

    Diese werden erst zur Laufzeit für jeden einzelnen Subtypen erstellt.
    D.h. ArrayList<String> und ArrayList<Integer> sind zwei komplett unterschiedliche Typen.


    Häufig sieht man auch Klassen innerhalb einer Klasse. Wenn diese inneren Klassen nicht das Schlüsselwort "static" haben, sind diese Klassen ähnlich wie generische Klassen. Dann gibt es für jede Instanz der Elternklasse einen eigenen Typ der inneren nicht-static Klassen. Auch hier gilt, dass diese beiden Typen komplett unterschiedliche Typen sind, obwohl sie im Grunde von der gleichen Klasse stammen.


    Code:
    Man programmiert den Java Programmcode (*.java) als normalen Text,
    dieser wird von dem Java-Compiler in ByteCode (*.class), umgewandelt.


    Der ByteCode besteht aus Anweisungen für die Java-Runtime und ähnelt noch sehr stark dem originalen Code.
    Der ByteCode wird NICHT direkt auf der CPU ausgeführt.
    Er wird stattdessen von der Java-Runtime erst dann geladen und ausgeführt, wenn er auch gebraucht wird.


    Diese Eigenschaft ermöglicht es dem Bukkit Server zur Laufzeit Plugins zu laden.



    3. Test-Umgebung
    Es empfiehlt sich stark zum Testen, lokal auf dem Rechner einen Spigot Server vorzubereiten.

    Zitat

    Da Mojang die CraftBukkit Welt zerstört hat, gibt es Spigot leider nicht als offiziellen direkten Download.
    Wer die nächsten Schritte nicht schafft, muss Spigot an anderen Stellen herunterladen.


    • Hierzu legt man einen Ordner zum Bauen der aktuellsten Spigot Version an.
    • BuildTools.jar download in den erstellten Ordner.
    • Rechtsklick in den Ordner um dort "Git Bash" auszuführen.
      • Wenn "Git Bash" fehlt, einfach Git für Windows installieren.
      • Bei Mac-OS / Linux sollte das Terminal funktionieren, wenn nicht hilft Google.
    • Den Befehl "java -jar BuildTools.jar" in der Bash ausführen und warten bis dieser abschließt.


    Hat man die Schritte alle befolgt sollten diverse Ordner und die Datei "spigot-1.X.X.jar" enstanden sein.
    Diese Datei kopiert man als "spigot.jar" in den Ordner, von wo aus der Testserver laufen soll.


    Nun im Testserver Ordner eine Batch Datei erstellen. (unter Windows "start.bat", unter Mac-OS / Linux "start.sh")

    Zitat von start.bat / start.sh

    java -Xms1G -Xmx1G -XX:MaxPermSize=256M -jar spigot.jar
    exit


    Den Server zum ersten mal starten um alle Dateien, Ordner und Konfigurationsdateien zu generieren.
    Und anschließend in der Datei "spigot.yml" folgende Änderung vornehmen:

    • restart-script: ./start.bat

    Bzw.

    • restart-script: ./start.sh


    Hiermit wäre die Testumgebung eingerichtet.
    Plugins (*.jar) müssen einfach in den Ordner "plugins" geschoben werden. Diese werden dann automatisch beim nächsten Start geladen.



    4. Programmier-Umgebung
    Es gibt viele integrierte Entwicklungsumgebungen (IDE) für Java. Die bekannteste ist Eclipse.


    5. Java Projekt
    In der IDE nun ein Java-Projekt erstellen und diesem die Server Datei "spigot.jar" als Bibliothek hinzufügen.


    Bei Eclipse kann eine Bibliothek folgenderweise hinzugefügt werden: Projekt Eigenschaften -> Java Build Path -> Bibliotheken -> Add External Jar


    Ergebnis:
    [Blockierte Grafik: http://i.imgur.com/FJ0d6dt.png]


    6.Programmieren
    Endlich kann der eigentliche Spaß beginnen.
    Es ist hilfreich im Browser bereits die JavaDoc-Seite von Bukkit (Spigot) offen zu haben.


    Package erstellen:
    Java-Konventionen besagen, man sollte einen passenden Ordner Pfad für das Projekt wählen.
    D.h. wir erstellen im Ordner "src" (Source) ein "package" mit dem Namen "de.<nickname>.helloworld".


    Haupt Plugin Klasse erstellen:
    Bukkit definiert die Klasse JavaPlugin. Diese muss geerbt werden um der Einstiegspunkt für unser zu Plugin sein.
    Daher erstellen wir hier die Klasse HelloWorldPlugin in dem gerade erzeugten Packet und erweitern (extends) JavaPlugin


    Hauptmethoden der Plugin Klasse:
    Die folgenden Methoden können überschrieben werden und sind damit der eigentliche Startpunkt unseres Plugins.

    • onEnable() - Wird bei der Aktivierung des Plugins ausgeführt.
    • onDisable() - Wird bei der Deaktivierung ausgeführt.


    Plugin Beschreibung erstellen:
    Damit Spigot unser Plugin laden kann, benötigt es Informationen zu dem Plugin. Diese liest Spigot aus der Datei "plugin.yml" im obersten Pfad unseres Plugins.
    Wir erstellen also im Ordner "src" die einfache Datei "plugin.yml" und füllen diese mit folgendem:

    Zitat

    name: HelloWorldPlugin
    main: de.<nickname>.helloworld.HelloWorldPlugin
    version: 1.0.0
    author: <nickname>


    Mehr Infos zu der "plugin.yml" findet ihr hier.


    Damit wäre auch schon das kleinste Bukkit Plugin fertig.


    Das Plugin können nun als Jar exportieren.
    Dabei darauf achten, dass die Datei "plugin.yml" enthalten ist.


    Zum Testen die exportierte Plugin Datei (*.jar) in den Plugin Ordner des Testservers kopieren und diesen starten.
    In der Konsole sollte nun zu sehen sein, dass Spigot euer Plugin aktiviert hat.


    Das Plugin mit einem einfachem Event-Listener und Befehl habe ich in dieses BitBucket Repository geladen.



    Viel Spaß beim Programmieren.

    Okay, now what are you going to do?
    Your opponent is the strongest hard candy in the universe!

    6 Mal editiert, zuletzt von mickare () aus folgendem Grund: asdf

  • Hätte auch noch was für Leute die noch weiter machen wollen mit Java: *klick mich*


    Damit habe ich es gelernt bzw. lerne es grade noch. Sehr empfehlenswert für Einsteiger.

    MfG W0Sabi | Simon



    KEKSKÖNIG | MASKOTTCHEN VON KLAUUS232