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

Помогите Ошибка с командами

Discussion in 'Разработка плагинов для новичков' started by Welester, Oct 12, 2016.

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

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Когда пишу в чате команду пишет:
    /сама команда
    Вот команда, я уже всё перелазил, не могу найти ошибку.
    Code:
    public boolean onCommand(CommandSender sender,Command cmd,String label,int[] args1){
            Player p = (Player) sender;
            if(cmd.getName().equalsIgnoreCase("myfraction")){
                if(getConfig().getInt("players." + p.getName() + ".fraction") != 0){
                    if(args1.length == 0){
                        p.sendMessage(ChatColor.RED + "Введите числовой агрумент.");
                    }
                    else{
                        int number = args1[0];
                        if(number == 1){
                        getConfig().set("players." + p.getName() + ".fraction", 1);
                        p.sendMessage(ChatColor.DARK_RED + "Вы примкнули к рядам синдиката!");
                        }
                        if(number == 2){
                        getConfig().set("players." + p.getName() + ".fraction", 2);
                        p.sendMessage(ChatColor.BOLD + "Вы примкнули к рядам альянса!");
                        }
                        if(number == 3){
                        getConfig().set("players." + p.getName() + ".fraction", 3);
                        p.sendMessage(ChatColor.GREEN + "Вы примкнули к рядам империи!");
                        }
                    }
                }
                else{
                    p.sendMessage(ChatColor.RED + "Вы уже состоите в одной из фракций");
                }
            }
           
            if(cmd.getName().equalsIgnoreCase("test")){
                GUI.startGUI(p);
            }
       
            return true;
        }
    
     
  2. Хостинг MineCraft
    <
  3. DonDays

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

    Trophy Points:
    96
    Имя в Minecraft:
    DonDays
    В plugin.yml команду зарегистрировал? В главном классе регистрация есть?
     
  4. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    А как её регать надо? Вроде bukkit.registerevents и прочее есть
    Сама команда находится в главном классе
     
  5. DonDays

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

    Trophy Points:
    96
    Имя в Minecraft:
    DonDays
    Вроде бы, в главном классе регистрировать не нужно. Попробуй все же - getCommand("команда").setExecutor(класс)
     
  6. xDark

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    switch(number) {
    case 1:
    break;
    case 2:
    break;
    case 3:
    break;
    }
     
  7. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Проблема в том, что я до этого делал плагины, и всё работало более чем прекрасно, а сейчас происходит вот эта члень
     
  8. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Надо в plugin.yml.
    Да, не нужно, потому что JavaPlugin уже реализует интерфейс CommandExecutor и для команд плагина является исполнителем по умолчанию.
     
  9. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Проблема в том, что я уже всё зарегал, всё сделал, но не понимаю почему не работает, можешь пожалуйтста пример как нужно записывать команду, вот записал я её в pluignl.yml, и вот как дальше? Какая должна быть иерархия у метода команд?
     
  10. Exception_Prototype

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

    Trophy Points:
    46
    Покажи плагин yml[DOUBLEPOST=1476515933,1476515873][/DOUBLEPOST]И покажи как ты зарегал класс.
     
  11. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Code:
    name: Battler
    main: main.main
    description: notoriane
    version: 0.1
    
    commands:
      myfraction:
        usage: /myfraction
      test:
        usage: /test
    
    Весь плагин, других классов нету
    Code:
    public class main extends JavaPlugin  implements Listener{
    
        public void onEnable(){
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
           
            getConfig().options().copyDefaults(true);
            saveConfig();
            if(getConfig().getString("frac." + ".sindicat.") == null){
                getConfig().addDefault("frac." + ".sindicat." + ".players", 0);
                getConfig().addDefault("frac." + ".sindicat." + ".money", 0);
                getConfig().addDefault("frac." + ".sindicat." + ".iron", 0);
                getConfig().addDefault("frac." + ".sindicat." + ".gold", 0);
                getConfig().addDefault("frac." + ".sindicat." + ".warriors", 0);
            }
            if(getConfig().getString("frac." + ".alliance.") == null){
                getConfig().addDefault("frac." + ".alliance." + ".players", 0);
                getConfig().addDefault("frac." + ".alliance." + ".money", 0);
                getConfig().addDefault("frac." + ".alliance." + ".iron", 0);
                getConfig().addDefault("frac." + ".alliance." + ".gold", 0);
                getConfig().addDefault("frac." + ".alliance." + ".warriors", 0);
            }
            if(getConfig().getString("frac." + ".impire.") == null){
                getConfig().addDefault("frac." + ".impire." + ".players", 0);
                getConfig().addDefault("frac." + ".impire." + ".money", 0);
                getConfig().addDefault("frac." + ".impire." + ".iron", 0);
                getConfig().addDefault("frac." + ".impire." + ".gold", 0);
                getConfig().addDefault("frac." + ".impire." + ".warriors", 0);
            }
            saveConfig();
        }
        public void onDisable(){
            saveConfig();
        }
       
        public boolean CheckSender(CommandSender sender){
            if(sender instanceof Player){
                return false;
            }
            return true;
        }
       
        public boolean onCommand(CommandSender sender,Command cmd,String label,int[] args1){
            if(CheckSender(sender)) return true;
            Player p = (Player) sender;
           
            if(cmd.getName().equalsIgnoreCase("myfraction")){
                if(getConfig().getInt("players." + p.getName() + ".fraction") != 0){
                    if(args1.length == 0){
                        p.sendMessage(ChatColor.RED + "Введите числовой агрумент.");
                        return true;
                    }
                    else{
                        int number = args1[0];
                        if(number == 1){
                        getConfig().set("players." + p.getName() + ".fraction", 1);
                        p.sendMessage(ChatColor.DARK_RED + "Вы примкнули к рядам синдиката!");
                        return true;
                        }
                        if(number == 2){
                        getConfig().set("players." + p.getName() + ".fraction", 2);
                        p.sendMessage(ChatColor.BOLD + "Вы примкнули к рядам альянса!");
                        return true;
                        }
                        if(number == 3){
                        getConfig().set("players." + p.getName() + ".fraction", 3);
                        p.sendMessage(ChatColor.GREEN + "Вы примкнули к рядам империи!");
                        return true;
                        }
                    }
                }
                else{
                    p.sendMessage(ChatColor.RED + "Вы уже состоите в одной из фракций");
                    return true;
                }
            }
           
            if(cmd.getName().equalsIgnoreCase("test")){
                GUI.startGUI(p);
                return true;
            }
       
            return true;
        }
       
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e){
            Player p = e.getPlayer();
            if(getConfig().getString("players." + p.getName()) == null){
                getConfig().addDefault("players." + p.getName() + ".money", 0);
                getConfig().addDefault("players." + p.getName() + ".fraction", 0);
                getConfig().addDefault("players." + p.getName() + ".heal", 0);
                getConfig().addDefault("players." + p.getName() + ".kills", 0);
                getConfig().addDefault("players." + p.getName() + ".death", 0);
                getConfig().addDefault("players." + p.getName() + ".admin", 0);
                getConfig().addDefault("players." + p.getName() + ".level", 0);
            }
            if(getConfig().getInt("players." + p.getName() + ".fraction") == 0){
                p.sendMessage(ChatColor.GOLD + "Выберите фракцию из предложенных.");
                p.sendMessage(ChatColor.GOLD + "/myfraction (число фракции).");
                p.sendMessage(ChatColor.GOLD + "1 - синдикат.");
                p.sendMessage(ChatColor.GOLD + "2 - альянс.");
                p.sendMessage(ChatColor.GOLD + "3 - империя.");
            }
        }
        @EventHandler
        public void onBlockBreak(BlockBreakEvent e){
       
        }
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent e){
           
        }
        @EventHandler
        public void InverClick(InventoryClickEvent e){
            Player p = (Player) e.getWhoClicked();
           
            if(e.getInventory().getName().equalsIgnoreCase("Что вы хотите делать?")){
                e.setCancelled(true);
            }
        }
    }
    
     
  12. Exception_Prototype

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

    Trophy Points:
    46
    Я правильно понял? Если sender человек - не делаем команду? Так и должно быть?
     
  13. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Это я сегодня добавил, забыл поставить !, до этого небыло, было тупо Player p = (Player) sender;
     
  14. Exception_Prototype

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

    Trophy Points:
    46
    [​IMG][DOUBLEPOST=1476517158,1476517058][/DOUBLEPOST]По идее, если нечего из метода обработки команд не выполнялось, то должно вернуться false. http://joxi.ru/12Mj9XRI4pXOoA
     
  15. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Описание же необязательно? Я так то у меня же так же?
     
  16. Exception_Prototype

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

    Trophy Points:
    46
    Я думаю да, описание не обязательно, ну а в общем ошибок не заметил. Ща будем дальше смотреть.
     
  17. Автор темы
    Welester

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

    Trophy Points:
    36
    Имя в Minecraft:
    Welester
    Я просто до этого плагин так же писал, всё работало прекрасно и более чем, я вот думаю, может проблема в ядре?
     
  18. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    В первую очередь ошибки следует искать у себя, и как показывает практика, они находятся именно там.
    upload_2016-10-15_14-55-18.png
    Так-то всё верно, onCommand продолжится если сендер = игрок.

    upload_2016-10-15_14-59-11.png
    А что, String вот так можно прикастовать к int-у? А я-то вечно делаю Integer.parseString(...) и ловлю IllegalArgumentException, вот дурак =)

    Ещё хорошим стилем было бы поставить аннотацию Override перед onCommand. Это помогло бы Вам заметить, что Вы не перегружаете своим onCommand наследуемый, так как прототип метода (ой, в Java это сигнатура?) отличается (подсказка: последний аргумент), и Вы пишите никем не вызываемый код.
     
  19. Exception_Prototype

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

    Trophy Points:
    46
    Опередил)) Только хотел спросить
     
  20. _MediaNik_

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

    Trophy Points:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Вы все так упорно этого не замечаете? :D int[] должно быть String[]
     
  21. Exception_Prototype

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

    Trophy Points:
    46
    xDDDDD
    Как в таких местах делают ошибки?)
     

Share This Page