2015-11-07 163 views
-1

命令/組應輸出給定播放器的組。玩家保存在config.yml中。當我執行該命令時,我得到的只是一個未處理的異常。 它沒有給我任何具體的東西。我不知道,如果是由於這個事實,我使用外部類錯誤。我添加了一個簡單的sendMessage()來證明變量不會導致異常。我對Java很陌生。 也許,StackOverflow可以提供幫助。Bukkit - 未處理的異常

Stym.java(主):

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

堆棧跟蹤:

[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

'onCommand'中的'arguments'是空的 –

回答

2

你的問題就在這裏:

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

arguments[0]採取第一ELEM ent參數數組。但是,由於您只鍵入/ group,因此沒有參數,所以它會拋出ArrayIndexOutOfBoundsException: 0,因爲它試圖訪問數組中的第零個元素,但它不存在。

要解決此問題,您需要首先檢查命令中是否有任何參數。您可以通過獲取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!"); 
}