2015-11-07 3 views
-1

Команда/группа должна выводить группу данного игрока. Игроки сохраняются внутри config.yml. Когда я выполняю эту команду, все, что я получаю, является необработанным исключением. Это не дает мне ничего конкретного. Я не знаю, если это вызвано тем фактом, что я неправильно использую внешние классы. Я добавил простой метод sendMessage(), чтобы доказать, что переменная не вызывает исключения. Я довольно новичок в Java. Возможно, StackOverflow может помочь.Bukkit - Необработанное исключение

Stym.java (Main):

import org.bukkit.plugin.java.JavaPlugin; 

public class Stym extends JavaPlugin { 

    public String necessaryIronPlayers; 
    public String necessaryDiamondPlayers; 

    @Override 
    public void onEnable() { 
     getConfig().options().copyDefaults(); 
     saveConfig(); 

     necessaryIronPlayers = getConfig().getString("groups.iron"); 
     necessaryDiamondPlayers = getConfig().getString("groups.diamond"); 

     Group groupClass = new Group(this); 
     getCommand("GROUP").setExecutor(groupClass); 

    } 

} 

Group.java (внешний командный файл):

import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 

public class Group implements CommandExecutor { 

    public String ironPlayers; 
    public String diamondPlayers; 

    Group(Stym stym) { 
     ironPlayers = stym.necessaryIronPlayers; 
     diamondPlayers = stym.necessaryDiamondPlayers; 

    } 

    @Override 
    public boolean onCommand(CommandSender sender, Command command, 
      String label, String[] arguments) { 

     //Testing starts 

     sender.sendMessage("Player:" + " " + arguments[0]); 
     sender.sendMessage("Irons:" + " " + ironPlayers); 
     sender.sendMessage("Diamond:" + " " + diamondPlayers); 

     //Testing stops 

     if(arguments.length == 1) { 
      if(!ironPlayers.contains(arguments[0]) 
        && !diamondPlayers.contains(arguments[0])) { 
       sender.sendMessage(arguments[0] + " " + "is made out of" 
         + " " + "leather!"); 

      } else if(ironPlayers.contains(arguments[0]) 
        && !diamondPlayers.contains(arguments[0])) { 
       sender.sendMessage(arguments[0] + " " + "is made out of" 
         + " " + "iron!"); 

      } else if(!ironPlayers.contains(arguments[0]) 
        && diamondPlayers.contains(arguments[0])) { 
       sender.sendMessage(arguments[0] + " " + "is made out of" 
         + " " + "diamond!"); 

      } else { 
       sender.sendMessage("Tell Krischon, that he has messed up!"); 

      } 

     } else { 
      sender.sendMessage("Wrong usage!"); 

     } 

     return true; 

    } 

} 

plugin.yml:

name: Stym 
main: Stym 
version: 1.3.3.7 
commands: 
    group: 

config.yml:

groups: 
    iron: Player, Another_Player 
    diamond: Rich_Player 

Консоль вывода:

enter image description here

StackTrace:

[19:46:48] [Server thread/WARN]: java.lang.ArrayIndexOutOfBoundsException: 0 
[19:46:48] [Server thread/WARN]: at Group.onCommand(Group.java:24) 
[19:46:48] [Server thread/WARN]: at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) 
[19:46:48] [Server thread/WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) 
[19:46:48] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) 
[19:46:48] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:606) 
[19:46:48] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:372) 
[19:46:48] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:336) 
[19:46:48] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) 
[19:46:48] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) 
[19:46:48] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source) 
+0

Можем ли мы увидеть, пожалуйста, тип ошибки вы получаете в консоли (включая STRACK трассировки и т.д.)? –

+0

@AdrianSohn Сообщение обновлено. – Reum12

+0

'arguments' пуст в' onCommand' –

ответ

2

Ваша проблема здесь:

sender.sendMessage("Player:" + " " + arguments[0]); 

arguments[0] занимает первое элем в массив аргументов. Однако, поскольку вы только набираете/группируете, аргументов нет, поэтому он выдает ArrayIndexOutOfBoundsException: 0, потому что он пытается получить доступ к элементу zero'th в массиве, но он даже не существует.

Чтобы исправить это, вам необходимо сначала проверить, есть ли в команде какие-либо аргументы. Вы можете сделать это, получив arguments.length и проверив, больше ли оно 0 или равно количеству аргументов, которые вы хотите получить.

Пример:

if(arguments.length > 0){ 
    sender.sendMessage("Player:" + " " + arguments[0]); 
    //Do other stuff 
}else{ 
    sender.sendMessage(ChatColor.RED + "That is not how you run the command!"); 
} 
Смежные вопросы