Develop Lobby modules

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:

  1. Das Lobby Plugin
  2. Die neuste Version von Spigot oder einer anderen Serversoftware

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:

  1. Das Lobby Plugin
  2. Die neuste Version von Spigot oder einer anderen Serversoftware

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 die Zeile weglassen

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);
Parameter Beispiel Beschreibung
Befehl "/my command" Der auszuführende Befehl, falls das Item benutzt wird. Kann auch leer gelassen werden.
Item new Item(Material.DIAMOND) Ein Objekt der me.MineHome.Lobby.Item.Item-Klasse, welches in der Hotbar des Spielers angezeigt wird.
Sprach-Schlüssel "module.item" Ein Sprach-Schlüssel für den Namen des Items. Siehe hierzu den Abschnitt Übersetzung.
Farbe ChatColor.AQUA Die Farbe, in welcher der Name des Items erscheint. Kann wegelassen werden und ist standardmäßig GOLD.
Permission "module.permission" Eine Permission die benötigt wird um das Item zu erhalten. Kann wegelassen werden.

Ü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.

   
     
     
     
     
     

Ü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.

Helpful?

% of people found this helpful.