+ Antworten
Seite 1 von 132 1 2 3 11 51 101 ... LetzteLetzte
Ergebnis 1 bis 10 von 1311
  1. #1
    legendarydreams.net Avatar von cat24max
    Registriert seit
    30.10.2011
    Beiträge
    1.079
    Minecraft
    cat24max

    [Tutorial] Bukkit Plugin Programmieren - GL, Befehle und Listener

    Hinweis: Ich bin seit längerer Zeit nicht mehr in diesem Forum aktiv, deshalb kann eine Antwort lange auf sich warten lassen. Am besten in Skype kontaktieren!

    Hallo und herzlich willkommen zu meinem Tutorial, wie man ein Bukkit Plugin programmiert!

    Wir beginnen gleich, allerdings setze ich gewisse Kenntnisse vorraus. Außerdem sollte gesagt sein dass ich keinsfall Profi bin und nicht bei allen Problemen Helfen kann. Wenn mir was einfällt werde ich später noch ein weiteres Tutorial hinzufügen. Aber nun los!


    1. Was braucht man?

    Man benötigt Software-Seitig eigentlich nicht viel. Des weiteren denke ich dass jeder von euch bereits Java installiert hat. Ihr benötigt dann noch das JDK (Java Development Kit) sowie eine Programmierumgebung, ich empfehle und benutze Eclipse, dass ihr hier downloaden könnt. Installieren und fertig!


    2. Java Resourcen
    Ihr benötigt die Bukkit API (Library) wo alle Funktionen und Möglichkeiten von Bukkit inbegriffen sind. Ihr müsst die Bibliothek installieren. Aktuelle Version immer hier zum Download. Ihr könnt auch Beta-Builds nehmen, aber diese sind natürlich nicht 100% Bug-Free!

    3. Projekt erstellen
    Können wir jetzt endlich anfangen? Ja! Dafür "Rechtsklick" im Projekt Explorer (normal rechts) und neues Projekt. Hier "Java Project" auswählen. Nun solltet ihr einen Namen vergeben können, einfach einen eingeben (hat nichts mit dem in Bukkit angezeigten zu tun) und erstellen. Jetzt machen wir Rechtsklick auf das Projekt und klicken auf "Properties". Nun links im Menü "Java Build Path" anwählen und den Tab "Library" auswählen. Hier klickt ihr dann auf "Add External JAR" und wählt die bei 2. heruntergeladene JAR-Datei aus. Abschließend OK drücken!

    Nun müssen wir uns eine Plugin-Beschreibung erstellen. Weiter zum nächsten Punkt!


    4. Plugin-Beschreibung erstellen
    Bukkit benötigt eine Datei, wo bestimmte Sachen wie Name, Version und Beschreibung, aber auch derv Speicherort der Hauptklasse gespeichert sind. Macht einen Rechtsklick auf den "src" Ordner in eurem Projekt und "New > File". Als Namen "plugin.yml" eingeben und bestätigen. Wenn sich jetzt ein externer Editor öffnet, diesen einfach schließen und die Datei in den Editor von Eclipse reinziehen (Externer geht auch, muss aber oft per F5 refresht werden). Hier sollte folgendes rein:

    Code:
    name: PluginName
    version: 1.0
    author: EuerName
    description: Irgendwas, ich finde es etwas sinnlos
    
    main: me.euername.pluginname.Hauptklasse
    Bei Name tragt ihr den Namen eures Plugins ein. Dieser kann mit "/plugins" eingesehen werden. Bei der Version wird die aktuelle Version eingetragen, die Beschreibung finde ich sinnlos und bei "author" gehört euer Name rein.

    Bei "main" müsst ihr den Namen eures Pakets angeben, dass in Schritt 5 erstellt wird, sowie mit "." getrennt den Namen der Hauptklasse (z. B.: me.cat24max.pluginname.PluginName, da ich oft meine Hauptklasse wie das Plugin nenne.

    5. Code-Packet und Hauptklasse erstellen
    Nun macht erneut Rechtsklick auf den "src" Ordner und wählt "New > Package" aus. Gebt den Namen nach folgendem Schema ein (wird in Schritt 4 benötigt): me.autorenname.pluginname
    Bei großen Projekten können auch mehrere Packete erstellt werden, dazu aber hier nichts.
    Nun bitte einen Rechtsklick auf das neu erstellte Paket und "New > Class". Als Namen einfach den Namen des Plugins wählen, dieser Name wird auch in Schritt 4 benötigt. Fertig!

    6. Startanweisungen für Bukkit (Grundlagen)
    Nun müssen wir Bukkit aber erstmal sagen, dass es ein Plugin ist und außerdem, die Befehle beim Start schreiben. Eure Hauptklasse sollte so aussehen:

    Code:
    package me.euername.pluginname;
    
    public class Hauptklassenname {
    
    }
    Das soll natürlich nicht so sein, deshalb schreibt/kopiert folgendes hinein:

    Code:
    package me.euername.pluginname;
    
    public class Hauptklassenname extends JavaPlugin {
    
    }
    Sehr wichtig: Bei euch stehen zwischen package und public class noch die Imports, hier nicht! Außerdem sind Tabs bei mir manchmal Leereichen, da vBulletin nicht will!

    Hinweis: Fehler ist nicht gleich Fehler. Erstmal die Maus draufhalten und lesen, meistens muss nur importiert werden. Wenn ihr nicht konmplett mit einer Zeile fertig seid, bitte erst fertigmachen, meistens ist dann die Fehlermeldung weg.

    Nun sagen wir Bukkit, was es tun soll wenn der Server startet bzw. stoppt.

    Code:
    package me.euername.pluginname;
    
    public class Hauptklassenname extends JavaPlugin {
    
    public void onEnable() {
    System.out.println("[PluginName] wurde geladen/aktiviert. Du hast Version 1.0");
    }
    
    public void onDisable() {
    System.out.println("[PluginName] wurde deaktiviert");
    }
    }
    Fertig ist das Grundgerüst.

    7. Exportieren
    Zum Exportieren Rechtsklick auf das Projekt und "Export" drücken. Wählt hier "jar-File" aus und Weiter. Jetzt noch .projekt und .classpath abwählen und unten den Speicherort wählen. Fertig stellen und Go! Wenn Errors kommen Code und Fehlermeldung posten!

    8. Listener
    Listener. Heißt auf Deutsch Höhrer. Stimmt auch fast, denn ein Listener registriert Events und kann somit Aktionen ausführen. In diesem Beispiel wird registriert, wenn ein Spieler beitritt. Ich werde mit //Notiz Notitzen im Code hinzufügen. Viel Spaß beim "Nachcoden":

    Code:
    package me.euername.pluginname;
    
    public class Hauptklassenname extends JavaPlugin {
    
    public void onEnable() {
    System.out.println("[PluginName] wurde geladen/aktiviert. Du hast Version 1.0");
    registerEvents();
    //Unten das private void wird ausgeführt
    }
    
    public void onDisable() {
    System.out.println("[PluginName] wurde deaktiviert");
    }
    
    private void registerEvents() {
    //Aktionen zum registieren von Events
    getServer().getPluginManager().registerEvents(this, this);
    }
    
    @Event Handler //bitte Eventhandler schreiben mit @ davor
    public void onPlayerJoin(PlayerJoinEvent event) {
    //event ist der Name des Events, onPlayerJoin kann gewählt werden
    Player player = event.getPlayer();
    //Herausfinden des "Schuldigen", der das Event ausgelöst hat, in diesem Fall der gejointe Spieler
    if (player.isOp) {
    event.setJoinMessage(ChatColor.YELLOW + "Der Admin " + player.getName() + " ist dem Spiel beigetreten.");
    player.sendMessage(ChatColor.GREEN + "Willkommen auf dem Server, du alter OP-Sack");
    } else {
    event.setJoinMessage(ChatColor.YELLOW + player.getName() + " ist dem Spiel beigetreten.");
    player.sendMessage("Willkommen");
    }
    }
    
    }

    9. Eigener Befehl
    Doch nun willst du ja auch noch einen Befehl haben, also man im Chat /Befehl eingibt und etwas passiert. In diesem Beispiel werden dem Spieler einfach ein paar Herzen abgezogen.

    Code zwischen dem public class:

    Code:
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
    {
    //Nun wird abgefragt ob der Absender ein Spieler oder die Konsole ist
    if (sender instanceof Player) {
    //Abfrage des Befehls
    if (cmd.getName().equalsIgnoreCase("emo") {
    //So jetzt wird der Sender als Player definiert
    Player player = (Player)sender;
    //Damage
    player.damage(4); //ergibt 2 Herzen wegen halbes Herz und so...
    Return true;
    }
    }
    return false;
    }
    Und in der Plugin.yml folgendes Hinzufügen:

    Code:
    commands:
      emo:
        description: Eine Beschreibung
        usage: /emo

    So dass war es, Fragen einfach fragen.

    Weiter Tutorials folgen, ich kann gerade nicht mehr tippen sonst wird mir schlecht!

    MfG cat24max


    Einfach mal auf "Thanks" drücken, vielen Dank!
    Geändert von cat24max (23.11.2012 um 22:24 Uhr)

  2. #2
    Gelöschter Benutzer
    Könnte man das jetzt so schon exportieren und in Plugins reinkopieren?

  3. #3
    legendarydreams.net Avatar von cat24max
    Registriert seit
    30.10.2011
    Beiträge
    1.079
    Minecraft
    cat24max
    Zitat Zitat von olf13579 Beitrag anzeigen
    Könnte man das jetzt so schon exportieren und in Plugins reinkopieren?
    Ups, Moment wird geschrieben!

    Edit: @olf13579 DONE
    Geändert von cat24max (14.03.2012 um 13:31 Uhr)

  4. #4
    Gelöschter Benutzer
    Danke

  5. #5
    *Like a Sir Club Gründer und stolzer Bronie* Avatar von Fluttershy
    Registriert seit
    09.11.2011
    Beiträge
    1.618
    Minecraft
    thewarwar
    kannst du noch ein paar Variablen noch schreiben?? Z.B.:
    wenn ein Spieler einen (bestimmten) Block zerstört/nutzt/setzt,
    Wenn ein spieler eine bestimmte höhe (in einer bestimmten welt) erreicht hat ....
    wie man spieler automatisch nach einem bestimmten "event" zu einer Ingame bestimmten stelle teleportieren lässt...

    PrimeTerra.de Survival Minecraft Survival Server | Skylands | Farmwelt
    Serverlisten eintrag - Minecraft-Server.eu eintrag
    PrimeTerra.de Minecraft Server - PrimeTerra Dynmap - PrimeTerra Forum
    Lun4.net URL Shortener - Lun4 Forum
    Mein Livestream Channel: Hitmare auf Twitch.tv








    [/center]

  6. #6
    Gelöschter Benutzer
    Also muss sagen tolles Ding funktioniert bei mir einwandfrei!
    Und @thewarwar das würde mich auch mal interessieren

  7. #7
    *Like a Sir Club Gründer und stolzer Bronie* Avatar von Fluttershy
    Registriert seit
    09.11.2011
    Beiträge
    1.618
    Minecraft
    thewarwar
    Zitat Zitat von olf13579 Beitrag anzeigen
    Also muss sagen tolles Ding funktioniert bei mir einwandfrei!
    Und @thewarwar das würde mich auch mal interessieren
    es wäre doch coll das wenn man z.b n schild mit bestimmten texten hat das die als teleporter und so funktionieren könnten (ja ich weis das gibt es schon. macht aber mehr spaß das selber zu machen )

    PrimeTerra.de Survival Minecraft Survival Server | Skylands | Farmwelt
    Serverlisten eintrag - Minecraft-Server.eu eintrag
    PrimeTerra.de Minecraft Server - PrimeTerra Dynmap - PrimeTerra Forum
    Lun4.net URL Shortener - Lun4 Forum
    Mein Livestream Channel: Hitmare auf Twitch.tv








    [/center]

  8. #8
    Gelöschter Benutzer
    @cat24max Wieso postest du das nicht hier da ist der Code auch richtig. Hab es mal korrigiert bis keine Fehler mehr in Eclipse angezeigt werden. Teste das Plugin gleich

    EDIT____Also es läd schon mal und keine Fehlermeldungen. Aber wenn ich joine passiert gar nix. So wie ich das lese soll ein Text kommen wenn man OP ist, andererseits kommt ein anderer text.
    Geändert von nairolf13579 (14.03.2012 um 14:12 Uhr)

  9. #9
    Architekt Avatar von Neui
    Registriert seit
    06.04.2011
    Beiträge
    1.158
    Minecraft
    Neui
    Ich könnte auch was erklären..

    Zitat Zitat von thewarwar Beitrag anzeigen
    kannst du noch ein paar Variablen noch schreiben?? Z.B.:
    wenn ein Spieler einen (bestimmten) Block zerstört/nutzt/setzt,
    Wenn ein spieler eine bestimmte höhe (in einer bestimmten welt) erreicht hat ....
    wie man spieler automatisch nach einem bestimmten "event" zu einer Ingame bestimmten stelle teleportieren lässt...
    Guck dich mal in http://jd.bukkit.org/apidocs/ um. Da kannst du Events finden.
    Block-Event: http://jd.bukkit.org/apidocs/org/buk...e-summary.html
    Spieler-Event: http://jd.bukkit.org/apidocs/org/buk...e-summary.html
    © -NEUI☺ Mein Youtube-Channel: CraftNeui Bukkit-Dev: Neuis, Bukkit: Neui, sysProfile
    Rechtschreibfehlern haftet meine Tastatur.
    ►►►Meine selbstgemachten Projekte: GlassSplitter, BackCraft, MC.Jar Backup, R/A Map 1 R/A Map 2◄◄◄

  10. #10
    legendarydreams.net Avatar von cat24max
    Registriert seit
    30.10.2011
    Beiträge
    1.079
    Minecraft
    cat24max
    Zitat Zitat von olf13579 Beitrag anzeigen
    @cat24max Wieso postest du das nicht hier da ist der Code auch richtig. Hab es mal korrigiert bis keine Fehler mehr in Eclipse angezeigt werden. Teste das Plugin gleich

    EDIT____Also es läd schon mal und keine Fehlermeldungen. Aber wenn ich joine passiert gar nix. So wie ich das lese soll ein Text kommen wenn man OP ist, andererseits kommt ein anderer text.
    UPS Sorry hab's oben korrigiert (bei registerEvents kein this davor


    Von meinem iPhone 4S via Tapatalk gesendet

+ Antworten