Solved if(!target.hasPlayedBefore()) doesn't work

Discussion in 'Plugin Development' started by jonasXDD, Jan 27, 2013.

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

    jonasXDD

    Hello,
    I have a problem with the .hasPlayedBefore() - method.

    Code:
                            if(!target.hasPlayedBefore())                 //In my code is this line 83
                            {
                                sender.sendMessage("This player has been here.");
                            }else
                                {
                                    sender.sendMessage("This player has not been here");
                                }
    The if-method works,
    but the else-method doesn't works and in the console displays an error:

    Code:
    2013-01-27 09:51:53 [WARNING] Unexpected exception while parsing console command "vip add jonasXDD"
    org.bukkit.command.CommandException: Unhandled exception executing command 'vip' in plugin VIP v1.4.7a
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:186)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchCommand(CraftServer.java:514)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchServerCommand(CraftServer.java:506)
        at net.minecraft.server.v1_4_R1.DedicatedServer.al(DedicatedServer.java:260)
        at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:225)
        at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
        at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
        at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.NullPointerException
        at de.jonasXDD.VIP.Commands.onCommand(Commands.java:83)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
        ... 8 more
     
  2. Offline

    CorrieKay

    post the entire class please, "target" is null.
     
  3. Offline

    jonasXDD

    here is the class:
    Code:
    package de.jonasXDD.VIP;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    import de.jonasXDD.VIP.VIP;
     
    public class Commands implements CommandExecutor
    {
     
       
        public VIP plugin;
     
        Player target;
       
        public Commands(VIP plugin)
        {
            this.plugin = plugin;
            this.plugin.getCommand("vip").setExecutor(this);
        }
     
     
        public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args)
        {
    //    /vip       
            if(cmd.getName().equalsIgnoreCase("vip"))
            {
               
                if(args.length == 0)
                {
                    sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_wrong_arguments.replaceAll("&", "§"));
                return true;
                }
               
    //    /vip reload           
                if(args[0].equalsIgnoreCase("reload"))
                {
                    if(sender.hasPermission("vip.reload"))
                    {
                        this.plugin.Config.loadConfig();
    //                    this.plugin.memory.loadMemory();
                        this.plugin.Messages.loadMessages();
                        sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.command_reload.replaceAll("&", "§"));
                    }else
                        {
                            sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_no_permission.replaceAll("&", "§"));
                        }
                }
               
    //    /vip help           
                if(args[0].equalsIgnoreCase("help"))
                {
                    sender.sendMessage(ChatColor.GOLD + "[=====] VIP - Commands [=====]");
                    sender.sendMessage("");
                }
               
    //    /vip getversion           
                if((args[0].equalsIgnoreCase("getversion")) || (args[0].equalsIgnoreCase("getv")))
                {
                    if(sender.hasPermission("vip.getversion"))
                    {
                        this.plugin.Update.getVersion(sender);
                    }else
                        {
                            sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_no_permission.replaceAll("&", "§"));
                        }
                }
               
    //    /vip add           
                if(args[0].equalsIgnoreCase("add"))
                {           
                target = this.plugin.getServer().getPlayer(args[1]);
                   
                    if(args.length == 2)
                    {
                       
                        if(sender.hasPermission("vip.add"))
                        {
                           
    /*here is the error(line83)*/   if(!target.hasPlayedBefore())
                            {
                                sender.sendMessage("This player has been here.");
                            }else
                                {
                                    sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_target_has_not_played_before.replaceAll("&", "§").replaceAll("<target>", target.getName()));
                                }
                           
                        }else
                            {
                                sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_no_permission.replaceAll("&", "§"));
                            }
                       
                    }else
                        {
                            sender.sendMessage(this.plugin.Messages.vip_prefix.replaceAll("&", "§") + this.plugin.Messages.error_wrong_arguments.replaceAll("&", "§"));
                        }
                   
                }
            return true;
            }
           
           
        return false;
        }
       
     
    }
     
  4. Offline

    CorrieKay

    This method returns only a player object. That means that the player has to be online. Check your spelling on the players name, and make sure they are logged into the server.
    Also, you need to do a null check, because it will return null if the player is offline. Otherwise, this exception gets thrown.
     
  5. Offline

    jonasXDD

    The target does not need to be online, but target ever been on the server.
     
  6. Offline

    CorrieKay

    The method youre using only returns players who are online. Use Bukkit.getOfflinePlayer(String) in that case.
     
  7. Offline

    JayzaSapphire

    The code works correct? Becuase the way i see it is that you have reversed the messages, remove the '!' infront of the player has played before.
     
  8. Offline

    jonasXDD

    So?
    Code:
                            String Player = null;
                            if(Bukkit.getOfflinePlayer(Player) != null)
                            {
                                sender.sendMessage("This player has been here.");
                            }else
                                {
                                    sender.sendMessage("This player has never been on this server");
                                }
     
  9. Offline

    CorrieKay

    nono, grab the offline player, and check if theyve played before. it has the same methods.

    OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
    if(target.hasPlayedBefore()){
    //has played
    } else {
    //hasnt played
    }

    getOfflinePlayer will never return null, thats why it can check if the player has or hasnt played before.
     
  10. Offline

    jonasXDD

    Code:
                            if(target.hasPlayedBefore())
                            {
                                sender.sendMessage("This player has been here.");
                            }else
                                {
                                    sender.sendMessage("This player has never been on this server");
                                }
    Player never been on the server:
    Code:
    2013-01-27 10:40:09 [WARNING] Unexpected exception while parsing console command "vip add jonasXDD"
    org.bukkit.command.CommandException: Unhandled exception executing command 'vip' in plugin VIP v1.4.7a
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:186)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchCommand(CraftServer.java:514)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchServerCommand(CraftServer.java:506)
        at net.minecraft.server.v1_4_R1.DedicatedServer.al(DedicatedServer.java:260)
        at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:225)
        at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
        at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
        at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.NullPointerException
        at de.jonasXDD.VIP.Commands.onCommand(Commands.java:83)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
        ... 8 more
    Player was on the Server:
    Code:
    sender.sendMessage("This player has never been on this server");
    Code:
                            OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
                            if(target.hasPlayedBefore())
                            {
                                sender.sendMessage("This player has been here.");
                            }else
                                {
                                    sender.sendMessage("This player hasn't been here.");
                                }
    The target hasn't played before: "This player hasn't been here."
    The target is on th server: : "This player hasn't been here."

    It doesn't works :(, but the errors are gone :D

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

Share This Page