Plugin Command mit einem benutzerdefinierten String? Spigot 1.16.5?
Hi,
Ich möchte einen Befehl für einen RP Server von mir und meinen Freunden programmieren, wo man als erstes einen Spieler und danach einen String eingibt. Der Spieler soll das hier im Chat eingeben: /anzeige NAME GRUND. Ich weiß erstens nicht wie ich einen String statt einen Namen "auslesen" kann und auch nicht wie ich überhaupt an das Letzte "Argument" herankomme. (Bei dem Bukkit.broadcastMessage soll nach dem "wegen" der Grund hinein.) Bin btw noch Anfänger. Kann mir wer da helfen?
Spigot 1.16.5
public class AnzeigeCommand implements CommandExecutor{
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(args.length == 2) {
Player target = Bukkit.getPlayer(args[0]);
Bukkit.broadcastMessage("§3§l" + player.getName() + " §4§lzeigt §a§l" + target.getName() + " §4§lwegen §a§l" + " §4§lan" );
} else
player.sendMessage("§cBitte benutze §6/anzeige <Spieler> <Grund>§c!");
}
return false;
}
}
2 Antworten
Einfach args[1] zwischen die Strings rein packen
Und du musst btw noch testen, ob es einen Spieler gibt, der den Namen args[0] hat:
if (Bukkit.getOnlinePlayers().contains(Bukkit.getPlayer(args[0]))) {
...
Wie bekomme ich es hin, dass ich bei dem Grund einen String statt einen Namen hin zu schreiben. z.B. /anzeige Hans "klauen".
if(sender instanceof Player) {
Player player = (Player) sender;
if(args.length >= 2) {
if (Bukkit.getOnlinePlayers().contains(Bukkit.getPlayer(args[0]))) {
Player target = Bukkit.getPlayer(args[0]);
String grund = "";
for (int i = 1; i <= args.length; i++) {
grund += args[i];
}
Bukkit.broadcastMessage("§3§l" + player.getName() + " §4§lzeigt §a§l" + target.getName() + " §4§lwegen §a§l" + grund + " §4§lan");
} else
player.sendMessage("§cDer Spieler §6" + args[0] + " §cist nicht auf dem Server!");
} else
player.sendMessage("§cBitte benutze §6/anzeige <Spieler> <Grund>§c!");
}
Ich verstehe die Frage nicht ganz. Der Name (Player#getName) ist ein String.
Du hast mit args[0] den 1. Parameter, also kriegst du den 2. mit args[1], den 3. mit [3]..
2 allgemeine Sachen:
1. Wenn der Command nur für Spieler ist, kannst du das gleich returnen.
2. Der Rückgabewert für einen erfolgreich ausgeführten command auf Spigot ist true.
public class AnzeigeCommand implements CommandExecutor{
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(!(sender instanceof Player)) {
return true;
}
Player player = (Player) sender;
if(args.length == 2) {
Player target = Bukkit.getPlayer(args[0]);
Bukkit.broadcastMessage("§3§l" + player.getName() + " §4§lzeigt §a§l" + target.getName() + " §4§lwegen §a§l" + " §4§lan" );
} else
player.sendMessage("§cBitte benutze §6/anzeige <Spieler> <Grund>§c!");
return true;
}
}
Ganz einfach: Die vordefinierte Fehlermeldung wäre in diesem Fall "Bitte benutze /anzeige <Spieler> <Grund>". Ist auf der Konsole nicht hilfreich. Als Standard-Fehler "Nur für Spieler" zu nutzen, schmeißt die Funktion weg.
Aber solltest du nicht false returnen? Gibt doch ansonsten ne Fehlermeldung.
Genau umgekehrt. true wenn erfolgreich, false wenn nicht. Quelle: Ich habe schon 10+ Plugins gemacht, auch größere
Ich möchte einfach nur wissen, wie ich es hin bekomme, statt einen Namen bei dem zweiten, einen individuellen String hin zu schreiben.
Habe ich geschrieben. 2. Parameter nehmen, sprich args[1]
Würde gerne mehrere Worte, statt nur einem Wort verwenden können. Geht das denn nicht?