bukkit
Befehle
Suche…
Syntax
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
Einen Befehl bearbeiten
Um einen Befehl handhaben zu können, benötigen Sie eine Klasse, die die CommandExecutor-Schnittstelle implementiert. Die JavaPlugin-Klasse (die Hauptklasse Ihres Plugins) implementiert dies bereits.
Bei der Implementierung der CommandExecutor-Schnittstelle muss die folgende Methode implementiert werden:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true; ///Should return false if you want to show the usage
}
Absender ist derjenige, der den Befehl gesendet hat. Es kann ein Spieler oder die Konsole sein.
CMD ist der Befehl, den Sie hören, wie in plugin.yml angegeben. Nicht mit dem Etikett verwechseln.
label ist der Alias, mit dem dieser Befehl ausgeführt wird. Dies ist, was der Absender nach dem Schrägstrich eingibt.
und schließlich sind Argumente die Argumente, die der Sender möglicherweise verwendet hat, um Ihren Befehl zu senden.
Ein möglicher Befehl könnte als gehen
/ sag Kerooker Hallo, Kerooker!
Tell wäre Ihr Label und kann auch als Ihr Befehl definiert werden, wenn Sie dies in plugin.yml sagen;
"Kerooker", "Hi", "Kerooker!" sind Ihre Argumente 0, 1 bzw. 2
Als Gegenleistung möchten Sie wahrscheinlich immer wahr zurückkehren, wenn Sie erwartet haben, dass alles auf diese Weise geschieht. Sie sollten false zurückgeben, wenn Sie dem Absender die in Ihrer plugin.yml definierte Befehlsverwendung anzeigen möchten
Ein einfacher GameMode-Befehl (/ gm )
Dieses Beispiel zeigt ein sehr einfaches Beispiel für die Verwendung von onCommand. Ich schlage nicht vor, Ihre Befehle direkt in onCommand zu bearbeiten, aber das ist der Trick für diesen einfachen Fall.
In diesem Beispiel versuchen wir, den Spielemodus des Spielers festzulegen.
Als erstes müssen wir sicherstellen, dass der Sender kein ConsoleCommandSender ist, da der Spielemodus einer Konsole nicht festgelegt werden kann. Dies geschieht mit (Senderinstanz des Players).
Als Nächstes möchten wir, dass der Spieler / gm CREATIVE (oder was auch immer der andere Spielmodus ist) eingibt, sodass wir zwei Dinge prüfen müssen:
- Stellen Sie sicher, dass sie 1 Argument übergeben (CREATIVE)
- stellen Sie sicher, dass ihr Befehl "gm" war
Wir haben diese Überprüfungen mit: args.length == 1 && label.equalsIgnoreCase ("gm") durchgeführt.
Jetzt wissen wir mit Sicherheit, dass der Spieler "/ gm x" eingegeben hat.
Als nächstes müssen wir args [0] in ein GameMode-Objekt verwandeln, damit wir es auf den Spieler anwenden können. Dies kann mit GameMode.valueOf (String) erfolgen. Gemäß der Java-Enumeration-Dokumentation wird jedoch, wenn eine Zeichenfolge in valueOf () übergeben wird, die nicht mit einer Enumeration übereinstimmt, eine IllegalArgumentException ausgelöst Fang das.
Sobald wir den Gamemode haben, können wir einfach p.setGameMode (gm) verwenden und der Gamemode des Spielers wird sich ändern. Für den Fall, dass wir eine Ausnahme festgestellt haben, drucken wir einfach eine Anweisung aus und geben false zurück.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
final Player p = (Player) sender;
if (args.length == 1 && label.equalsIgnoreCase("gm")) {
try {
GameMode gm = GameMode.valueOf(args[0]);
p.setGameMode(gm);
p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
return true;
} catch (IllegalArgumentException e) {
p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
return false;
}
}
}
return false;
}
Befehl nicht in der Hauptklasse
Wenn Sie viele Befehle haben, sollten Sie sie nicht alle in die Hauptklasse aufnehmen.
CommandExecutor
Sie eine neue Klasse und lassen SieCommandExecutor
implementierenFügen Sie der Klasse Folgendes hinzu:
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { }
Fügen Sie in Ihrer Hauptklasse in onEnable hinzu (ersetzen Sie commandName durch den Namen des Befehls und CommandExecutor durch den Namen der Klasse):
getCommand("commandName").setExecutor(new CommandExecutor());