Помогите [РЕШЕНО]Ошибка с getPlayer();

MrLogan_YT

Активный участник
Баллы
61
Имя в Minecraft
MrLogan
Здравствуйте, мне нужна помощь, да я знаю многие пишут загугли, или на подобии того что этот вопрос уже решали ранее, но я всё таки только начал. Я гугли смотрел и ничего не нашел полезного, бессмысленные сайты и видео мне не помогли. Ну дак вот перейдем к теме.
В этом говно коду:
Код:
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if  (!sender.hasPermission("over.commands.mode")) {
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.RED + "You don't have permission for this.");
        return true;
        }
        if(args.length == 0) {
             return false;
        }
        else if (args.length == 2) {

            Player p = Bukkit.getPlayer(args[2]);

            String mode = args[0];
            if (mode == "0" || mode == "s") {
            p.setGameMode(GameMode.SURVIVAL);
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " SURVIVAL");
            return true;
            }
            if (mode == "1" || mode == "c" ) {
            p.setGameMode(GameMode.CREATIVE);
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " CREATIVE");
            return true;
            }
            if (mode == "2" || mode == "a" ) {
            p.setGameMode(GameMode.ADVENTURE);
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " ADVENTURE");
            return true;
            }
            if (mode == "3" || mode == "s" ) {
            p.setGameMode(GameMode.SPECTATOR);
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " SPECTATOR");
                return true;
            }
        }
        else if (args.length == 1) {
        Player p = (Player) sender;
        String mode = args[0];
        if (mode == "0" || mode == "s") {
        p.setGameMode(GameMode.SURVIVAL);
        sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " SURVIVAL");
        return true;
        }
        if (mode == "1" || mode == "c" ) {
        p.setGameMode(GameMode.CREATIVE);
        sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " CREATIVE"); 
        return true;
        }
        if (mode == "2" || mode == "a" ) {
        p.setGameMode(GameMode.ADVENTURE);
        sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " ADVENTURE");
        return true;
        }
        if (mode == "3" || mode == "s" ) {
        p.setGameMode(GameMode.SPECTATOR);
        sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " SPECTATOR");
            return true;
        }
        }
        return false;
    }
Он очень большой, и мне хотелось бы как нибудь его сократить, но это во вторых, а мне нужна помощь со строчкой Player p = Bukkit.getPlayer(args[2]); пишет ошибку The method getPlayer() from the type Bukkit is depricated.
 
Сокращение кода происходит заменой повторяющихся кусков кода функциями, которые делают тоже самое. В текущем случае стоит заменить содержимое каждого IF'а на функцию. Так же стоит заменить сами if'ы на switch блок.
Deprecated -- это значит, что метод устарел и в будущем будет удалён, это не ошибка.
 
Крайне желательно использовать Bukkit.getPlayerExact(), чтобы получать игрока в точности по нику не смотря тех, у кого ник может начинаться на данную последовательность. В любом случае я не знаю, какую это ты версию юзаешь, чтобы этот метод был Deprecated. В Paper 1.14.2 этот метод до сих пор жив и здоров, хотя в большинстве случаев нафиг не нужен. И как уже говорилось ранее, это не ошибка, но стоит избегать и по возможности исправлять на альтернативные варианты.
 
Пример со switch по совету Ission:
Код:
Player player = null;
GameMode mode;
String modeName = "c";
switch (modeName.toLowerCase()) {
    case "0":
    case "s":
        mode = GameMode.SURVIVAL;
        break;
    case "1":
    case "c":
        mode = GameMode.CREATIVE;
        break;
    case "2":
    case "a":
        mode = GameMode.ADVENTURE;
        break;
    case "3":
        //s - survival
        mode = GameMode.SPECTATOR;
        break;
    default:
        player.sendMessage("Неизвестный режим");
        return;
}
player.setGameMode(mode);
player.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.WHITE + "Your Gamemode changed to" + ChatColor.GREEN + " " + mode.name().toLowerCase());
 
Последнее редактирование:
Пример со switch по совету Ission:
Код:
        Player player = ...;
        GameMode mode = null;
        String modeName = "c";
        switch (modeName.toLowerCase()) {
            case "0":
            case "s":
                mode = GameMode.SURVIVAL;
                break;
            case "1":
            case "c":
                mode = GameMode.CREATIVE;
                break;
            case "2":
            case "a":
                mode = GameMode.ADVENTURE;
                break;
            case "3":
                //s - survival
                mode = GameMode.SPECTATOR;
                break;
        }
        if (mode == null) {
            player.sendMessage("Неизвестный режим");
            return;
        }
        player.setGameMode(mode);
        player.sendMessage("Режим игры изменён на " + mode.name().toLowerCase());
GameMode.getByValue(int);
 
Крайне желательно использовать Bukkit.getPlayerExact(), чтобы получать игрока в точности по нику не смотря тех, у кого ник может начинаться на данную последовательность. В любом случае я не знаю, какую это ты версию юзаешь, чтобы этот метод был Deprecated. В Paper 1.14.2 этот метод до сих пор жив и здоров, хотя в большинстве случаев нафиг не нужен. И как уже говорилось ранее, это не ошибка, но стоит избегать и по возможности исправлять на альтернативные варианты.
Это не работает
Тоже самое выдает. Как можно по другому получить имя игрока
 
А еще у меня вот это не пишет в чат после ввода команды.

Код:
if  (!sender.hasPermission("over.commands.vip")) {
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.RED + "You don't have permission for this.");
        return true;
        }
 
Как уже не сказали deprecated - не ошибка, а предупреждение что метод может быть удалён в следующих версиях. Этот метод deprecated только в Bukkit, в spigot deprecated с него убрали. Подключи spigot, а не bukkit в зависимости
 
А еще у меня вот это не пишет в чат после ввода команды.

Код:
if  (!sender.hasPermission("over.commands.vip")) {
            sender.sendMessage(ChatColor.BLACK + "[OVERVIEW]: " + ChatColor.RED + "You don't have permission for this.");
        return true;
        }
Что бы писало у того кто отправил команду не должно быть права over.commands.vip
 
Мб я что то не понял, но у тебя аргумент 0 это режим, аргумент 2 это ник игрока, а аргумент 1 где?
 
Назад
Верх