Войти или зарегистрироваться

Помогите [Плагин] Command

MrElitePro

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MrElitePro
Начал работать с командами и возникли проблемы. Объясните пожалуйста и покажите примеры самые легкие и понятные для:
1) PlayerCommandPreprocessEvent например игрок пишет команду(Команда уже содержится в одном плагине к примеру возьмем) /setskype [сам скайп] то скайп занесет в конфиг,но если написать /setskype без скайпа,то в консоль выдает сразу ошибку

2)public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) Пока ожидаю

Помогите кто разбирается,объясните пожалуйста,буду рад :good:

Спасибо @Dereku за помощь в PlayerCommandPreprocessEvent
 
Последнее редактирование:
Создавай новый класс для каждой команды, который будет наследовать CommandExecutor.
 
Зачем для каждой команды создавать отдельный класс? Я вот создаю обычно класс CommandUtils или что-то вроде этого, и там команды оставляю
Я не спорю, что для двух-трёх команд можно обойтись и onCommand. Но если у тебя много команд, да и ещё с параметрами, использование всего этого добра в onCommand делает код абсолютно не читабельным.
 
Не ребят я не об этом пишу,для начало мне щас надо разобраться с PlayerCommandPreprocessEvent например игрок пишет комунду /setskype [сам скайп] и его заносит в конфиг
В конфиг его заносит я сделал ник: скайп, но у меня ошибка получается если ввести /setskype то есть без скайпа самого
Я не спорю, что для двух-трёх команд можно обойтись и onCommand. Но если у тебя много команд, да и ещё с параметрами, использование всего этого добра в onCommand делает код абсолютно не читабельным.
Да ты издеваешься я разбираюсь потихоньку, а ты мне тут хочешь много классовые структуры вбухать,мне пока с одним надо разобраться помочь
 
я разбираюсь потихоньку
Нет, ты сидишь на шее и ждёшь готового решения, не желая ничего искать.
но у меня ошибка получается если ввести /setskype то есть без скайпа самого
Вот этот отрывок и есть пруф.

И как я уже писал, PlayerCommandPreprocessEvent тебе нафиг не нужен.
 
Нет, ты сидишь на шее и ждёшь готового решения, не желая ничего искать.Вот этот отрывок и есть пруф.

И как я уже писал, PlayerCommandPreprocessEvent тебе нафиг не нужен.
я тебе говорю надо
Ну если не хочешь помогать,то прошу тебя идти в другую тему
 
я тебе говорю надо
Ну если не хочешь помогать,то прошу тебя идти в другую тему
Я пытаюсь заставить тебя НАКОНЕЦ ТАКИ ВОСПОЛЬЗОВАТЬСЯ ПОИСКОВИКОМ, ИБО ЭТО ГУГЛИТСЯ ЗА ДВЕ ССАННЫХ МИНУТЫ.

Или это новое поколение в конец обоссанное, которым лень даже ввести "onCommand examples bukkit" ?
 
Я не спорю, что для двух-трёх команд можно обойтись и onCommand. Но если у тебя много команд, да и ещё с параметрами, использование всего этого добра в onCommand делает код абсолютно не читабельным.
Просто если создавать много, но не засорять сорскод, просто создать пакейдж и запихнуть в него команнд1, команнд2
 
Вот премер кода должен работать
Java:
public class Main extends JavaPlugin{
   @Override
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  Player player = (Player)sender;
     if(cmd.getName().equalsIgnoreCase("setskype")){
       if(args.length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета скайп
          *
          *
          * */
  }
        else{
         player.sendMessage("Usage: /setskype skype");
       }
  }
     if(cmd.getName().equalsIgnoreCase("setvk")){
       if(args.length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета vk
          *
          *
          * */
  }
        else{
         player.sendMessage("Usage: /setvk vk");
       }
      
     }
     return true;
  }
}
 
