Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап ///

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

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

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] 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.
 
По умолчанию классы-обработчики команд не делают каких-либо проверок на исполнителя
PHP:
package me.пользователь.commands;

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

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] 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.
Ну вообще надо делать как раз таки sender instanceof consolecommandsender, потому что сендер это интерфейс и им вообще кто угодно быть может
 
Здравствуйте, у меня возник вопрос, как позволить консоли выполнять определенную команду в плагине, проверяя кол-во аргументов, не выдавая ошибок при попытке его выполнения?
Он и так ее выполнит. Будь то игрок, консоль, или ркон.
 
Ну вообще надо делать как раз таки sender instanceof consolecommandsender, потому что сендер это интерфейс и им вообще кто угодно быть может
Вопрос был "Как позволить?", а ответ - позволять не надо, т.к.:
По умолчанию классы-обработчики команд не делают каких-либо проверок на исполнителя
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх