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

Welester

Участник
Пользователь
Баллы
36
Имя в Minecraft
Welester
Когда пишу в чате команду пишет:
/сама команда
Вот команда, я уже всё перелазил, не могу найти ошибку.
Java:
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;
    }
 
Когда пишу в чате команду пишет:
/сама команда
Вот команда, я уже всё перелазил, не могу найти ошибку.
Java:
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;
    }
В plugin.yml команду зарегистрировал? В главном классе регистрация есть?
 
А как её регать надо? Вроде bukkit.registerevents и прочее есть
Сама команда находится в главном классе
Вроде бы, в главном классе регистрировать не нужно. Попробуй все же - getCommand("команда").setExecutor(класс)
 
Java:
                    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 + "Вы примкнули к рядам империи!");
                    }
switch(number) {
case 1:
break;
case 2:
break;
case 3:
break;
}
 
Вроде бы, в главном классе регистрировать не нужно. Попробуй все же - getCommand("команда").setExecutor(класс)
Проблема в том, что я до этого делал плагины, и всё работало более чем прекрасно, а сейчас происходит вот эта члень
 
В plugin.yml команду зарегистрировал?
А как её регать надо?
Надо в plugin.yml.
Вроде бы, в главном классе регистрировать не нужно.
Да, не нужно, потому что JavaPlugin уже реализует интерфейс CommandExecutor и для команд плагина является исполнителем по умолчанию.
 
Надо в plugin.yml.
Да, не нужно, потому что JavaPlugin уже реализует интерфейс CommandExecutor и для команд плагина является исполнителем по умолчанию.
Проблема в том, что я уже всё зарегал, всё сделал, но не понимаю почему не работает, можешь пожалуйтста пример как нужно записывать команду, вот записал я её в pluignl.yml, и вот как дальше? Какая должна быть иерархия у метода команд?
 
Проблема в том, что я уже всё зарегал, всё сделал, но не понимаю почему не работает, можешь пожалуйтста пример как нужно записывать команду, вот записал я её в pluignl.yml, и вот как дальше? Какая должна быть иерархия у метода команд?
Покажи плагин yml
И покажи как ты зарегал класс.
 
Покажи плагин yml
И покажи как ты зарегал класс.
Java:
name: Battler
main: main.main
description: notoriane
version: 0.1

commands:
  myfraction:
    usage: /myfraction
  test:
    usage: /test
Весь плагин, других классов нету
Java:
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);
        }
    }
}
 
41500be2d8.png

По идее, если нечего из метода обработки команд не выполнялось, то должно вернуться false. http://joxi.ru/12Mj9XRI4pXOoA
 
Я думаю да, описание не обязательно, ну а в общем ошибок не заметил. Ща будем дальше смотреть.
Я просто до этого плагин так же писал, всё работало прекрасно и более чем, я вот думаю, может проблема в ядре?
 
может проблема в ядре?
В первую очередь ошибки следует искать у себя, и как показывает практика, они находятся именно там.
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 это сигнатура?) отличается (подсказка: последний аргумент), и Вы пишите никем не вызываемый код.
 
Назад
Верх