Minecraft Plugins Programmieren Tutorial 2 - Commands/Klassen (von WizzardDev)

Dieses Thema im Forum "Tutorials" wurde erstellt von McWizzardDev, 14. Oktober 2015.

  1. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Guten Tag Programmierer,

    jetzt werden wir uns mehr auf die Befehle konzentrieren und Klassen


    1. Was bringen mehrere Klassen
    - - - - - - - - - - - - - - - - - - - - - - - -

    Einige von euch denken sich jetzt bestimmt, warum brauchen wir mehrere Klassen, man kann doch alles in eine Klasse schreiben.

    Ja man kann alles in eine Klasse schreiben, aber wenn ihr mal ein größeres Plugin schreibt, wird der Code locker über 1000 Zeilen, dann wird
    es sehr unübersichtlich. Ich habe Anfangs auch nur in einer Klasse programmiert

    2. Grundlegendes zu den Klassen
    - - - - - - - - - - - - - - - - - - - - - - - - -

    - wenn ein public vor einer z.B ArrayList (kommt noch was das ist) steht, ist diese ArrayList für alle Klassen zugänglich

    - wenn ein private vor einer z.B ArrayList steht, kann man darauf nur von einer Klasse zugreifen

    - ArrayLists, ... speichert ihr am besten in der Main Klasse ab

    - Wenn ihr von einer anderen Klasse darauf zugreifen wollt, müsst ihr vor den normalen "code" eine festgelegte Variable bei mir plugin angeben

    Ihr werdet dies evtl. noch nicht verstehen, aber ich erkläre das noch besser ;)

    3. Ein externes Command erstellen
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    - Als erstes geht ihr wieder auf euer Package und erstellt eine neue Klasse, ich nenne diese Fly, da wir ein Gamemode Command erstellen (Wenn ihr nicht mehr wisst, wie dies geht new - Class)

    - Nun gehen wir nochmal kurz in die mainklasse, erst muss das Command registriert werden, dies geht so:

    Geht in die onEnable Klammer (also diese public void onEnable() {}

    Dort tragt ihr

    Code (Text):
    1. this.getCommand("gamemode").setExecutor(new Gamemode(this));
    ein, das bedeutet: this. (dieses Plugin) getCommand("gm")Welches Command setExecutor(this) (Dies ist ein CommandExecutor(this)

    - Jetzt kommen 2 Fehler Meldungen, auf diese Klickt ihr und führt sie aus, beide mal nehmt ihr die 2. Möglichkeit


    - Nun geht ihr in die Gamemode Klasse, und dort erstellt ihr einen construkter

    - Unter das public Gamemode(Main main) schreibt ihr noch in die geschweifte Klammer plugin = main; (Hier legen wir die Varable fest(plugin)

    - Klickt nun wieder auf die Fehlermeldung und wähle die 2. Möglichkeit

    - Es wird noch das Gamemode rot angestrichen, nehmt hier die 1. Möglichkeit, bei der Fehlermeldung

    Nun bestimmt eure Variablen für Sender(Sender ist der der das Command Sendet) (Command ist das Command was man eingibt) (String Label braucht man eig.net) (String[] hier nehmt am besten args)

    Nun sieht es so aus:
    Code (Text):
    1.  
    2. import org.bukkit.command.Command;
    3. import org.bukkit.command.CommandExecutor;
    4. import org.bukkit.command.CommandSender;
    5.  
    6. public class Gamemode implements CommandExecutor {
    7.  
    8.     private Main plugin;
    9.  
    10.     public Gamemode(Main main) {
    11.         plugin = main;
    12.     }
    13.  
    14.     @Override
    15.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    16.         return true;
    17.     }
    18.  
    19. }
    Jetzt können wir mit dem Command anfangen

    Erst definieren wir den Spieler

    Player p = (Player) sender; (Heißt der Spieler ist der Sender)


    Das Command wird /gm 1 und 0 sein

    als erstes machen wir /gm 1, dazu

    if(args[0].equalsignorecase("1") {
    } (if ist eine Abfrage, wenn etwas so ist, wenn etwas gemacht wird, wir das in in der geschweiften Klammer ausgeführt, wenn nicht können wir ein else senden) (args sind die Argumente, die er eingibt, also 1) ([0] Java fängt bei 0 an, dies ist das 0. Argument) (equalsignorecase ist das die Rechtschreibung ignoriert wird) ("1") ist das Command

    In die Klammer schreiben wir jetzt folgendes rein

    p.sendMessage("Du bist nun Gamemode 1"); (Wir senden dem Spieler eine Nachricht, am Ende ein Simikolion, dies zeigt, das die Aktion beendet ist)

    Jetzt ändern wir noch den gamemode

    p.setGameMode(GameMode.CREATIVE);

    So sehen jetzt die befehle aus:

    Code (Text):
    1. package de.wizzarddev.com;
    2.  
    3. import org.bukkit.GameMode;
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandExecutor;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8.  
    9. public class Gamemode implements CommandExecutor {
    10.  
    11.     private Main plugin;
    12.  
    13.     public Gamemode(Main main) {
    14.         plugin = main;
    15.     }
    16.  
    17.     @Override
    18.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    19.        
    20.         Player p = (Player) sender;
    21.        
    22.         if(args[0].equalsIgnoreCase("1")) {
    23.             p.sendMessage("§aDu bist nun Gamemode 1");
    24.             p.setGameMode(GameMode.CREATIVE);
    25.         }
    26.        
    27.        
    28.        
    29.         return true;
    30.     }
    31.  
    32. }


    Fertig ist der 1. Befehl, jetzt muss er nur noch in der plugin.yml eingetragen werden

    Wir gehen in die plugin.yml

    und tragen ein:

    commands:
    gamemode: (2 mal Leertaste, und das Command)
    description: gamemode (2 mal Leertaste, und dann die Beschreibung)



    Fertig, jetzt noch wie man das Plugin exportiert:

    - Macht rechtsklick auf das Plugin und wählt exportieren

    - Dann klickt auf Java und dann auf Jar File

    - Nun wählt ihr den Pfad aus

    Fertig, jetzt ladet das Plugin drauf ;)



    Noch ein Extra:

    Wie macht man, das der Gamemode Command für alle Spieler ausgeführt wird

    macht ausenrum, noch eine For-Schleife (es kommt noch eine Anleitung dafür)

    for(Player Players : Bukkit.getServer.getOnlinePlayers()) {

    Code, statt p - Players

    Code (Text):
    1. package de.wizzarddev.com;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.GameMode;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandExecutor;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9.  
    10. public class Gamemode implements CommandExecutor {
    11.  
    12.     private Main plugin;
    13.  
    14.     public Gamemode(Main main) {
    15.         plugin = main;
    16.     }
    17.  
    18.     @Override
    19.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    20.        
    21.         for(Player players : Bukkit.getServer().getOnlinePlayers()) {
    22.        
    23.        
    24.         if(args[0].equalsIgnoreCase("1")) {
    25.             players.sendMessage("§aDu bist nun Gamemode 1");
    26.             players.setGameMode(GameMode.CREATIVE);
    27.         }
    28.         }
    29.        
    30.        
    31.        
    32.         return true;
    33.     }
    34.  
    35. }
    36.  
    }


    Nächstes mal werden wir uns noch weiter Commands anschauen, mit einem Teleport Befehl



    Bis zum nächsten Tutorail -> WizzardDev


    Skype: fabianschobert



    Wenn ihr Wünsche habt, schickt sie mir ;)
     
    #1
    Äpfelchen gefällt das.
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Trivialität.

    Und zwar von welcher? Du bist sehr präzise, wirklich.

    Wieso das? Wer hat dir das denn erzählt?

    Bitte was?

    Hoffe ich - Denn ich verstehe es auch nicht.

    Man soll aussagekräftige Namen wählen. Du sagst selber du wählst "Fly" für ein GamemodeCommand? Bin ich der einzige der bei deinen Richtungswechseln Schwindelanfälle bekommt?

    Da solltest du noch einmal dran arbeiten.

    Was für Fehler denn? Ich kann mir kaum vorstellen, dass du Fehler machst.

    Kannst du dich wenigstens entscheiden, ob du Deutsch oder Englisch nutzt?

    Was ist das denn bitte für ein Bullshit? Command ist das, das man eingibt und label braucht man nicht? Natürlich.


    Ja so sieht es aus, leider.

    Und wenn es Konsole oder ein KommandoBlock waren?

    Ich ignoriere deine Rechtschreibung gleich auch.

    Ich fahre auch erst los und betätige dann die Zündung meines Autos.

    Das wird sicher immer klappen. Es kann ja keine Konsole sein, die Argumente angibt. Völlig abwegig.

    Na super.

    Wie ich Eclipse hasse.

    Gehört zu den Grundlagen von Java.

    Von Code conventions hast du noch nie etwas gehört oder?

    Oh jaaaa, biiitte![/QUOTE]
     
    #2
  3. MichiPlaysYT
    Offline

    MichiPlaysYT

    Registriert seit:
    7. September 2015
    Beiträge:
    58
    [/QUOTE]

    Ganz schön viel Kritik auf einmal, findest du nicht?? Lass ihn doch machen, wenn es ihn glücklich macht.
     
    #3
  4. Inkemann
    Offline

    Inkemann

    Registriert seit:
    3. Mai 2015
    Beiträge:
    341
    Ort:
    Aachen
    Minecraft:
    Inkemann
    Ziemlich viel Kritik? Ja. Aber der Beitrag besteht auch aus ziemlich viel Mist.
    Wenn man ihn einfach machen lässt, dann behält er seine (entschuldigt die Wortwahl) beschissenen Praktiken und Ideen bei und gibt sie sogar noch ungefiltert an andere weiter.
    Man lässt mich ja auch kein Spanisch unterrichten, ich kann nämlich kaum Spanisch.
     
    #4
  5. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    Minecraft:
    Eisphoenix
    Ich glaube die Kiddyprogrammierer werden sich sowieso nicht mal die mühe machen, da ist ein buntes YouTube-Video besser. Aber selbst dann, falls du schon ein Tutorial machen willst, dann lerne bitte erst mal selbst du Grundlagen von Java und Bukkit, das hilft viel zum verstehen was man da von den Youtubern abschreibt.
    Ich möchte dir damit den Spaß am Programmieren nicht nehmen, während du den anderen Leuten nicht was falsches Beibringst.

    Mit freundlichen Grüßen
    Lukas :)
     
    #5