Solved /kill internal error

Discussion in 'Plugin Development' started by TheFl4me, Feb 20, 2015.

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

    TheFl4me

    I am currently trying to code the /kill command wich if you only do /kill will kill yourself or if you enter a player name behind (/kill playername) will kill that specified player.

    My problem is that every time i do /kill without a player name it causes a internal error but if i enter a playername everything works fine.

    Here the class:

    Code:
    package KitPvP;
    
    import Main.Main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    public class Kill implements CommandExecutor {
     
        @SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
         
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                Player z = Bukkit.getPlayer(args[0]);
                if (cmd.getName().equalsIgnoreCase("kill")) {
                    if(args.length == 0) {
                        p.sendMessage("§cUsage: /kill [player]");
                    }
                    if(args.length == 1) {
                        if(z == null) {
                            p.sendMessage(Main.notarget);
                            return true;
                        }
                        if(z.hasPermission("kitpvp.kill.bypass")) {
                            p.sendMessage("§cYou cannot kill this player");
                        }
                        else {
                            z.setHealth(0);
                            z.sendMessage("§4You have been killed by " + p.getName());
                        }
                    }
                    if(args.length > 1) {
                        p.sendMessage("§cUsage: /kill [player]");
                    }
                }
                return true;
            }
            Player p = (Player) sender;
            Player z = Bukkit.getPlayer(args[0]);
            if (cmd.getName().equalsIgnoreCase("kill")) {
                if(p.hasPermission("kitpvp.kill")) {
                    if(args.length == 0) {
                        p.setHealth(0);
                    }
                    else if(args.length == 1) {
                        if(z == null) {
                            p.sendMessage(Main.notarget);
                            return true;
                        }
                        if(p.hasPermission("kitpvp.kill.others")) {
                            if(z.hasPermission("kitpvp.kill.bypass")) {
                                p.sendMessage("§cYou cannot kill this player");
                            }
                            else {
                                z.setHealth(0);
                                z.sendMessage("§4You have been killed by " + p.getDisplayName());
                            }
                        }
                        else {
                            p.sendMessage(Main.noperm);
                        }
                    }
                    else if(args.length > 1) {
                        p.sendMessage("§cUsage: /kill <player>");
                    }
                }
                else {
                    p.sendMessage(Main.noperm);
                } 
            }
            return true;
        }
    }
    Thank you for helping me in advanced
     

    Attached Files:

  2. Offline

    Tecno_Wizard

    @TheFl4me, your problem is pretty easy, I don't even need the stack trace for that.
    You are trying to get a player using Bukkit.getPlayer regardless of whether or not args[0] is null.
     
  3. Offline

    ProMCKingz

    @TheFl4me
    Make a null checker for Bukkit.getPlayer
     
  4. Offline

    TheFl4me

    could you give me an example please?
     
  5. Offline

    caderape

    @TheFl4me
    You don't need an example. You're checking args[0] before to check the args lenth.
    so if you just do /kill, u get an error.
     
  6. Offline

    candyfloss20

    @TheFl4me
    Here is a example from the plugin i'm working on right now (Sorry its not Bukkit but should give you the basic idea)
    Code:
                if (args.length != 1) {
                    p.sendMessage(new TextComponent("§4§l>> §cPlease enter a username!"));
                }
                else {
                    ProxiedPlayer t = ProxyServer.getInstance().getPlayer(args[0]);
                    p.sendMessage(new TextComponent("§6§l>> §5Attempting to locate §d§l"+args[0]));
    
                    if (t != null) {
                        Server server = t.getServer();
                        p.sendMessage(new TextComponent("§6§l>> §d§l"+t.getName()+"§5 was found on server §d§l"+server.getInfo().getName()+"§5!"));
                    }
                    else {
                        p.sendMessage(new TextComponent("§4§l>> §cFailed to locate §l"+args[0]+"§c! Are they online?"));
                    }
                }
     
  7. Offline

    TheFl4me

    Thank you alot :)
     
  8. Offline

    Tecno_Wizard

Thread Status:
Not open for further replies.

Share This Page