Plugin Command mit einem benutzerdefinierten String? Spigot 1.16.5?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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]))) {
...
Woher ich das weiß:Hobby – Habe ich in 2015-2022 gezockt aber ark ist besser

Undercover235 
Fragesteller
 08.06.2021, 18:27

Wie bekomme ich es hin, dass ich bei dem Grund einen String statt einen Namen hin zu schreiben. z.B. /anzeige Hans "klauen".

0
Undercover235 
Fragesteller
 08.06.2021, 20:43

Würde gerne mehrere Worte, statt nur einem Wort verwenden können. Geht das denn nicht?

0
Brockdish  09.06.2021, 08:42
@Undercover235
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!");
}
0
Von Experte Brockdish bestätigt

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;
    }
} 
Woher ich das weiß:eigene Erfahrung

7sleepy  08.06.2021, 17:34

Wieso returnst du true, wenn der sender kein Player ist??

0
BlackHawk2306  08.06.2021, 17:42
@7sleepy

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.

0
7sleepy  08.06.2021, 17:53
@BlackHawk2306

Aber solltest du nicht false returnen? Gibt doch ansonsten ne Fehlermeldung.

0
BlackHawk2306  08.06.2021, 17:54
@7sleepy

Genau umgekehrt. true wenn erfolgreich, false wenn nicht. Quelle: Ich habe schon 10+ Plugins gemacht, auch größere

0
Undercover235 
Fragesteller
 08.06.2021, 18:23

Ich möchte einfach nur wissen, wie ich es hin bekomme, statt einen Namen bei dem zweiten, einen individuellen String hin zu schreiben.

0