Problems in command reading.

Discussion in 'Plugin Development' started by Xemiru, Apr 5, 2012.

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

    Xemiru

    Whenever I do my /iban command in-game, it never seems to work. It sends it like the plugin is just an empty file.

    Unknown command.

    Here's my coding.

    http://pastebin.com/ZSgHuzsU - Main Class File
    http://pastebin.com/MaZrrnjm - CommandExecutor File

    Some help would be appreciated. Thanks.

    --

    Fixed it...kind of.
    I was able to make Bukkit read the command, but now it sends me an error when I type it in.

    REGISTERED COMMAND:
    Added command "iban" to plugin.yml.

    NEW ERROR:

    2012-04-05 18:40:26 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'iban' in plugin iBanU v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
    at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:473)
    at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:821)
    at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:781)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764)
    at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113)
    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:551)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:449)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at xemi.plugins.iBanU.iBanUCommandExecutor.onCommand(iBanUCommandExecutor.java:16)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
    ... 12 more

    from console.

    --

    I'm just a starter developer btw, really new to both Java and Bukkit plugins. (The coding part. If it was just me configuring it and learning how it works, it takes merely a few seconds.)
     
  2. Offline

    dsmyth1915

    Try making line 16 bukkit.getPlayer(args[0]) instead of args one.

    EDIT: nevermind don't do that. I can't see what's wrong...
     
  3. Offline

    Xemiru

    I don't really know about that.

    Code:
                } else if(args[0] == "help" || args[0] == "help" && args[1] == "1"){
                    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.BLUE + " Command Index: Page 1 of 2");
                    cs.sendMessage(ChatColor.BLUE + "help - Shows this help index.");
                    cs.sendMessage(ChatColor.BLUE + "checkIP - Shows the IP of the specified player.");
                    cs.sendMessage(ChatColor.BLUE + "ban - Bans the player.");
                    cs.sendMessage(ChatColor.BLUE + "pipban - Bans the player's name and IP.");
                    cs.sendMessage(ChatColor.BLUE + "purge - Resets player/IP ban data.");
                    return true;
                }
    If you look here, I'm using args[0] as an argument on what command to perform.
     
  4. Offline

    dsmyth1915

    Yes, excuse that last post. Pastebin is awkward on my phone. Going through it carefully I see that args 1 is supposed to be he played name...

    Maybe try removing the bukkit.getserver? I did some research, and array out of bounds means you used a part of the command that had nothing associated with it. How that happens in not entirely sure yet.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 25, 2016
  5. Offline

    Xemiru

    Well, I'm getting a bit of help from xDrapor as well. Kind of my tutor or something. Saying he's had this type of error before, I'm going to see what he comes up with.
     
  6. Offline

    dsmyth1915

    Alright, let everyone know how you fixed it when you do. I'm sure it'll be much appreciated.

    Epiphany! I was looking through an old thread of mine, and noticed that if you don't check to see if the parameter is null, it returns the index is out of bounds error. Since the args[1] is the first thing im willing to be that bukkit checks the args[1] first, then goes to the rest of the code. but because if you type just /iban and throws the exception, the args[0] code never fires. Try moving args[1] to after the args[0] code.

    clarifying, arg[0] is Iban. When you type that, arg 1 gets checked first,returns null and the exception is thrown.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 25, 2016
  7. Offline

    Xemiru

    ...hot damn. BACK TO THE DRAWING BOARD.
    [Testing again.]

    Every command is now args[1]. However, the error still remains. When you said args[0] was iBan, I changed all commands to args[1] and increased all the others by 1 arg or so after that. Nothing happened, it's like it was never changed. Any other solutions?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 25, 2016
  8. Offline

    Technius

    Don't do, for example,
    Code:java
    1. if("test" == "test");//no work

    because that compares if they are the same instances. Instead, do this:
    Code:java
    1. if("test".equalsIgnoreCase("test"));//yay!

    String.equalsIgnoreCase is comparing if the contents of the strings are equal case insensitive,
    and String.equals is comapring if the contests of the strings are equal case sensitive.

    Also, your error is an ArrayIndexOutOfBounds exception, so you might want to check the length of the arguments:
    Code:java
    1. if(args.length == 1)//so your command is like "/example test"
    2. {
    3. //One argument, yay!
    4. String s = args[0];
    5. }
    6. else if(args.length == 2)//so your command is like "/example test derp"
    7. {
    8. //Two arguments, yay!
    9. String s = args[0];
    10. String s2 = args[1];
    11. }
    12. else if(args.length == 0)//so your command is like "/example"
    13. {
    14. //No arguments, boo!
    15. }


    Good luck!
     
    Xemiru likes this.
  9. Offline

    Xemiru

    ..meep?

    I've already checked with the arguments to see if they're less than or greater than a certain number of arguments. Although, checking if it is exact is something I haven't done.

    This, well I don't know if I should use this--

    --

    ...nvm.

    --

    if(args[0].ignoreCase("some command text here"){/... =//yay?

    --

    Oh, and one more thing.
    How do I check for a STRING instead of an argument?
    The syntax for either kick/ban is /iban kick:ban <reason>

    Making it check for an argument would check for one word only, if I'm not mistaken.

    Show Spoiler

    Code:
    package xemi.plugins.iBanU;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.*;
    import org.bukkit.entity.Player;
     
    public class iBanUCommandExecutor implements CommandExecutor {
    private iBanU plugin;
     
    public iBanUCommandExecutor(iBanU plugin) {
    this.plugin = plugin;
    }
     
    public boolean onCommand(CommandSender cs, Command cmd, String alias, String[] args){
    Player targetP = (Bukkit.getServer().getPlayer(args[2]));
    if(cmd.getName().equalsIgnoreCase("iban")){
    if(args.length == 0){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.BLUE + " Trying to get help?");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.BLUE + " Syntax: /iban help <page>");
    return true;
    } else if(args[1].equalsIgnoreCase("help") || (args[1].equalsIgnoreCase("help") && args[2] == "1")){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.BLUE + " Command Index: Page 1 of 2");
    cs.sendMessage(ChatColor.BLUE + "help - Shows this help index.");
    cs.sendMessage(ChatColor.BLUE + "checkIP - Shows the IP of the specified player.");
    cs.sendMessage(ChatColor.BLUE + "ban - Bans the player.");
    cs.sendMessage(ChatColor.BLUE + "pipban - Bans the player's name and IP.");
    cs.sendMessage(ChatColor.BLUE + "purge - Resets player/IP ban data.");
    return true;
    } else if(args[1].equalsIgnoreCase("help") && args[2] == "2"){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.BLUE + " Command Index: Page 2 of 2");
    cs.sendMessage(ChatColor.BLUE + "reload - Reloads iBanU's configuration.");
    return true;
    } else if(args[1] == "ban"){
    if(args.length > 3){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Too many parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban ban <player> <reason>");
    return true;
    } else if(args.length < 3){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Not enough parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban ban <player> <reason>");
    return true;
    } if(cs.hasPermission("ibanu.ban") && args.length == 3){
    //add target player to bans.yml
    if(targetP == null){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.YELLOW + args[2] + ChatColor.GRAY + " not found online. Skipping kick sequence.");
    } else {
    targetP.kickPlayer(args[3]);
    }
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.GRAY + "Banned player " + ChatColor.YELLOW + args[2] + ChatColor.GRAY + " for " + ChatColor.YELLOW + args[1] );
    return true;
    } else {
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Unauthorized.");
    return true;
    }
    } else if(args[1].equalsIgnoreCase("checkip")){
    if(args.length < 2){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Not enough parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban checkip <player>");
    return true;
    } else if(args.length > 2){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Too many parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban checkip <player>");
    return true;
    }else if(cs.hasPermission("ibanu.cip") && args.length == 2){
    //add code to check ip
    cs.sendMessage("This command is not available yet.");
    }
    } else if(args[1] == "kick"){
    if(args.length < 3){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Not enough parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban checkip <player>");
    return true;
    } else if(args.length > 3){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Too many parameters.");
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "]" + ChatColor.DARK_RED + "Syntax: /iban checkip <player>");
    return true;
    } else if(cs.hasPermission("ibanu.kick") && args.length == 3){
    if(targetP == null){
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "] " + ChatColor.YELLOW + args[2] + ChatColor.DARK_RED + " is not online!");
    return true;
    } else {
    targetP.kickPlayer(args[3]);
    cs.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "iBanU" + ChatColor.DARK_GREEN + "] " + ChatColor.YELLOW + args[2] + ChatColor.DARK_RED + " kicked.");
    return true;
    }
    } else {
     
    }
    }
    }
    return true;
    }
    }
    

    Edited code. No avail. [facewall]

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 25, 2016
Thread Status:
Not open for further replies.

Share This Page