Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Выполнение команды из консоли.

Тема в разделе "Разработка плагинов для новичков", создана пользователем MrHaber, 4 дек 2018.

  1. Автор темы
    MrHaber

    MrHaber Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MrHaber
    Здравствуйте, у меня возник вопрос, как позволить консоли выполнять определенную команду в плагине, проверяя кол-во аргументов, не выдавая ошибок при попытке его выполнения?
     
  2. Mr Hosting
  3. NyanGuyMF

    NyanGuyMF Новичок Пользователь

    Баллы:
    11
    По умолчанию классы-обработчики команд не делают каких-либо проверок на исполнителя
    PHP:
    package me.пользователь.commands;

    /**
     * @author пользователь
     *
     */
    public class CommandHandler implements CommandExecutor {

        @
    Override
        
    public boolean onCommand(CommandSender senderCommand cmdString labelString[] args) {
            
    String message replaceColors(concatArgs(args));
            
    Bukkit.broadcastMessage(message);
            return 
    true;
        }

    }

    Но чтобы команду могли использовать не все пользователи добавляются проверки по правам и прочим параметрам пользователей
    PHP:
    if (!sender.hasPermission("broadcast.send")){
        
    sender.sendMessage(ChatColor.RED "You have no permission");
        return 
    true;
    }
    И так как объект типа CommandSender по умолчанию не является Player'ом, чтобы узнать, игрок ли исполнил эту команду - необходимо сделать проверку принадлежности исполнителя к объекту Player
    PHP:
    // Если CommandSender sender не является игроком ...
    if (!(sender instanceof Player)) {
        
    // .. отправить сообщение об ошибке и вернуть true
        
    sender.sendMessage(ChatColor.RED "Only player command");
        return 
    true;
    }
    А теперь к сути вопроса: если Вы хотите, чтобы обработчики команд Вашего плагина спокойной исполнялись из консоли - не добавляйте проверку instanceof.
     
  4. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну вообще надо делать как раз таки sender instanceof consolecommandsender, потому что сендер это интерфейс и им вообще кто угодно быть может
     
  5. Автор темы
    MrHaber

    MrHaber Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MrHaber
    Спасибо обязательно попробую
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Он и так ее выполнит. Будь то игрок, консоль, или ркон.
     
  7. NyanGuyMF

    NyanGuyMF Новичок Пользователь

    Баллы:
    11
    Вопрос был "Как позволить?", а ответ - позволять не надо, т.к.:
     

Поделиться этой страницей