Solved Unable to get UUID of offline player

Discussion in 'Plugin Development' started by kampai, Jul 1, 2016.

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

    kampai

    The error is nullpointer
    Code:
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
                if(cmd.getName().equalsIgnoreCase("ores")){   
                    if (args.length == 0) {
                       
                    Player player = (Player) sender;
                   
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                    player.sendMessage("" + ChatColor.LIGHT_PURPLE + player.getName() + "'s " + "ores.");
                    player.sendMessage(ChatColor.AQUA + "Diamond ore: " + ChatColor.WHITE + diamonds.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.RED + "Redstone ore: " + ChatColor.WHITE + redstone.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GREEN + "Emerald ore: " + ChatColor.WHITE + emerald.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GOLD + "Gold ore: " + ChatColor.WHITE + gold.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GRAY + "Iron ore: " + ChatColor.WHITE + iron.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.DARK_GRAY + "Coal ore: " + ChatColor.WHITE + coal.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.BLUE + "Lapis ore: " + ChatColor.WHITE + lapis.get(player.getUniqueId()));
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                   
                    return true;
                       
                }
                    Player player2 = Bukkit.getServer().getPlayer(args[0]);
                        OfflinePlayer op = Bukkit.getOfflinePlayer(player2.getName());
                        if(player2 == null)
                        if (!getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.DARK_RED + "USER DOES NOT EXIST");
                            return true;
             
                    }
                        if(player2 == null) {
                        if (getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.GREEN + "DOES EXIST");
                            return true;
                        }
                   
                    sender.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                    sender.sendMessage("" + ChatColor.LIGHT_PURPLE + player2.getName() + "'s " + "ores");
                    sender.sendMessage(ChatColor.AQUA + "Diamond ore: " + ChatColor.WHITE + diamonds.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.RED + "Redstone ore: " + ChatColor.WHITE + redstone.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.GREEN + "Emerald ore: " + ChatColor.WHITE + emerald.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.GOLD + "Gold ore: " + ChatColor.WHITE + gold.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.GRAY + "Iron ore: " + ChatColor.WHITE + iron.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.DARK_GRAY + "Coal ore: " + ChatColor.WHITE + coal.get(player2.getUniqueId()));
                    sender.sendMessage(ChatColor.BLUE + "Lapis ore: " + ChatColor.WHITE + lapis.get(player2.getUniqueId()));
                    sender.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
    
                }
    
                }
                return false;
                }
                    
     
  2. Offline

    Esophose

    @kampai
    On what line is the NPE?

    Make sure to check if the sender is an instance of a player on line 5 or else you could throw a class cast exception.
     
  3. Offline

    Jakeeeee

    1. You are checking if 'player2' is null, twice. Do not use 'args[0]' to define a Player object because it will return null if they are not online.
    2. If player2 is null they are not on the server.
    3. Cast 'args[0]' as an offline player then if they're null they never joined. If it isn't null they can be A) Online B) Offline.
     
  4. Offline

    kampai

    @Esophose
    http://pastebin.com/i28wDvn0
    @Jakeeeee
    When I try to add a cast to [args0] it says error, then wants me to change the cast to (Player), and what should I use instead of args[0] since the player typing the command wants to look up the players that are online and offline.
    Current Code
    Code:
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
                if(cmd.getName().equalsIgnoreCase("ores")){   
                    if (args.length == 0) {
                       
                    if(sender instanceof Player) {
                    Player player = (Player) sender;
                   
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                    player.sendMessage("" + ChatColor.LIGHT_PURPLE + player.getName() + "'s " + "ores.");
                    player.sendMessage(ChatColor.AQUA + "Diamond ore: " + ChatColor.WHITE + diamonds.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.RED + "Redstone ore: " + ChatColor.WHITE + redstone.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GREEN + "Emerald ore: " + ChatColor.WHITE + emerald.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GOLD + "Gold ore: " + ChatColor.WHITE + gold.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GRAY + "Iron ore: " + ChatColor.WHITE + iron.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.DARK_GRAY + "Coal ore: " + ChatColor.WHITE + coal.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.BLUE + "Lapis ore: " + ChatColor.WHITE + lapis.get(player.getUniqueId()));
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                   
                    return true;
                       
                }
                    Player player2 = (OfflinePlayer) Bukkit.getServer().getPlayer(args[0]);
                        OfflinePlayer op = Bukkit.getOfflinePlayer(player2.getName());
                        if(player2 == null) {
                        if (!getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.DARK_RED + "USER DOES NOT EXIST");
                            return true;
             
                    }
                        if (getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.GREEN + "DOES EXIST");
                            return true;
                        }
    (Error when i try to cast OfflinePlayer)
     
  5. Offline

    Jakeeeee

    You are casting an OfflinePlayer to and OnlinePlayer. All that needs to be said. You don't need the 'player2' variable. Cast 'args[0]' to an offlineplayer like you already did through the #getOfflinePlayer function.
     
  6. Offline

    kampai

    Here's my code now
    Code:
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
                if(cmd.getName().equalsIgnoreCase("ores")){   
                    if (args.length == 0) {
                       
                    if(sender instanceof Player) {
                    Player player = (Player) sender;
                   
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                    player.sendMessage("" + ChatColor.LIGHT_PURPLE + player.getName() + "'s " + "ores.");
                    player.sendMessage(ChatColor.AQUA + "Diamond ore: " + ChatColor.WHITE + diamonds.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.RED + "Redstone ore: " + ChatColor.WHITE + redstone.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GREEN + "Emerald ore: " + ChatColor.WHITE + emerald.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GOLD + "Gold ore: " + ChatColor.WHITE + gold.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.GRAY + "Iron ore: " + ChatColor.WHITE + iron.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.DARK_GRAY + "Coal ore: " + ChatColor.WHITE + coal.get(player.getUniqueId()));
                    player.sendMessage(ChatColor.BLUE + "Lapis ore: " + ChatColor.WHITE + lapis.get(player.getUniqueId()));
                    player.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                   
                    return true;
                       
                }
                        OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]);
                        if (!getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.DARK_RED + "USER DOES NOT EXIST");
                            return true;
             
                    }
                        if (getConfig().contains(op.getUniqueId().toString())) { 
                            sender.sendMessage(ChatColor.GREEN + "DOES EXIST");
                            return true;
                        }
                   
                    sender.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
                    sender.sendMessage("" + ChatColor.LIGHT_PURPLE + op.getName() + "'s " + "ores");
                    sender.sendMessage(ChatColor.AQUA + "Diamond ore: " + ChatColor.WHITE + diamonds.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.RED + "Redstone ore: " + ChatColor.WHITE + redstone.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.GREEN + "Emerald ore: " + ChatColor.WHITE + emerald.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.GOLD + "Gold ore: " + ChatColor.WHITE + gold.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.GRAY + "Iron ore: " + ChatColor.WHITE + iron.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.DARK_GRAY + "Coal ore: " + ChatColor.WHITE + coal.get(op.getUniqueId()));
                    sender.sendMessage(ChatColor.BLUE + "Lapis ore: " + ChatColor.WHITE + lapis.get(op.getUniqueId()));
                    sender.sendMessage("" + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + "---/---/----HCFHQ----/-----/---");
    
                }
    
                    }
               
                return false;
                }
                    
    I still get the same error, I'm able to check through online players but still it doesnt tell me if offline players are in the config or not
     
  7. Offline

    Zombie_Striker

    Take another look at what you're doing. If there are not args, get the arg that does not exist and turn that arg that does not exist into a player.

    [Edit] realized this might not have been intentional. You should watch your encapsulation. Before you create the op variable, add a "return true;" line, add an end bracket,, and go down to the bottom of the onCommand and remove an end bracket. That should fix your problem
     
Thread Status:
Not open for further replies.

Share This Page