[SOLVED]Problem with args

Discussion in 'Plugin Development' started by maglite, Jul 7, 2011.

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

    maglite

    Hey everyone, i have a problem with my command. When i type : "/tot" it says an internal error occurred... and this is in the consol:
    Code:
    org.bukkit.command.CommandException: Unhandled exception executing command 'tot' in plugin y00u v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:37)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:129)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:298)
        at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:711)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:676)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:669)
        at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:84)
        at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
        at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:451)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:361)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at me.maglite.y00u.y00u.onCommand(y00u.java:130)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:35)
        ... 12 more
    
    but when i type "/tot magl1te" then i will kill. But why the Erro when i type "/tot"?
    My Command:
    Code:
             if (cmd.getName().equalsIgnoreCase("tot"))
            {
    
     
    
                if(args.length == 0){
                    p.setHealth(0);
    
                }
                if(args.length == 1){
                    Player player2 = getServer().getPlayer(args[0]);
    
                    player2.setHealth(0);
     
                    player2.sendMessage("You have been killed by " + p.getName() + ".");
                }      
    Please help me, thanks(sorry for my bad english, i am from germany)
     
  2. Offline

    krinsdeath

    Is this in onCommand? If so, it needs to return a value (true on success, false on failure)

    Furthermore, you should check for the existence of the player specified as the argument before attempting to set their health:

    Code:
    if (args.length == 1) {
      Player player2 = (getServer().getPlayer(args[0]) instanceof Player) ? getServer().getPlayer(args[0]) : null;
      if (player2 == null) { player.sendMessage("invalid arguments"); return false; }
      // execute your kill code here
    }
    
     
  3. Offline

    maglite

    Thanks. But when i type "/tot" the error occurred. "/tot <name>" works fine! I want to whom I enter /tot, that I will be killed

    //EDIT: And yes, it is in onCommand.
    //EDIT2: onCommand:
    Code:
      public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) {
      
            Player p = (Player) sender;
    
            if (cmd.getName().equalsIgnoreCase("tot"))
            {
     
                if (args.length == 1) {
                      Player player2 = (getServer().getPlayer(args[0]) instanceof Player) ? getServer().getPlayer(args[0]) : null;
                      if (player2 == null) { p.sendMessage("invalid arguments"); return false; }
                        Player player4 = getServer().getPlayer(args[0]);
    
                        player4.setHealth(0);
     
                        player4.sendMessage("You have been killed by " + p.getName() + ".");
                    }
                if(args.length == 0){
                    p.setHealth(0);
    
                }
     
                return true;
            }
    
            return false;
        }
     
  4. Offline

    JorganPubshire

    Code:
             if (cmd.getName().equalsIgnoreCase("tot"))
            {
    
    
    
                if(args.length == 0){
                    p.setHealth(0);
                    return true;
                }
                if(args.length == 1){
                    Player player2 = getServer().getPlayer(args[0]);
    
                    player2.setHealth(0);
    
                    player2.sendMessage("You have been killed by " + p.getName() + ".");
                }      
    Try that. All I did was added "return true;" below the p.setHealth(0);
     
  5. Offline

    maglite

    Thanks :D It works.

    Wounderful Community.
    Code:
     return true;
    that it was.

    //EDIT: Okay here the same Problem, why? I have the Permissions.
    //EDIT2: Okay solved. :')
    Code:
             if (cmd.getName().equalsIgnoreCase("heal"))
            {
    
    
                if (canUseAdminHeal((Player) sender)) {
                String root = "variable.heal";
                String user = args[0];
                Player userp = this.getServer().getPlayer(user);
                if ( args.length == 0 )
                {
                    p.setHealth( 20 );
                    p.sendMessage( ChatColor.AQUA + "[y00uBasic] Du hast dich geheilt." );
                    return true;
                }
    
                if (args.length == 1) {
                      Player player2 = (getServer().getPlayer(args[0]) instanceof Player) ? getServer().getPlayer(args[0]) : null;
                      if (player2 == null) { p.sendMessage("invalid arguments"); return false; }
                    //Player target = (Player) this.getServer().getPlayer( args[0] );
     
                    userp.setHealth( 20 );
                    userp.sendMessage( ChatColor.AQUA + "[y00uBasic] Du wurdest von " + ((Player)sender).getName() + "geheilt." );
                    p.sendMessage("[y00uBasic] Du hast" + userp + "geheilt.");
    
                }
     
                config.setProperty( root, (healed + 1) );
                config.save();
                } else {
                    Player s = (Player) sender;
                    s.sendMessage(ChatColor.RED + "You don't have permisson to do that.");
                    p.sendMessage("");
                }
                return true;
            }
     
Thread Status:
Not open for further replies.

Share This Page