public static boolean addExp(String player, String job, double amount) {
        PlayerCache checkPlayer = getPlayerCache(player);
        if(checkPlayer._jobexp.containsKey(job)) {
            double value = checkPlayer._jobexp.get(job) + amount;
            Integer level = checkPlayer._joblevel.get(job);
            if(Leveler.getXPtoLevel(level) <= value) {
                while (Leveler.getXPtoLevel(level) <= value) {
                    value -= Leveler.getXPtoLevel(level);
          
                    level = Integer.valueOf(level + 1);
                    String rank = Leveler.getRank(level);
          
                    checkPlayer._jobexp.put(job, Double.valueOf(value));
                    checkPlayer._joblevel.put(job, level);
                    if(!checkPlayer._jobrank.get(job).equalsIgnoreCase(rank)) {
                        checkPlayer._jobrank.put(job, rank);
                        if(Bukkit.getPlayer(player) != null)
                            Bukkit.getPlayer(player).sendMessage(McJobs.getPlugin().getLanguage().getExperience("rank", checkPlayer._playerLang).addVariables(McJobs.getPlugin().getLanguage().getJobNameInLang(job, checkPlayer._playerLang), player, McJobs.getPlugin().getLanguage().getJobRank(rank, checkPlayer._playerLang)));
                    }
                    if(Bukkit.getPlayer(player) != null)
                        Bukkit.getPlayer(player).sendMessage(McJobs.getPlugin().getLanguage().getExperience("level", checkPlayer._playerLang).addVariables(McJobs.getPlugin().getLanguage().getJobNameInLang(job, checkPlayer._playerLang), player, level.toString()));
                }
                savePlayerCache(player);
            } else {
                checkPlayer._jobexp.put(job, Double.valueOf(value));
            }
            return true;
        }
        return false;
    }