2015-09-10 2 views
-1

У меня есть плагин, который работает с различными командами в разных классах. Однако в этом случае, когда у меня длина аргумента 2, команда просто не регистрируется.CommandExecutor не регистрирует команду с несколькими аргументами?

public class FinalFrontierAdminCmds implements CommandExecutor{ 

    FinalFrontier get; 

    @Override 
    public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, 
      String[] args) { 

     Player p = (Player) sender; 

     if (cmd.getName().equalsIgnoreCase("ff")){ 


      // Check if only /ff is typed 
      if (args.length == 0){ 
       p.sendMessage("This will display help menu"); 
       return true;  
      } 



      if (args.length == 2){ 

       if (args[0].equalsIgnoreCase("create")){ 
        if(args[1] != null){ 
         get.getConfig().set("Maps." + args[1] + ".world", p.getLocation().getWorld()); 
         get.getConfig().set("Maps." + args[1] + ".x", p.getLocation().getBlockX()); 
         get.getConfig().set("Maps." + args[1] + ".y", p.getLocation().getBlockY()); 
         get.getConfig().set("Maps." + args[1] + ".z", p.getLocation().getBlockZ()); 
         get.getConfig().set("Maps." + args[1] + ".isSet", false); 

         p.sendMessage(get.ffMsg + "You have succesfully created map " + ChatColor.GREEN + args[1] + ChatColor.YELLOW + "!"); 
         return true; 

        } 
       } 
      } 


      return true; 
     } 

     return false; 
    } 

} 

Основной класс с onEnable и onDisable:

public class FinalFrontier extends JavaPlugin{ 

    String ffMsg = ChatColor.GREEN + "[" + ChatColor.YELLOW + "Final Frontier" + ChatColor.GREEN + "]" + ChatColor.YELLOW + ": "; 

    public void onEnable(){ 

     getConfig().addDefault("Maps.", ""); 
     this.getCommand("ff").setExecutor(new FinalFrontierAdminCmds()); 
     saveConfig(); 

    } 

    public void onDisable(){ 
     saveConfig(); 
    } 

} 

Это первый раз, когда это происходит со мной. Обычно я делаю это так, если что-то не изменилось? Спасибо

ответ

1

Строка getConfig().addDefault("Maps.", ""); вызывает ошибку IllegalArgumentException, потому что вы пытаетесь установить пустой путь (пустым путем является несуществующая строка после «.»). Если вы удалите период, он будет правильно создавать этот раздел.

Я не видел кода в классе исполнителей команд, который инициализирует переменную get. Я хотел бы добавить конструктор (если вы еще не сделали этого),

public FinalFrontierAdminCmds(FinalFrontier plugin) { 
    this.get = plugin; 
} 

и обновление экземпляра объекта в методе onEnable(), чтобы отразить это изменение (this.getCommand("ff").setExecutor(new FinalFrontierAdminCmds(this))), в противном случае команда класса исполнитель будет бросаться NPE при попытке добавить значения.

И последнее, но не в последнюю очередь, я хотел бы также сохранить имя в мире (p.getLocation().getWorld().getName()) и не проходит сам мир объекта к методу set, в противном случае конфигурационный файл будет выглядеть следующим образом:

Maps: 
    example: 
    world: !!org.bukkit.craftbukkit.v1_8_R3.CraftWorld 
     PVP: true 
     ambientSpawnLimit: 15 
     animalSpawnLimit: 15 
     autoSave: true 
     difficulty: PEACEFUL 
     environment: NORMAL 
     fullTime: 1100 
     keepSpawnInMemory: true 
     monsterSpawnLimit: 70 
     thunderDuration: 32301 
     thundering: false 
     time: 1100 
     waterAnimalSpawnLimit: 5 
     weatherDuration: 56712 
    //more values down here 

С помощью этих исправлений ваш код должен работать должным образом.

+0

Спасибо за все детали! Действительно помогает сейчас и в будущем! –

Смежные вопросы