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

Стартап ///

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

Статус темы:
Закрыта.
  1. Автор темы
    MrHaber

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

    Баллы:
    66
    /
     
    Последнее редактирование: 21 апр 2020
  2. NyanGuyMF

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

    Баллы:
    76
    По умолчанию классы-обработчики команд не делают каких-либо проверок на исполнителя
    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.
     
  3. hyndorik

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

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

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

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

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

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

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