[Tutorial] Minecraft Bukkit Plug-Ins erstellen [003] - Weiter geht's!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Tutorial] Minecraft Bukkit Plug-Ins erstellen [003] - Weiter geht's!

    [Blockierte Grafik: http://i1200.photobucket.com/albums/bb334/MelozZ/javascriptenheader.png]


    Hallo easy-scripting.net


    Da mein allererstes Tutorial sowohl unübersichtlich als auch schlecht erklärt war wiederhole ich den Stoff erneut. So können es alle verstehen. Wichtig ist, dass man sich ein wenig mit der Sprache Java auseinander gesetzt haben sollte, da meine Tutorial ansonsten nicht oder nur sehr wenig erzwecken.

    Wir werden das neue Grundgerüst erstmal auseinander nehmen, sodass man es verstehen kann.
    Hier findest du das Grundgerüst

    Java-Quellcode

    1. package me.Re3pEr.Tutorial;
    2. import org.bukkit.ChatColor;
    3. import org.bukkit.command.Command;
    4. import org.bukkit.command.CommandSender;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.plugin.java.JavaPlugin;
    7. public class Tutorial extends JavaPlugin {
    8. @Override
    9. public void onDisable() {
    10. System.out.println("[Tutorial] Plugin deaktiviert!");
    11. }
    12. @Override
    13. public void onEnable() {
    14. System.out.println("[Tutorial] Plugin by Re3pEr!");
    15. System.out.println("[Tutorial] Plugin aktiviert!");
    16. }
    17. public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
    18. if(sender instanceof Player) {
    19. Player p = (Player)sender;
    20. } else {
    21. }
    22. return false;
    23. }
    24. }
    Alles anzeigen


    Also nehmen wir dies auseinander:

    Java-Quellcode

    1. package me.Re3pEr.Tutorial;

    Dies bedeutet, dass diese Datei im Package "Re3pEr.Tutorial" ist. Wie man ein Package erstellt usw. lernst du im ersten Tutorial.

    Java-Quellcode

    1. import .....

    Dies sollte klar sein. Es wird die Datei XYZ bzw. ihr Inhalt importiert, sodass man die Funktionen verwenden kann.

    Java-Quellcode

    1. public class Tutorial extends JavaPlugin { .... }

    Dies bezeichnet einfach den Hauptteil des Plugins. In dieses Public kommen alle anderen Publics und alle Funktionen des Plugins herrein.

    Java-Quellcode

    1. public void onDisable() / onEnable()

    Dieses public wirkt in dem Augenblick indem das Plugin aktiviert oder deaktiviert wird.

    Java-Quellcode

    1. public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){ ... }

    So. Wir haben bereits die Public-Art "void" und "class" benutzt. Nun benutzen wir "boolean".
    Das Besondere an "boolean" ist, dass es immer return werden muss. Dies ist für Befehle gut geeignet, da eigentlich immer eine Rückmeldung erscheinen soll.

    Java-Quellcode

    1. if(sender instanceof Player) {
    2. Player p = (Player)sender;
    3. } else {
    4. }

    So:
    • if: "If" ist englisch und bedeutet "wenn, falls".
    • sender: "sender" steht für den CommandSender bzw. für die Person/den Spieler der das Kommando gesendet hat.
    • instanceof: Fragt ab ob 1 eine Instanz von 2 ist.
    • player: Bezeichnet den Spieler
    Also lasst und diesen Block mal auf Deutsch übersetzen:

    Wenn der Sender des Kommandos eine Instanz des Spielers ist dann{
    ...
    } ansonsten {
    ...
    }

    Dies verwenden wir dafür, dass der Befehl nur durch den Spieler ausgelöst werden kann. Dies ist aber nicht zwingend notwendig.

    Java-Quellcode

    1. return false;

    Dies bedeutet, dass er "falsch" return bzw. zurückgibt.

    Da das Grundgerüst nun erklärt und ggf. verstanden sein sollte lernen wir nun etwas neues:

    • Kommandos mit Argumenten:
    Wir machen einen Grundkommando, aber teilen ihn durch Argumente auf. Sodass z.B. "/tut hallo" etwas anderes bewirkt als "/tut tschues". Aber wir erstellen erstmal einen Kommando:

    Java-Quellcode

    1. if(cmd.getName().equalsIgnoreCase("tut")) {
    2. }

    Das ist der Grundlegende Kommando. Aber wie sagen wir ihm was er machen soll bei welchem Argument? ganz einfach! Mit einer "If"-Abfrage!
    Am ansehnlichsten ist es doch, dass wenn man nur "/tut" eingibt eine Übersicht über die verschiedenen Aufteilungen erscheint, oder?

    Java-Quellcode

    1. if(cmd.getName().equalsIgnoreCase("tut")) {
    2. if(args.length == 0) {
    3. }
    4. }

    Nungut. Jetzt senden wir dem Spieler Nachrichten!:

    Java-Quellcode

    1. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'") ;

    Dies sähe dann so aus:

    [Tutorial] Explorer des Befehles /tut

    Da wir noch keine Unterteilung haben ist es sinnlos jetzt schon mehr an den Spieler zu senden. Also machen wir einen einfachen Heilungsbefehl. Dieser soll heißen "/tut heilung".
    Legen wir los:

    Die Grundstruktur ist selbsterklärend und sieht so aus:

    Java-Quellcode

    1. } else if(args.length == 1 && args[0].equalsIgnoreCase("heilung")) {
    2. }

    Die erste geschweifte Klammer ist die letzte von unserer ersten Argument Abfrage. Also sieht das Befehl bisher so aus:

    Java-Quellcode

    1. if(cmd.getName().equalsIgnoreCase("tut")) {
    2. if(args.length == 0) {
    3. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'") ;
    4. } else if(args.length == 1 && args[0].equalsIgnoreCase("heilung")) {
    5. }
    6. }


    Gut. Aber wie heilt man einen Spieler? Das ist sehr simpel. Wir heilen und sättigen ihn mit "SetHealth" und "SetFoodLevel".

    Java-Quellcode

    1. p.setHealth(20) ;
    2. p.setFoodLevel(20) ;

    Da man bei Minecraft 10 Herzen hat und jedes 2 Hälften besitzt setzt man das Leben auf "20" sprich auf das volle Leben. Das gleiche gilt auch beim "FoodLevel" sprich beim Hunger.

    Jetzt können wir den Befehl auch im Explorer eintragen:

    Java-Quellcode

    1. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Heilung" + ChatColor.WHITE + " - Heilt den Spieler") ;

    Jetzt können wir den Spieler mit unserem Plug-In schon heilen. Faszinierend, nicht wahr?
    Aber das ist doch Langweilig. Wie wäre es denn mit Rüstung und Schwert?

    Also heißt es: Neues Argument!

    Java-Quellcode

    1. } else if(args.length == 1 && args[0].equalsIgnoreCase("ruestung")) {
    2. }


    Aber wie wäre es wenn man zwischen den verschiedenen Rüstungen wählen kann? Also machen wir für das Argument Argumente. Aber da es mehrere Argumente gibt machen wir der ÜBersichtlichkeit wegen noch einen Explorer

    Java-Quellcode

    1. } else if(args.length == 1 && args[0].equalsIgnoreCase("ruestung")) {
    2. if(args.length == 0) {
    3. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Ruestung") ;
    4. }

    So. Da es nun einen Explorer gibt trennen wir den Befehl in die Argumente "Leder", "Eisen", "Gold" und "Diamant" und "Ketten" ab

    Java-Quellcode

    1. } else if(args.length == 1 && args[0].equalsIgnoreCase("ruestung")) {
    2. if(args.length == 1) {
    3. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Ruestung") ;
    4. } else if (args.length == 2 && args[1].equalsIgnoreCase("Leder") ) {
    5. } else if (args.length == 2 && args[1].equalsIgnoreCase("Eisen") ) {
    6. } else if (args.length == 2 && args[1].equalsIgnoreCase("Gold") ) {
    7. } else if (args.length == 2 && args[1].equalsIgnoreCase("Diamant") ) {
    8. } else if (args.length == 2 && args[1].equalsIgnoreCase("Ketten")) {
    9. } else {
    10. return false;
    11. }
    Alles anzeigen

    Nungut. Wie zieht man eine Rüstung an? Ganz einfach:

    Java-Quellcode

    1. p.getInventory().setHelmet(new ItemStack(302)) ;
    2. p.getInventory().setChestplate(new ItemStack(303)) ;
    3. p.getInventory().setLeggings(new ItemStack(304)) ;
    4. p.getInventory().setBoots(new ItemStack(305)) ;

    Dies wenden wir nun mit den entsprechenden ID's an. Außerdem tragen wir dann alles noch in die Explorer ein

    Das sieht nun so aus:

    So sieht der Befehl /tut jetzt aus!

    Java-Quellcode

    1. if(cmd.getName().equalsIgnoreCase("tut")) {
    2. if(args.length == 0) {
    3. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'") ;
    4. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Heilung" + ChatColor.WHITE + " - Heilt den Spieler") ;
    5. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Ruestung" + ChatColor.WHITE + " - Legt dem Spieler eine Ruestung an") ;
    6. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Schwert" + ChatColor.WHITE + " - Gibt dem Spieler ein Schwert") ;
    7. } else if(args.length == 1 && args[0].equalsIgnoreCase("heilung")) {
    8. p.setHealth(20) ;
    9. p.setFoodLevel(20) ;
    10. } else if(args.length == 1 && args[0].equalsIgnoreCase("ruestung")) {
    11. if(args.length == 1) {
    12. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Ruestung") ;
    13. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Leder" + ChatColor.WHITE + " - Gibt eine Lederruestung") ;
    14. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Eisen" + ChatColor.WHITE + " - Gibt eine Eisenruestung") ;
    15. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Gold" + ChatColor.WHITE + " - Gibt eine Goldruestung") ;
    16. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Diamant" + ChatColor.WHITE + " - Gibt eine Diamantruestung") ;
    17. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Ketten" + ChatColor.WHITE + " - Gibt eine Kettenruestung") ;
    18. } else if (args.length == 2 && args[1].equalsIgnoreCase("Leder") ) {
    19. p.getInventory().setHelmet(new ItemStack(298)) ;
    20. p.getInventory().setChestplate(new ItemStack(299)) ;
    21. p.getInventory().setLeggings(new ItemStack(300)) ;
    22. p.getInventory().setBoots(new ItemStack(301)) ;
    23. } else if (args.length == 2 && args[1].equalsIgnoreCase("Eisen") ) {
    24. p.getInventory().setHelmet(new ItemStack(306)) ;
    25. p.getInventory().setChestplate(new ItemStack(307)) ;
    26. p.getInventory().setLeggings(new ItemStack(308)) ;
    27. p.getInventory().setBoots(new ItemStack(309)) ;
    28. } else if (args.length == 2 && args[1].equalsIgnoreCase("Gold") ) {
    29. p.getInventory().setHelmet(new ItemStack(314)) ;
    30. p.getInventory().setChestplate(new ItemStack(315)) ;
    31. p.getInventory().setLeggings(new ItemStack(316)) ;
    32. p.getInventory().setBoots(new ItemStack(317)) ;
    33. } else if (args.length == 2 && args[1].equalsIgnoreCase("Diamant") ) {
    34. p.getInventory().setHelmet(new ItemStack(310)) ;
    35. p.getInventory().setChestplate(new ItemStack(311)) ;
    36. p.getInventory().setLeggings(new ItemStack(312)) ;
    37. p.getInventory().setBoots(new ItemStack(313)) ;
    38. } else if (args.length == 2 && args[1].equalsIgnoreCase("Ketten")) {
    39. p.getInventory().setHelmet(new ItemStack(298)) ;
    40. p.getInventory().setChestplate(new ItemStack(299)) ;
    41. p.getInventory().setLeggings(new ItemStack(300)) ;
    42. p.getInventory().setBoots(new ItemStack(301)) ;
    43. } else {
    44. return false;
    45. }
    46. }
    47. }
    Alles anzeigen



    Wollten wir jetzt nicht zum Schwert kommen?

    Java-Quellcode

    1. } else if (args.length == 1 && args[0].equalsIgnoreCase("schwert")) {
    2. }


    Da können wir ja eigentlich auch eine Unterteilung machen. Am einfachsten ist es wenn wir die Unterteilung der Ruestung kopieren:

    Java-Quellcode

    1. } else if (args.length == 1 && args[0].equalsIgnoreCase("schwert")) {
    2. if(args.length == 1) {
    3. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Schwert") ;
    4. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Holz" + ChatColor.WHITE + " - Gibt ein Holzschwert") ;
    5. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Stein" + ChatColor.WHITE + " - Gibt ein Steinschwert") ;
    6. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Eisen" + ChatColor.WHITE + " - Gibt ein Eisenschwert") ;
    7. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Gold" + ChatColor.WHITE + " - Gibt ein Goldschwert") ;
    8. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Diamant" + ChatColor.WHITE + " - Gibt ein Diamantschwert") ;
    9. } else if (args.length == 2 && args[1].equalsIgnoreCase("Holz") ) {
    10. p.getInventory().addItem(new ItemStack(268)) ;
    11. } else if (args.length == 2 && args[1].equalsIgnoreCase("Eisen") ) {
    12. p.getInventory().addItem(new ItemStack(267)) ;
    13. } else if (args.length == 2 && args[1].equalsIgnoreCase("Gold") ) {
    14. p.getInventory().addItem(new ItemStack(283)) ;
    15. } else if (args.length == 2 && args[1].equalsIgnoreCase("Diamant") ) {
    16. p.getInventory().addItem(new ItemStack(276)) ;
    17. } else if (args.length == 2 && args[1].equalsIgnoreCase("Stein")) {
    18. p.getInventory().addItem(new ItemStack(272)) ;
    19. } else {
    20. return false;
    21. }
    22. }
    Alles anzeigen


    Ich habe dort schon alles in den Schwerteigenen Explorer eingetragen, sodass ihr euch die Arbeit ersparen könnt. Gut! Wir haben heute viel geschafft, nicht wahr? Ich würde sagen, dass dies für heute reicht. Bei Fragen könnt ihr hier gerne eine Antwort posten. Ich hoffe das Tutorial hat euch gefallen und euch nützt es etwas.

    PS: Die "plugin.yml" konfigurieren wir im nächsten Tutorial


    Re3pEr


    So sieht unser Plug-In nun aus

    Java-Quellcode

    1. package me.Re3pEr.Tutorial;
    2. import org.bukkit.ChatColor;
    3. import org.bukkit.command.Command;
    4. import org.bukkit.command.CommandSender;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.inventory.ItemStack;
    7. import org.bukkit.plugin.java.JavaPlugin;
    8. public class Tutorial extends JavaPlugin {
    9. @Override
    10. public void onDisable() {
    11. System.out.println("[Tutorial] Plugin deaktiviert!");
    12. }
    13. @Override
    14. public void onEnable() {
    15. System.out.println("[Tutorial] Plugin by Re3pEr!");
    16. System.out.println("[Tutorial] Plugin aktiviert!");
    17. }
    18. public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
    19. if(sender instanceof Player) {
    20. Player p = (Player)sender;
    21. if(cmd.getName().equalsIgnoreCase("tut")) {
    22. if(args.length == 0) {
    23. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'") ;
    24. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Heilung" + ChatColor.WHITE + " - Heilt den Spieler") ;
    25. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Ruestung" + ChatColor.WHITE + " - Legt dem Spieler eine Ruestung an") ;
    26. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Schwert" + ChatColor.WHITE + " - Gibt dem Spieler ein Schwert") ;
    27. } else if(args.length == 1 && args[0].equalsIgnoreCase("heilung")) {
    28. p.setHealth(20) ;
    29. p.setFoodLevel(20) ;
    30. } else if(args.length == 1 && args[0].equalsIgnoreCase("ruestung")) {
    31. if(args.length == 1) {
    32. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Ruestung") ;
    33. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Leder" + ChatColor.WHITE + " - Gibt eine Lederruestung") ;
    34. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Eisen" + ChatColor.WHITE + " - Gibt eine Eisenruestung") ;
    35. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Gold" + ChatColor.WHITE + " - Gibt eine Goldruestung") ;
    36. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Diamant" + ChatColor.WHITE + " - Gibt eine Diamantruestung") ;
    37. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Ketten" + ChatColor.WHITE + " - Gibt eine Kettenruestung") ;
    38. } else if (args.length == 2 && args[1].equalsIgnoreCase("Leder") ) {
    39. p.getInventory().setHelmet(new ItemStack(298)) ;
    40. p.getInventory().setChestplate(new ItemStack(299)) ;
    41. p.getInventory().setLeggings(new ItemStack(300)) ;
    42. p.getInventory().setBoots(new ItemStack(301)) ;
    43. } else if (args.length == 2 && args[1].equalsIgnoreCase("Eisen") ) {
    44. p.getInventory().setHelmet(new ItemStack(306)) ;
    45. p.getInventory().setChestplate(new ItemStack(307)) ;
    46. p.getInventory().setLeggings(new ItemStack(308)) ;
    47. p.getInventory().setBoots(new ItemStack(309)) ;
    48. } else if (args.length == 2 && args[1].equalsIgnoreCase("Gold") ) {
    49. p.getInventory().setHelmet(new ItemStack(314)) ;
    50. p.getInventory().setChestplate(new ItemStack(315)) ;
    51. p.getInventory().setLeggings(new ItemStack(316)) ;
    52. p.getInventory().setBoots(new ItemStack(317)) ;
    53. } else if (args.length == 2 && args[1].equalsIgnoreCase("Diamant") ) {
    54. p.getInventory().setHelmet(new ItemStack(310)) ;
    55. p.getInventory().setChestplate(new ItemStack(311)) ;
    56. p.getInventory().setLeggings(new ItemStack(312)) ;
    57. p.getInventory().setBoots(new ItemStack(313)) ;
    58. } else if (args.length == 2 && args[1].equalsIgnoreCase("Ketten")) {
    59. p.getInventory().setHelmet(new ItemStack(298)) ;
    60. p.getInventory().setChestplate(new ItemStack(299)) ;
    61. p.getInventory().setLeggings(new ItemStack(300)) ;
    62. p.getInventory().setBoots(new ItemStack(301)) ;
    63. } else {
    64. return false;
    65. }
    66. } else if (args.length == 1 && args[0].equalsIgnoreCase("schwert")) {
    67. if(args.length == 1) {
    68. p.sendMessage("[" + ChatColor.GREEN + "Tutorial" + ChatColor.WHITE + "] Explorer des Befehles" + ChatColor.YELLOW + "'/tut'" + ChatColor.WHITE + " " + ChatColor.YELLOW + "Schwert") ;
    69. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Holz" + ChatColor.WHITE + " - Gibt ein Holzschwert") ;
    70. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Stein" + ChatColor.WHITE + " - Gibt ein Steinschwert") ;
    71. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Eisen" + ChatColor.WHITE + " - Gibt ein Eisenschwert") ;
    72. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Gold" + ChatColor.WHITE + " - Gibt ein Goldschwert") ;
    73. p.sendMessage(ChatColor.GREEN + "•" + ChatColor.YELLOW + "Diamant" + ChatColor.WHITE + " - Gibt ein Diamantschwert") ;
    74. } else if (args.length == 2 && args[1].equalsIgnoreCase("Holz") ) {
    75. p.getInventory().addItem(new ItemStack(268)) ;
    76. } else if (args.length == 2 && args[1].equalsIgnoreCase("Eisen") ) {
    77. p.getInventory().addItem(new ItemStack(267)) ;
    78. } else if (args.length == 2 && args[1].equalsIgnoreCase("Gold") ) {
    79. p.getInventory().addItem(new ItemStack(283)) ;
    80. } else if (args.length == 2 && args[1].equalsIgnoreCase("Diamant") ) {
    81. p.getInventory().addItem(new ItemStack(276)) ;
    82. } else if (args.length == 2 && args[1].equalsIgnoreCase("Stein")) {
    83. p.getInventory().addItem(new ItemStack(272)) ;
    84. } else {
    85. return false;
    86. }
    87. }
    88. }
    89. } else {
    90. }
    91. return false;
    92. }
    93. }
    Alles anzeigen


    Drasko@easy-scripting.net since 31.12.2011
    [Blockierte Grafik: http://files.tzdev.de/banner.png]