Bei einem Minecraft Plugin einen Spieler genau definieren?
Hey also ich fang mal direkt an ^^
das ist mein Code für ein gamemode command. ich code in java und mit IntelliJ IDEA:
package de.likeluaks.likelukas.dommands;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class DoCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)){
sender.sendMessage(ChatColor.BOLD + "du musst ein Spieler sein" );
return false;
}
Player player = (Player) sender;
if (args.length == 1){
if (args[0].equalsIgnoreCase("1")){
player.setGameMode(GameMode.CREATIVE);
player.sendMessage(ChatColor.BOLD + "Du bist nun im Creative Modus!");
}else if (args[0].equalsIgnoreCase("2")){
player.setGameMode(GameMode.SURVIVAL);
player.sendMessage(ChatColor.BOLD + "Du bist nun im Survival Modus!");
}else if (args[0].equalsIgnoreCase("3")){
player.setGameMode(GameMode.SPECTATOR);
player.sendMessage(ChatColor.BOLD + "Du bist nun im Spectator Modus!");
}else {
sender.sendMessage(ChatColor.RED + "Entweder 1,2 oder 3 Entscheide dich!");
}
}else {
sender.sendMessage(ChatColor.RED + "Entweder 1 oder 2 Entscheide dich!");
}
return false;
}
}
was ich nun wollen würde ist es das der Spieler bestimmt wird damit meine ich das wenn ich den befehl eingebe nicht ich im gamemode versetzt werde sondern z.b. PufferKeks also /gm 1 und dann wird PufferKeks in den gamemode versetzt ich hoffe das ich das relative gut erklären konnte ich freue mich auf Antworten ^^
Lg. Lukas
2 Antworten
Wenn ein Spieler angegeben wird, hast du zwei Argumente. Aktuell prüfst du nur auf eines. Also machst du eine neue (else) if, ob ein zweites Argument mitgegeben wurde. Den Rest solltest du dann selber hinbekommen.
Kurzes Feedback noch: Nutze zur Bestimmung des Spielmodus (0, 1, 2, 3) nicht elseifs sondern einen Switch. Das ist übersichtlicher. Übrigens: Gamemode 2 ist Adventure, nicht Survival.
Nach dem if-Block, wo du die Länge der Argumente prüfst, machst du einen zweiten if-Block, welcher auf die Länge 2 prüft:
if (args.length == 2) {
Somit weisst du dann, dass zwei Argumente (Spielmodus und Spieler) vorhanden sind und kannst somit auch auf das zweite Element des Arrays zugreifen. Der Spieler gibt den Spielernamen als String ein, du musst dann aus diesem Spielernamen als String ein Spielerobjekt machen.
Da bin ich aber an dem Punkt, wo ich mich mit der Spigot-API nicht mehr so auskenne, dieses Wissen habe ich schon länger nicht mehr gebraucht.
Laut meinen Recherchen soll dies aber mit Bukkit.getPlayer() gehen. Die Methode gibt null zurück, wenn der Spielername nicht existiert, das musst du also auch einprogrammieren und dann eine entsprechende Fehlermeldung ausgeben.
Wenn ich es richtig verstanden habe versuche es mal mit dem Code habe ihn aus dem Kopf geschrieben und nicht getestet sollte aber funktionieren :)
Damit kannst du mit /gamemode 1 [Spielername] den ausgewählten Spieler im Creative Modus setzen.
if(args.length == 2) {
if (args[0].equalsIgnoreCase("1")) {
Player target = Bukkit.getPlayer(args[1]);
if(target != null) {
target.setGameMode(GameMode.CREATIVE);
player.sendMessage(ChatColor.BOLD + "Du hast "+ target.getName() + " in den Creative Modus gesetzt!");
target.sendMessage(ChatColor.BOLD + player.getName() + " hat dich in den Creative Modus gesetzt!");
} else {
player.sendMessage(ChatColor.RED + "Der Spieler ist nicht online");
}
}
}
vielen dank und das mit den gamemode 2 ist nicht Survival ist mir klar ich wollte nur schnell das haben und die frage dan damit stellen ich verstehe jedoch noch nicht ganz genau was ich jetzt machen soll wenn es dir nichts ausmachst könntest du mir die line code schreiben ich bin ziemlich neu im coding bereich es tut mir leid wenn ich deine Hilfe zu sehr in Anspruch nehme