Zum Entwickeln von Lobby Modulen steht die praktische LobbyAPI zur Verfügung, mit der jeder Programmieren die eigenen Ideen umsetzen kann. Um mit dem Programmieren starten zu können, müssen 2 Dateien als Dependency hinzugefügt werden:
Grundgerüst
Nachdem die Programmierumgebung eingerichtet ist, kann begonnen werden, das Modul zu entwickeln. Dazu muss die entsprechende Klasse die Abstrakte Klasse Module (me.MineHome.Lobby.Module.Module) erweitern. Alternativ kannst Du auch den folgenden Code in Deine Klasse kopieren:
package me.MyName.Module; import org.bukkit.plugin.java.JavaPlugin; import me.MineHome.Lobby.Module.LobbyAPI; import me.MineHome.Lobby.Module.Module; public class Classname extends Module { @Override public void load() { JavaPlugin plugin = MineHome.getPlugin(); } }
module.yml
Jedes Modul benötigt eine module.yml-Datei welche im Hauptverzeichnis (src-Ordner) des Moduls liegt. Die Datei muss folgende Informationen enthalten:
name: Module # Der Name Deines Moduls main: me.MyName.Module.Classname # Die Hauptklasse version: 1.1.0 # Die aktuelle Version des Moduls author: Mine-Home # (Freiwillig) Der Author des Moduls website: www.mine-home.net/Module # (Freiwillig) Eine URL zum Modul description: Description of the module. # (Freiwillig) Eine Beschreibung des Moduls api-version: 1.13 # Die zu benutzende API-Version ab Version 1.13. Für vorherige Versionen freilassen.
Befehl hinzufügen
Das einfachste ist nun, einen Befehl hinzuzufügen:
LobbyAPI.registerCommand("myCommand", new MyCommand());
Durch diesen Befehl lässt sich der Befehl /lb myCommand definieren. Das 2. Argument ist eine Klasse, welches das Interface SubCommand implementiert.
class MyCommand implements SubCommand { @Override public boolean onCommand(CommandSender sender, String[] args) { //Your command action //Command successful return true; } @Override public String getPermission() { return "lb.myPermission"; } @Override public String console() { return false; } @Override public List getTabCompletions(CommandSender sender, String[] args, int argument) { // sender = Sender des Befehls // args = Bisherige Argumente // sender = Index des aktuellen Arguments (startend bei 1) } }
Events registrieren
Folgendermaßen lassen sich Events registrieren:
Bukkit.getPluginManager().registerEvents(new MyEventListener(), MineHome.getPlugin());
Item hinzufügen
Möchte man nun noch ein Item hinzufügen, welches diesen Befehl ausführt, geht das folgendermaßen:
Item item = new Item(Material.STONE); LobbyItem lobbyItem = new LobbyItem("/my command", item, "language.key", ChatColor.GOLD, "my.permission"); LobbyAPI.addItem(lobbyItem);
Zum Entwickeln von Lobby Modulen steht die praktische LobbyAPI zur Verfügung, mit der jeder Programmieren die eigenen Ideen umsetzen kann. Um mit dem Programmieren starten zu können, müssen 2 Dateien als Dependency hinzugefügt werden: GrundgerüstNachdem die Programmierumgebung eingerichtet ist, kann begonnen werden, das Modul zu entwickeln. Dazu muss die entsprechende Klasse die Abstrakte Klasse Module (me.MineHome.Lobby.Module.Module) erweitern. Alternativ kannst Du auch den folgenden Code in Deine Klasse kopieren: package me.MyName.Module; import org.bukkit.plugin.java.JavaPlugin; import me.MineHome.Lobby.Module.LobbyAPI; import me.MineHome.Lobby.Module.Module; public class Classname extends Module { @Override public void load() { JavaPlugin plugin = MineHome.getPlugin(); } } module.ymlJedes Modul benötigt eine module.yml-Datei welche im Hauptverzeichnis (src-Ordner) des Moduls liegt. Die Datei muss folgende Informationen enthalten: name: Module # Der Name Deines Moduls main: me.MyName.Module.Classname # Die Hauptklasse version: 1.1.0 # Die aktuelle Version des Moduls author: Mine-Home # (Freiwillig) Der Author des Moduls website: www.mine-home.net/Module # (Freiwillig) Eine URL zum Modul description: Description of the module. # (Freiwillig) Eine Beschreibung des Moduls api-version: 1.13 # Die zu benutzende API-Version ab Version 1.13. Für vorherige Versionen die Zeile weglassen Befehl hinzufügenDas einfachste ist nun, einen Befehl hinzuzufügen: LobbyAPI.registerCommand("myCommand", new MyCommand()); Durch diesen Befehl lässt sich der Befehl /lb myCommand definieren. Das 2. Argument ist eine Klasse, welches das Interface SubCommand implementiert. class MyCommand implements SubCommand { @Override public boolean onCommand(CommandSender sender, String[] args) { //Your command action //Command successful return true; } @Override public String getPermission() { return "lb.myPermission"; } @Override public String console() { return false; } @Override public List getTabCompletions(CommandSender sender, String[] args, int argument) { // sender = Sender des Befehls // args = Bisherige Argumente // sender = Index des aktuellen Arguments (startend bei 1) } } Events registrierenFolgendermaßen lassen sich Events registrieren: Bukkit.getPluginManager().registerEvents(new MyEventListener(), MineHome.getPlugin()); Item hinzufügenMöchte man nun noch ein Item hinzufügen, welches diesen Befehl ausführt, geht das folgendermaßen: Item item = new Item(Material.STONE); LobbyItem lobbyItem = new LobbyItem("/my command", item, "language.key", ChatColor.GOLD, "my.permission"); LobbyAPI.addItem(lobbyItem);
ÜbersetzungenEs ist möglich, Module in verschiedene Sprachen zu übersetzen. Dazu werden resource-Bundles benutzt. Man erstellt im Hauptverzeichnis (src-Ordner) einen neuen Ordner namens resources. Dort kann man nun verschiedene Dateien erstellen, die folgendermaßen aufgebaut sind: mod_languagekey.properties Die Datei für eine deutsche Übersetzung lautet zum Beispiel: mod_de_de.properties. Die Datei für eine englische Übersetzung, mod_en_us.properties, muss in jedem Fall gegeben sein. In diesen Dateien ist es nun möglich Übersetzungen hinzuzufügen: module.item=Itemname module.message=My message to the user Es ist möglich, neben den standardmäßigen Farbcodes (&6) Variablen zu benutzen. Diese werden automatisch ersetzt:
Der eigene Parameter kann später durch Variablen im Code dynamisch festgelegt werden. Nachrichten an Spieler senden// Die Nachricht wird als Erfolgsnachricht an den Spieler gesendet Message.success(player, "module.message"); // Die Nachricht wird als Informationsnachricht an den Spieler gesendet Message.info(player, "module.message"); // Die Nachricht wird als Fehlermeldung an den Spieler gesendet Message.error(player, "module.message"); // Mit Parameter Message.info(player, "module.message", key); Message.succes(player, "module.message", key, value); // Mehrzeilige Nachricht Mutliline ml = new Multiline(MessageType.SUCCESS); ml.add("module.hello"); ml.add("module.balance", amount); ml.send(player); Übersetzungen erhaltenMessages.msg(player, "module.message"); Messages.msg(player, "module.message", key); ConfigDas Lobby-Plugin verfügt über eine integrierte Config-API, um Entwicklern eine möglichst einfache Integration zu erlauben. Der erste Schritt ist hierbei, einen neuen Eintrag hinzuzufügen. Hierbei wird gleichzeitig überprüft, ob der Eintrag bereits exisiterit. Zusätzlich ist es möglich, einen Kommentar hinzuzufügen, um den Benutzern eine möglichst einfache Einrichtung zu erlauben. Config.check("key", "value", "Your comment"); Sonst können alle gewohnten Operationen ausgeführt werden. Zum Auslesen eines String kann man beispielsweise den folgenden Code verwenden: Config.getConfig().getString("key"); Nach Änderungen durch die set Methode, müssen Änderungen gespeichert werden. Es wird empfohlen, den Namen des Moduls vor den Key zu schreiben, um Konflikte zu vermeiden. Beispiel: enderpearl.delay statt delay. Config.getConfig().saveConfig(); Andere config DateienDie Lobby-API bietet Zugriff auf verschiedene Konfigurationsdateien. Zum Einen gibt es die data.yml, welche zum Speichern von Daten gedacht ist. Bei Bedarf erstellt das Plugin automatisch weitere Dateien. Config.getConfig("data").set("key", "value"); Config.getConfig("data").saveConfig(); // Custom config Config.getConfig("shop").set("key", 10); Config.getConfig("shop").getInt("key"); Config.getConfig("shop").saveConfig(); EinstellungenDas Lobby-Plugin bietet Spielern die Möglichkeit, Einstellungen an einem zentralen Ort zu treffen - dem Einstellungsmenü. Um dort eine eigene hinzuzufügen, gehe nach folgendem Beispiel vor. Setting s = new Setting(Boolean.class, "autonick", false, Arrays.asList(true, false), Material.NAME_TAG, "vh.hide"); Diese Einstellung fügt einen Wahr-Falsch-Wert hinzu, welcher eine Autonick-Funktion aktiviert oder deaktiviert. Als Datentyp wird hier ein Boolean angegeben. Der Sprachschlüssel ist "autonick". Hier müssen in in der Sprachdatei die Werte autonick.name und autonick.description hinzugefügt werden, welche den Namen und eine Beschreibung angeben. Der dritte Parameter des Konstruktors gibt den Standardwert an. Danach folgen alle möglichen Werte, welcher die Einstellung annehmen kann. Der 5. Parameter gibt das Item an, durch welches die Einstellung im Menü repräsentiert wird. Zum Schluss folgt eine Permission, welche Spielerne erlaubt, die Einstellung zu sehen und zu verändern. Sie kann auch leer gelassen werden. Es können neben Boolean Werten auch Datentypen wie String, Zahlen oder eigene serialisierbare Datentypen angegeben werden. Setting s = new Setting<>(String.class, "shieldtype", "shield.invisible", Arrays.asList("shield.invisible", "shield.push"), Material.EYE_OF_ENDER, "lb.shield.use"); Das Modul erstellenIst Dein Modul fertig programmiert, kannst Du es auf Deinem Server installieren oder anderen Benutzern zum Download anbieten. Um eine jar-Datei zu exportieren, kannst Du dafür genau so wie bei normalen Plugins vorgehen. In Eclipse geht dies folgendermaßen: Sofern es keine Fehler gibt, klicke mit der rechten Maustaste auf den Projektnamen und wähle Exportieren. Wähle im folgenden Dialogfeld JAR-Datei aus. Klicke auf Weiter. Ändere zuletzt das Exportziel in Deinen modules-Ordner. |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Übersetzungen
Es ist möglich, Module in verschiedene Sprachen zu übersetzen. Dazu werden resource-Bundles benutzt. Man erstellt im Hauptverzeichnis (src-Ordner) einen neuen Ordner namens resources. Dort kann man nun verschiedene Dateien erstellen, die folgendermaßen aufgebaut sind: mod_languagekey.properties
Die Datei für eine deutsche Übersetzung lautet zum Beispiel: mod_de_de.properties. Die Datei für eine englische Übersetzung, mod_en_us.properties, muss in jedem Fall gegeben sein. In diesen Dateien ist es nun möglich Übersetzungen hinzuzufügen:
module.item=Itemname module.message=My message to the user
Es ist möglich, neben den standardmäßigen Farbcodes (&6) Variablen zu benutzen. Diese werden automatisch ersetzt:
Variable | Erklärung | Benutzung | Angezeigt als |
---|---|---|---|
%h1 | Highlight-Farbe 1 | Ich möchte einen %h1Text hervorheben | Ich möchte einen Text hervorheben |
%h2 | Highligh-Farbe 2 | Ich möchte einen %h2anderen Text hervorheben | Ich möchte einen anderen Text hervorheben |
%r | Formattierung Zurücksetzen | Ich möchte einen %h1Text hervorheben%r und danach normal weiterschreiben. | Ich möchte einen Text hervorheben und danach normal weiterschreiben. |
%p1%, %p2%, ... | Eigener Parameter | Der Spieler %h1%p1%%r hat das Spiel gewonnen. | Der Spieler MineHome hat das Spiel gewonnen. |
Der eigene Parameter kann später durch Variablen im Code dynamisch festgelegt werden.
Nachrichten an Spieler senden
// Die Nachricht wird als Erfolgsnachricht an den Spieler gesendet Message.success(player, "module.message"); // Die Nachricht wird als Informationsnachricht an den Spieler gesendet Message.info(player, "module.message"); // Die Nachricht wird als Fehlermeldung an den Spieler gesendet Message.error(player, "module.message"); // Mit Parameter Message.info(player, "module.message", key); Message.succes(player, "module.message", key, value); // Mehrzeilige Nachricht Mutliline ml = new Multiline(MessageType.SUCCESS); ml.add("module.hello"); ml.add("module.balance", amount); ml.send(player);
Übersetzungen erhalten
Messages.msg(player, "module.message"); Messages.msg(player, "module.message", key);
Config
Das Lobby-Plugin verfügt über eine integrierte Config-API, um Entwicklern eine möglichst einfache Integration zu erlauben.
Der erste Schritt ist hierbei, einen neuen Eintrag hinzuzufügen. Hierbei wird gleichzeitig überprüft, ob der Eintrag bereits exisiterit. Zusätzlich ist es möglich, einen Kommentar hinzuzufügen, um den Benutzern eine möglichst einfache Einrichtung zu erlauben.
Config.check("key", "value", "Your comment");
Sonst können alle gewohnten Operationen ausgeführt werden. Zum Auslesen eines String kann man beispielsweise den folgenden Code verwenden:
Config.getConfig().getString("key");
Nach Änderungen durch die set Methode, müssen Änderungen gespeichert werden. Es wird empfohlen, den Namen des Moduls vor den Key zu schreiben, um Konflikte zu vermeiden. Beispiel: enderpearl.delay statt delay.
Config.getConfig().saveConfig();
Andere config Dateien
Die Lobby-API bietet Zugriff auf verschiedene Konfigurationsdateien. Zum Einen gibt es die data.yml, welche zum Speichern von Daten gedacht ist. Bei Bedarf erstellt das Plugin automatisch weitere Dateien.
Config.getConfig("data").set("key", "value"); Config.getConfig("data").saveConfig(); // Custom config Config.getConfig("shop").set("key", 10); Config.getConfig("shop").getInt("key"); Config.getConfig("shop").saveConfig();
Einstellungen
Das Lobby-Plugin bietet Spielern die Möglichkeit, Einstellungen an einem zentralen Ort zu treffen - dem Einstellungsmenü. Um dort eine eigene hinzuzufügen, gehe nach folgendem Beispiel vor.
Setting s = new Setting(Boolean.class, "autonick", false, Arrays.asList(true, false), Material.NAME_TAG, "vh.hide");
Diese Einstellung fügt einen Wahr-Falsch-Wert hinzu, welcher eine Autonick-Funktion aktiviert oder deaktiviert. Als Datentyp wird hier ein Boolean angegeben. Der Sprachschlüssel ist "autonick". Hier müssen in in der Sprachdatei die Werte autonick.name und autonick.description hinzugefügt werden, welche den Namen und eine Beschreibung angeben. Der dritte Parameter des Konstruktors gibt den Standardwert an. Danach folgen alle möglichen Werte, welcher die Einstellung annehmen kann. Der 5. Parameter gibt das Item an, durch welches die Einstellung im Menü repräsentiert wird. Zum Schluss folgt eine Permission, welche Spielerne erlaubt, die Einstellung zu sehen und zu verändern. Sie kann auch leer gelassen werden.
Es können neben Boolean Werten auch Datentypen wie String, Zahlen oder eigene serialisierbare Datentypen angegeben werden.
Setting s = new Setting<>(String.class, "shieldtype", "shield.invisible", Arrays.asList("shield.invisible", "shield.push"), Material.EYE_OF_ENDER, "lb.shield.use");
Das Modul erstellen
Ist Dein Modul fertig programmiert, kannst Du es auf Deinem Server installieren oder anderen Benutzern zum Download anbieten. Um eine jar-Datei zu exportieren, kannst Du dafür genau so wie bei normalen Plugins vorgehen. In Eclipse geht dies folgendermaßen:
Sofern es keine Fehler gibt, klicke mit der rechten Maustaste auf den Projektnamen und wähle Exportieren. Wähle im folgenden Dialogfeld JAR-Datei aus. Klicke auf Weiter. Ändere zuletzt das Exportziel in Deinen modules-Ordner.