Array index of out of bounds exception, help?!?

Discussion in 'Plugin Development' started by Milkywayz, Feb 18, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    Milkywayz

    Hey i need help with this plugin i made for my own server. When you type /d ggg, it displays the error message, but if you just type /d then you get a error in console. The error is
    Code:
    null
    org.bukkit.command.CommandException: Unhandled exception executing command 'd' in plugin MilkyDonate v1.4.0
        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:402)
        at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:784)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:744)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:732)
        at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:100)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:537)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:435)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at net.milkycraft.Donate.Donate.onCommand(Donate.java:33)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
        ... 12 more
    
    The code is:
    Code:
    package net.milkycraft.Donate;               
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Donate extends JavaPlugin
    {
        Logger log = Logger.getLogger("Minecraft");
        public void onEnable()
        {
            PluginManager pm = this.getServer().getPluginManager();
            PluginDescriptionFile pdfFile = this.getDescription();
        }
        public void onDisable()
        {
            log.info("Milkydonate Disabled");
        }
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
        {
            if( !(sender instanceof Player) )
            {
                sender.sendMessage("Sorry but the console cannot use these commands.");
                return true;
            }
          if(cmd.getName().equalsIgnoreCase("d") && sender.hasPermission("donate.donate"))
            {
                if(args[0].equalsIgnoreCase("iron") && sender.hasPermission("donate.ir"))
                {
                    sender.sendMessage("=============================="); // use /donate iron
                    sender.sendMessage(ChatColor.GRAY + " Iron Donator Package");
                    sender.sendMessage(ChatColor.GRAY + " Donate $10 via paypal");
                    sender.sendMessage(ChatColor.GRAY + " Ability to fly, heal, and iron kit!");
                    sender.sendMessage(ChatColor.GRAY + " You get $100,000 to use in shop!");
                    sender.sendMessage(ChatColor.GRAY + " Custom commands only on Milkycraft!");
                    sender.sendMessage("==============================");
                    return true;
                }
                if(args[0].equalsIgnoreCase("diamond") && sender.hasPermission("donate.di"))
                {
                    sender.sendMessage("=============================="); // use /donate diamond           
                    sender.sendMessage(ChatColor.AQUA + " Diamond Donator Package");
                    sender.sendMessage(ChatColor.AQUA + " Donate $30 via paypal");
                    sender.sendMessage(ChatColor.AQUA + " All features of Iron!");
                    sender.sendMessage(ChatColor.AQUA + " Ability to god, spawn items, and diamond kit!");
                    sender.sendMessage(ChatColor.AQUA + " You get $300,000 to use in shop!");
                    sender.sendMessage("==============================");
                    return true;
                }
                if(args[0].equalsIgnoreCase("obsidian") && sender.hasPermission("donate.ob"))
                {
                    sender.sendMessage("=============================="); // use /donate obsidian                     
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + " Obsidian Donator Package");
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + " Donate $50 via paypal");
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + " All features of Iron & Diamond!");
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + " Ability to /xp, /nick, creative, super pick, and more!");
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + " You get $500,000 to use in shop!");
                    sender.sendMessage("==============================");
                    return true;
                }
                    if(args[0].equalsIgnoreCase("help") && sender.hasPermission("donate.donate"))
                    {
                    sender.sendMessage(ChatColor.WHITE + "============================");     
                    sender.sendMessage(ChatColor.GOLD + " Milkycraft Donations!");
                    sender.sendMessage(ChatColor.RED + " Visit milkycraft.net!");
                    sender.sendMessage(ChatColor.RED + " Click Donation link and read description");
                    sender.sendMessage(ChatColor.RED + " Choose a package then click the donate button");
                    sender.sendMessage(ChatColor.RED + " All donations go towards running the server!");
                    sender.sendMessage(ChatColor.RED + " All contributions are greatly appreciated");
                    sender.sendMessage(ChatColor.GOLD + " Use /d <packages> for a list of packages!");
                    sender.sendMessage(ChatColor.WHITE + "============================");
                    return true;
                    }
                    if(args[0].equalsIgnoreCase("packages") && sender.hasPermission("donate.donate"))
                    {
                    sender.sendMessage(ChatColor.WHITE + "=======================");     
                    sender.sendMessage(ChatColor.GOLD + " Milkycraft Donator packages!");
                    sender.sendMessage(ChatColor.RED + " Iron package  $10");
                    sender.sendMessage(ChatColor.RED + " Diamond package $30");
                    sender.sendMessage(ChatColor.RED + " Obsidian package $50");
                    sender.sendMessage(ChatColor.RED + " Coowner package $100");
                    sender.sendMessage(ChatColor.RED + " For more info on each package");
                    sender.sendMessage(ChatColor.GOLD + " Use /d <package> ");
                    sender.sendMessage(ChatColor.WHITE + "=======================");
                    return true;         
                }
                if(args[0].equalsIgnoreCase("coowner") && sender.hasPermission("donate.co"))
                {
                    sender.sendMessage("=============================="); // use /donate coowner                         
                    sender.sendMessage(ChatColor.GOLD + " Co-Owner Donator Package");   
                    sender.sendMessage(ChatColor.GOLD + " Donate $100 via paypal");   
                    sender.sendMessage(ChatColor.GOLD + " Every command on milkycraft");   
                    sender.sendMessage(ChatColor.GOLD + " Worldedit, Worldgaurd, Logblock.. Everything!");   
                    sender.sendMessage(ChatColor.GOLD + " The most respected rank in Milkycraft other than owner");   
                    sender.sendMessage("==============================");
                    return true;
                }
                else
                {
                    sender.sendMessage(ChatColor.RED + " Syntax error or no permission!");
                    return false;
                }
            }
            else
            {
                return false; // when all else fails, return false - I added this because the method needs some kind of reachable end statement.
            }
        }
    }
     
  2. Offline

    Njol

    The error occurs when you use the command without any arguments, in which case args is empty and thus has no element 0.
    To prevent it add
    Code:java
    1. if (args.length == 0) {
    2. sender.sendMessage("too few arguments");
    3. return true;
    4. }
    after
    Code:
    if(cmd.getName().equalsIgnoreCase("d") && sender.hasPermission("donate.donate") {
     
  3. Offline

    Lolmewn

    Why would you add perm nodes? I mean, you want everyone to donate (I guess), so there's no need to hide any data from anyone.
     
  4. Offline

    Milkywayz

    Yeah i just added them for the heck of it...
     
  5. Offline

    Atomic Fusion

    Everything should have permission nodes, because, why not? There could always be a hypothetical situation in which it was wanted. Say some sort of offline mode authentication scheme is used, and you don't want people to be able to donate unless they're authenticated.
     
  6. Offline

    Milkywayz

    Anywayz i ended up fixing this problem myself, for some reason i had to add the /d help above the /d and below the last command then add args length == 0. Idk its weird but it worked fine.
     
Thread Status:
Not open for further replies.

Share This Page