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

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

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

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

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

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

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

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

    Спасибо @Dereku за помощь в PlayerCommandPreprocessEvent
     
    Последнее редактирование: 24 мар 2016
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Создавай новый класс для каждой команды, который будет наследовать CommandExecutor.
     
  4. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    пожалуйста прочти что я написал
     
  5. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Он тебе не нужен.
    И написал ты хрень, которую я не в состоянии понять.
     
  6. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    Надо,ну раз не можешь,тогда пройди мимо,найдется надеюсь человек кто в состоянии понять
     
  7. _EnderWorld_

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

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Зачем для каждой команды создавать отдельный класс? Я вот создаю обычно класс CommandUtils или что-то вроде этого, и там команды оставляю
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я не спорю, что для двух-трёх команд можно обойтись и onCommand. Но если у тебя много команд, да и ещё с параметрами, использование всего этого добра в onCommand делает код абсолютно не читабельным.
     
  9. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    Не ребят я не об этом пишу,для начало мне щас надо разобраться с PlayerCommandPreprocessEvent например игрок пишет комунду /setskype [сам скайп] и его заносит в конфиг
    В конфиг его заносит я сделал ник: скайп, но у меня ошибка получается если ввести /setskype то есть без скайпа самого[DOUBLEPOST=1458826322,1458825952][/DOUBLEPOST]
    Да ты издеваешься я разбираюсь потихоньку, а ты мне тут хочешь много классовые структуры вбухать,мне пока с одним надо разобраться помочь
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Нет, ты сидишь на шее и ждёшь готового решения, не желая ничего искать.
    Вот этот отрывок и есть пруф.

    И как я уже писал, PlayerCommandPreprocessEvent тебе нафиг не нужен.
     
  11. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    я тебе говорю надо[DOUBLEPOST=1458830696,1458830645][/DOUBLEPOST]Ну если не хочешь помогать,то прошу тебя идти в другую тему
     
  12. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я пытаюсь заставить тебя НАКОНЕЦ ТАКИ ВОСПОЛЬЗОВАТЬСЯ ПОИСКОВИКОМ, ИБО ЭТО ГУГЛИТСЯ ЗА ДВЕ ССАННЫХ МИНУТЫ.

    Или это новое поколение в конец обоссанное, которым лень даже ввести "onCommand examples bukkit" ?
     
  13. _EnderWorld_

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

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Просто если создавать много, но не засорять сорскод, просто создать пакейдж и запихнуть в него команнд1, команнд2
     
  14. Bohdan_Hrytsak

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

    Баллы:
    76
    Имя в Minecraft:
    NegaTiV
    Вот премер кода должен работать
    Код:
    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;
      }
    }
    
     
    Последнее редактирование: 24 мар 2016
  15. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    Читай тему[DOUBLEPOST=1458831327,1458831217][/DOUBLEPOST]
    спасибо,я это уже кое как сделал так скажем хехех,но спасибо что с пометками,еще поучусь,можешь пожалуйста прочесть по новой тему,там я написал типа что у меня происходит
     
  16. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Однако, здравствуйте.
    Стукнул бы по голове за беспорядочные отступы.
    Коли уж ты допускаешь одну и ту же ошибку в третий раз, покажу тебе её явно.

    > args[0].length()
    args - массив строк.
    args[0] - первая строка в массиве.
    Если в массиве не будет строк, тебе прилетит ArrayOutOfBoundsException, или же вообще NullPointerException.
    Отсюда следует, что нужно использовать не args[0].length() , а args.length .
     
  17. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    Я использую Яндекс:cool:
     
  18. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ура, читабельная шапка.
    Лучше использовать API плагина, имеющего ту команду. Но если уж ты не можешь без PlayerCommandPreprocessEvent и решить проблему с ошибкой не можешь - проверяй String[] args на количество аргументов. Т.е.
    Код:
    if (args.length > 0) {
    //Делаем что то с аргументом (гарантированно есть один)
    } else {
    sender.sendMessage("Недостаточно аргументов");//Или просто забить
    }
    Он для питухов, сорри.
     
  19. Bohdan_Hrytsak

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

    Баллы:
    76
    Имя в Minecraft:
    NegaTiV
    Спасиб:eek:
     
  20. Автор темы
    MrElitePro

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

    Баллы:
    46
    Имя в Minecraft:
    MrElitePro
    Ну это воспринимают и знаю только не очень приятные люди,Я использую Яндекс и мне хватает[DOUBLEPOST=1458832961,1458832158][/DOUBLEPOST]
    Блин ну мне вроде не это надо,смотри /setskype [skype] если вводишь то заносится в конфиг,но если я пишу /setskype то мне плюет ошибкой bandicam 2016-03-24 18-22-45-698.jpg
     
  21. Bohdan_Hrytsak

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

    Баллы:
    76
    Имя в Minecraft:
    NegaTiV
    Хз попробуй ета.
    Код:
      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;
      }
    
     

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