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

Помогите [РЕШЕНО] Добавление команды

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

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

    Death_Cat Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Death_CatHD
    Добрый вечер.
    Возникла проблема, что команда не добавляется, вроде бы всё правильно написал, но команды нет.
    Буду признателен в решении проблемы.

    Главный класс:
    Код:
    package Kot.main;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.permissions.Permission;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import net.md_5.bungee.api.ChatColor;
    
    public class KotFirst extends JavaPlugin {
       
        Logger log = Logger.getLogger("Minecraft");
       
        public Permission playerPermission = new Permission("kot.death");
        public void onEnable(){
           
           
            Bukkit.getPluginManager().registerEvents(new Handler(), this);
            PluginManager pm = getServer().getPluginManager();
            pm.addPermission(playerPermission);
           
            getLogger().info("Plugin enable");
            log.info("OH ITS WORK!");
           
        }
       
        @Override
        public void onDisable(){
           
        }
    
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
       
            if(cmd.getName().equalsIgnoreCase("death") && sender instanceof Player) {
               
                Player player = (Player) sender;
               
                if(player.hasPermission("kot.death")) {
                    sender.sendMessage(ChatColor.GREEN + "True message!");
                   
                } else {
                   
                    sender.sendMessage(ChatColor.RED + "False message!");
                }
               
               
       
            }
           
            return false;
        }
       
    }
    

    plugin.yml
    Код:
    name: KotFirst
    main: Kot.main.KotFirst
    version: 1.0
    commands:
       death:
          description: use for send message to player.
          usage: /death <none>
    
     
  2. Хостинг MineCraft
    <
  3. SimMiMo

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

    Баллы:
    76
    бросил взгляд и сразу увидел это
    Код:
    if(cmd.getName().equalsIgnoreCase("death")
    В label команда, в args аргументы.
    Вторым взглядом не заметил регистрации команды при ините плагина..
     
  4. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Ее не нужно регать в главном классе.
     
  5. SimMiMo

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

    Баллы:
    76
    всегда регал по ману со спигота или подобного
    еще в ямл файлик точно прописать надо
    Надо будет затестить как-нибудь
     
  6. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    У тебя табов нету в plugin.yml, как она не работает? Ошибки в консоли нету?
     
  7. SimMiMo

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

    Баллы:
    76
    вот щяс глянул в свой плагин
    this.getCommand("кмд").setExecutor(new хандлер());
     
  8. Автор темы
    Death_Cat

    Death_Cat Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Death_CatHD
    Просто не работает, пишет что такой команды нету при вводе.
     
  9. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Ты регистрируешь команду в другом классе, по этому указываешь на обработчика
    Он просто так не работать не может, твой плагин хотя-бы есть в списке?[DOUBLEPOST=1478275673,1478275627][/DOUBLEPOST]
    И какого черта
     
  10. Автор темы
    Death_Cat

    Death_Cat Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Death_CatHD
    Плагин есть в списке, команда не работает.
    Остальные функции (ивенты) работают.
     
  11. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Лучше кстати, регистрируй команду в отдельном классе, getCommand("command").setExecutor(new CommandHandler())
     
  12. SimMiMo

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

    Баллы:
    76
    мне удобнее в мейне всю эту хрень делать
    хотя по сути никакой разницы нет, это всего лишь привязка эксекутора
     
  13. _MediaNik_

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

    Баллы:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    В plugin.yml напиши так(замени):
    Код:
    commands:
      death:
        description: use for send message to player.
        usage: /<command> <none>
    
     
  14. Автор темы
    Death_Cat

    Death_Cat Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Death_CatHD
    Всё равно команды нет в игре.[DOUBLEPOST=1478456446,1478330103][/DOUBLEPOST]Проблема так и осталась.
    Может быть кто-то подскажет в чем ошибка ?
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Посмотри тут https://github.com/alexandrage/Example
     
  16. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Минимально для того, чтобы команда работала, нужно всего лишь корректно прописать её в plugin.yml и корректно поймать.
    • Цитирую:
      Согласно формату Yaml можно использовать любое количество пробелов. Так что у ТС-а корректный текст.
    • Цитирую:
      В label — использованный алиас (которых может быть много), а в cmd.getName() именно так, как прописано в plugin.yml. Так что у ТС-а этот момент тоже правильный. Единственное, могу отметить излишество в использовании регистронезависимого сравнения, ибо "именно так, как прописано в plugin.yml".
    • Цитирую:
      Главный класс плагина уже реализует интерфейс CommandExecutor, и предоставляет затычку метода onCommand по умолчанию, а также является executor-ом для всех своих команд по умолчанию. Так что у ТС-а всё правильно.
      Могу отметить, что очень часто полезно использовать аннотации Override, чтобы словить несоответствие сигнатур методов, но в данном случае у ТС-а они корректны. Но прописать стоит.
      А ещё стоило бы прописать return true;
      upload_2016-11-7_12-0-1.png
      Ведь если команду "поймали" и её работа исполнена, надо сообщить наверх правдивую информацию.
    • Зачёркнутые строки необязательны:
      upload_2016-11-7_11-57-7.png
      Нет никакой необходимости где-либо регистрировать права, можно просто брать и проверять, выданы ли они игроку или нет.
    • Цитирую:
      Обязательно исправить на нужный пакет.
    Каких-либо явных причин для неработоспособности кода я не увидел. Стоит всё перекомпилировать целиком и внимательно смотреть логи.
     
  17. _Rudey_

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

    Баллы:
    66
    Имя в Minecraft:
    RudeyCoolLeet
    Код:
         public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
             if(cmd.getName().equalsIgnoreCase("one")) {
                 return CommandOne(sender, args);
             }
             return false;
         }
      
         public boolean CommandOne(CommandSender sender, String[] args) {
             Player p = (Player) sender;
            
             //Действие
            return true;
         }
     
  18. Автор темы
    Death_Cat

    Death_Cat Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Death_CatHD
    Видно я что-то не понимаю, но проблема осталась.

    Код:
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          
            if(sender instanceof Player){
              
                if(cmd.getName().equalsIgnoreCase("death")){
                    sender.sendMessage(ChatColor.AQUA + "True message");
                      
                        return true;
                  
                }
              
            }
          
            return false;
        }
    
     
  19. Lilian_solo

    Lilian_solo Новичок Пользователь Заблокирован

    Баллы:
    21
    Имя в Minecraft:
    CoreKolas
    @Override зачем тут?
     
  20. SimMiMo

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

    Баллы:
    76
  21. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
Статус темы:
Закрыта.

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