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

Команды для bukkit

CrazyJared

Активный участник
Пользователь
Баллы
68
Всем доброго времени суток!
я умею делать только простые команды как эти:
Java:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
        if(cmd.getName().equals("test")){
            //Действия
        }
        return false;       
    }
Возникла проблема, как написать чтоб работала эта команда ?
/test player 1
player - имя игрока, причем чтоб его искало в списке онлайна.
 
Чтоб искало бери массив имен и используй
Java:
foreach(param1 in mass)
{
    if(param1 =="ник")
    {
        действие
    }
}


где mass - массив имен

Незнаю есть ли в яве такая функция, но все же попробуй так:
где oldstr твое - test player 1
Java:
String str = oldstr.Split(' ');
 
Если разобрать фразу, то получается:
/test - сама команда
player - аргумент № 1
1 - аргумент № 2

Если игрок отправляет команду с аргументами, то Bukkit создаёт массив, где первый аргумент (в нашем случае player) имеет индекс 0, а "1" собственно индекс 1

Получается нужно предварительно проверить саму команду, а потом уже проверять необходимые аргументы.

Пример:
Java:
//Проверяем саму команду
if(cmd.getName().equalsIgnoreCase("test")){
if(args[0].equalsIgnoreCase("player")){
//если первый аргумент player, то выполняем дальнейшие проверки и в конце нужные действия
}
}

P.S Лучше используйте .equalsIgnoreCase() и тогда у вас будет работать при разных регистрах написания команды будь то TeSt, то TEst, иначе с .equals() вас пустит только, если будет 100 %-но написано test
 
Я нашел статью, где написано про команды, там написано то же, что пишет D_ART. Единственное, что не совсем то, что нужно, это
Java:
if(args[0].equalsIgnoreCase("player")){
.
Я нашел решения сам, чтоб игрока искало в онлайне:
Java:
Player player = Bukkit.getPlayer(args[0]);

P.S Возможно я не корректно поставил вопрос.
 
Если разобрать фразу, то получается:
/test - сама команда
player - аргумент № 1
1 - аргумент № 2

Если игрок отправляет команду с аргументами, то Bukkit создаёт массив, где первый аргумент (в нашем случае player) имеет индекс 0, а "1" собственно индекс 1

Получается нужно предварительно проверить саму команду, а потом уже проверять необходимые аргументы.

Пример:
Java:
//Проверяем саму команду
if(cmd.getName().equalsIgnoreCase("test")){
if(args[0].equalsIgnoreCase("player")){
//если первый аргумент player, то выполняем дальнейшие проверки и в конце нужные действия
}
}

P.S Лучше используйте .equalsIgnoreCase() и тогда у вас будет работать при разных регистрах написания команды будь то TeSt, то TEst, иначе с .equals() вас пустит только, если будет 100 %-но написано test
Java:
if(cmd.getName().equalsIgnoreCase("test")){
Данная строка нужна, если у нас на один обработчик завязано несколько различных команд. В противном случае является лишним.
Я нашел решения сам, чтоб игрока искало в онлайне:
Java:
Player player = Bukkit.getPlayer(args[0]);
Перед обращением к любому члену массива рекомендую проверить на наличие нужного количества элементов в массиве. Массив ведь может быть и пустой(просто команда /test) и тогда плагин выдаст исключение.
 

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

Назад
Верх