Последнее редактирование:
Читай тему
Вот премер кода должен работать
Java:
public class Main extends JavaPlugin{
   @Override
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  Player player = (Player)sender;
     if(cmd.getName().equalsIgnoreCase("setskype")){
       if(args[0].length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета скайп
          *
          *
          * */
  }
        else{
         player.sendMessage("Usage: /setskype skype");
       }
  }
     if(cmd.getName().equalsIgnoreCase("setvk")){
       if(args[0].length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета vk
          *
          *
          * */
  }
        else{
         player.sendMessage("Usage: /setvk vk");
       }
      
     }
     return true;
  }
}
спасибо,я это уже кое как сделал так скажем хехех,но спасибо что с пометками,еще поучусь,можешь пожалуйста прочесть по новой тему,там я написал типа что у меня происходит
 
Просто если создавать много, но не засорять сорскод, просто создать пакейдж и запихнуть в него команнд1, команнд2
Создавай новый класс для каждой команды, который будет наследовать CommandExecutor.
Однако, здравствуйте.
Вот премер кода должен работать
Java:
public class Main extends JavaPlugin{
   @Override
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  Player player = (Player)sender;
     if(cmd.getName().equalsIgnoreCase("setskype")){
       if(args[0].length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета скайп
          *
          *
          * */
  } else {
         player.sendMessage("Usage: /setskype skype");
       }
  }
     if(cmd.getName().equalsIgnoreCase("setvk")){
       if(args[0].length() == 1){
         /*
          * Что тебе нада зделать argsp[0] ета vk
          *
          *
          * */
  } else {
         player.sendMessage("Usage: /setvk vk");
       }
     }
     return true;
  }
}
Стукнул бы по голове за беспорядочные отступы.
Коли уж ты допускаешь одну и ту же ошибку в третий раз, покажу тебе её явно.

> args[0].length()
args - массив строк.
args[0] - первая строка в массиве.
Если в массиве не будет строк, тебе прилетит ArrayOutOfBoundsException, или же вообще NullPointerException.
Отсюда следует, что нужно использовать не args[0].length() , а args.length .
 
Ура, читабельная шапка.
1) PlayerCommandPreprocessEvent например игрок пишет команду(Команда уже содержится в одном плагине к примеру возьмем) /setskype [сам скайп] то скайп занесет в конфиг,но если написать /setskype без скайпа,то в консоль выдает сразу ошибку
Лучше использовать API плагина, имеющего ту команду. Но если уж ты не можешь без PlayerCommandPreprocessEvent и решить проблему с ошибкой не можешь - проверяй String[] args на количество аргументов. Т.е.
Java:
if (args.length > 0) {
//Делаем что то с аргументом (гарантированно есть один)
} else {
sender.sendMessage("Недостаточно аргументов");//Или просто забить
}

Я использую Яндекс:cool:
Он для питухов, сорри.
 
Однако, здравствуйте.
Стукнул бы по голове за беспорядочные отступы.
Коли уж ты допускаешь одну и ту же ошибку в третий раз, покажу тебе её явно.

> args[0].length()
args - массив строк.
args[0] - первая строка в массиве.
Если в массиве не будет строк, тебе прилетит ArrayOutOfBoundsException, или же вообще NullPointerException.
Отсюда следует, что нужно использовать не args[0].length() , а args.length .
Спасиб:eek:
 
Ну это воспринимают и знаю только не очень приятные люди,Я использую Яндекс и мне хватает
Блин ну мне вроде не это надо,смотри /setskype [skype] если вводишь то заносится в конфиг,но если я пишу /setskype то мне плюет ошибкойbandicam 2016-03-24 18-22-45-698.jpg
 
Хз попробуй ета.
Java:
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  Player player = (Player)sender;
     if(cmd.getName().equalsIgnoreCase("setskype")){
      if(args.length == 0){
        player.sendMessage("+++ + + ++ +");
        return true;
      }
      if(args.length > 0){
        player.sendMessage("Все окей");
        return true;
      }
       
     }
     return false;
  }
 
Назад
Верх