Java Bukkit Plugin - Command spuckt Error aus

Garfield7

Newbie
Registriert
Sep. 2012
Beiträge
2
Hallo Leute, ich programmiere gerade ein Plugins für meinen Bukkitserver. Ich habe bereits 2 funktionierende Plugins programmiert, nur dieses 3. Plugin macht probleme.
Folgendes soll passieren:
1. Spieler führt Command aus z.b. /sl sstart
2. Ein Text (serverstart) wird in eine Datei eingetragen
3. Homepage frägt diese Datei ab und fügt dementsprechend einen Eintrag in die Tabelle ein

Problem: Spieler führt den Command aus und bekommt die Meldung "An internal error occurred while attempting to perform this command"
Log:
org.bukkit.command.CommandException: Unhandled exception executing command 'sl' in plugin ServerLog v0.0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:492)
at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:878)
at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:825)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:807)
at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:44)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:276)
at net.minecraft.server.NetServerHandler.d(NetServerHandler.java:109)
at net.minecraft.server.ServerConnection.b(SourceFile:35)
at net.minecraft.server.DedicatedServerConnection.b(SourceFile:30)
at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:581)
at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:212)
at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:474)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:406)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at me.Garfield7.ServerLog.ServerLog.onCommand(ServerLog.java:71)
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
... 15 more

Code:
//Command sl sstop, sstart, supdate, reload, info
if(cmd.getName().equalsIgnoreCase("sl")){
if(args.length == 1 && args[0] != null){
String n1 = args[0];
if(p.hasPermission("serverlog.server.stop") || p.hasPermission("serverlog.server.*") || p.hasPermission("serverlog.*")) {
String n2 = "sstop";
if(n1 == n2){
ds.setServerStops(p.getName());
return true;
}
}
if(p.hasPermission("serverlog.server.start") || p.hasPermission("serverlog.server.*") || p.hasPermission("serverlog.*")) {
String n3 = "sstart";
if(n1 == n3){
ds.setServerStarts(p.getName());
return true;
}
}
if(p.hasPermission("serverlog.server.update") || p.hasPermission("serverlog.server.*") || p.hasPermission("serverlog.*")) {
String n4 = "supdate";
if(n1 == n4){
ds.setServerUpdate(p.getName());
return true;
}
}
if(p.hasPermission("serverlog.server.defekt") || p.hasPermission("serverlog.server.*") || p.hasPermission("serverlog.*")) {
String n5 = "sdefekt";
if(n1 == n5){
ds.setServerDefekt(p.getName());
return true;
}
}
if(p.hasPermission("serverlog.reload") || p.hasPermission("serverlog.*")) {
String n6 = "reload";
if(n1 == n6){
getServer().getPluginManager().disablePlugin(this);
getServer().getPluginManager().enablePlugin(this);
return true;
}
}
if(p.hasPermission("serverlog.info") || p.hasPermission("serverlog.*")) {
String n7 = "info";
if(n1 == n7){
p.sendMessage(ChatColor.RED + "[" + broadcastName + "]" + ChatColor.GREEN +" Dies ist das Plugin '" + descFile.getName() + "' von " + descFile.getAuthors() + "!");
p.sendMessage(ChatColor.RED + "[" + broadcastName + "]" + ChatColor.GREEN +" Dies ist die Version " + descFile.getVersion() + "");
}
}
if(p.hasPermission("serverlog.automessage") || p.hasPermission("serverlog.*")) {
String n8 = "automessage";
if(n1 == n8){
sendmessage();
return true;
}
}
}else if(args.length == 0){
p.sendMessage(ChatColor.RED + "[" + broadcastName + "]" + ChatColor.GREEN +" Dies ist das Plugin '" + descFile.getName() + "' von " + descFile.getAuthors() + "!");
p.sendMessage(ChatColor.RED + "[" + broadcastName + "]" + ChatColor.GREEN +" Dies ist die Version " + descFile.getVersion() + "");
p.sendMessage(ChatColor.RED + "[" + broadcastName + "]" + ChatColor.GREEN +" Alle Commands: info, reload, automessage, sstop, sstart, supdate, sdefekt");
return true;
}
}

1. Erkenntnis: args[0] == null, lösung?

Danke im Vorraus!
 
Zuletzt bearbeitet:
Laut der Exception greiftst du in Zeile 71 von ServerLog.java auf eine Array zu und verwendes den Index 1 (java.lang.ArrayIndexOutOfBoundsException: 1)

Ich kann dir jetzt nichts genaueres sagen, da ich nicht deinen gesamten code habe und auch keine Zeilennummern.

Wiso stellst du die Frage eigentlich nicht in den Bukkit-Developement Foren (http://forums.bukkit.org/forums/plugin-development.5/) Dort bekommst du sicher schneller Hilfe als hier.
 
Zeile 71: if(args.length == 1 && args[0] != null){

Weil ich es bisher nicht wusste, dass es diese Seite gibt, aber Danke.


args[0] == null
Was kann ich tun, dass args[0] != null wird?

Da bekommt man schneller Hilfe?
Naja nicht wirklich ...
 
Zuletzt bearbeitet:
Ok das problem ist wirklich komisch.

Ich habe es in meinem Plugin eigentlich ähnlich gelöst:
Code:
if (args.length < 1) {
    return false;
}

   /* gekürzt */

if (args.length == 1 && args[0].equalsIgnoreCase("clear"))
{
    /* gekürzt */
}
else if(args.length == 1 && args[0].equalsIgnoreCase("reward"))
{
    /* gekürzt */
}
else if ((args.length >= 2) && (args[0].equalsIgnoreCase("add")))
{
     /* gekürzt */
}

Probier einmal das if (args.length < 1) bei dir einfügen.

Den ganzen Code findest du hier: https://github.com/fruel/TaxFreeReg.../lukasf/taxfreeregion/TaxFreeRegion.java#L345

Edit:
Wie auch schon jemand im Bukkit Developer Forum geschrieben hat:

Strings musst du mit .equals() vergleichen nicht mit ==.
(Dürft nicht die Ursache der Exception sein, kann aber später Probleme machen)
 
Zuletzt bearbeitet:
Zurück
Oben