private void addPlayerExp(CommandSender s, String[] a) {
        if(!checkCondition(s, a, "addexp", "Exp"))
            return;
        
        String jobName = McJobs.getPlugin().getLanguage().getJobNameByLangName(a[2], getPlayerLanguage(s));
        String oldRank = Leveler.getRank(PlayerCache.getJobLevel(a[1], jobName));
        double giveExp = Double.parseDouble(a[3]);
        boolean again = true;
        
        while(again) {
            double needToLvUp = Leveler.getXPtoLevel(PlayerCache.getJobLevel(a[1], jobName))-PlayerCache.getJobExp(a[1], jobName);
            if(needToLvUp > giveExp) {
                PlayerCache.addExp(a[1], jobName, giveExp);
                again = false;
            } else {
                PlayerCache.addLevels(a[1], jobName, 1);
                giveExp -= needToLvUp;
            }
        }
        
        String newRank = Leveler.getRank(PlayerCache.getJobLevel(a[1], jobName));
        
        if(Bukkit.getPlayer(a[1]) != null) {
            Player p = Bukkit.getPlayer(a[1]);
            String pLang = PlayerCache.getLang(p.getName());
            p.sendMessage(ChatColor.GRAY + _modText.getExperience("padded_exp", pLang).addVariables(_modText.getJobNameInLang(jobName, pLang), p.getName(), String.valueOf(PlayerCache.getJobLevel(a[1], jobName))));
            if(!newRank.equalsIgnoreCase(oldRank)) {
                PlayerCache.resetJobRank(a[1], jobName);
                p.sendMessage(_modText.getExperience("rank", pLang).addVariables(_modText.getJobNameInLang(jobName, pLang), p.getName(), _modText.getJobRank(newRank, pLang)));
            }
        } else
            PlayerCache.savePlayerCache(a[1]);
        s.sendMessage(ChatColor.GRAY + _modText.getExperience("added_exp", getPlayerLanguage(s)).addVariables(_modText.getJobNameInLang(jobName, getPlayerLanguage(s)), s.getName(), String.valueOf(PlayerCache.getJobLevel(a[1], jobName))));
    }