| 
					
				 | 
			
			
				@@ -4,8 +4,6 @@ import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Set; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.bukkit.scoreboard.Scoreboard; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.mcMMO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.config.Config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.config.experience.ExperienceConfig; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,20 +21,19 @@ public class PlayerProfile { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* HUDs */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private MobHealthbarType mobHealthbarType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private Scoreboard playerStatsScoreboard; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* Skill Data */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final Map<SkillType, Integer>   skills     = new HashMap<SkillType, Integer>();   // Skill & Level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final Map<SkillType, Float>     skillsXp   = new HashMap<SkillType, Float>();     // Skill & XP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private final Map<AbilityType, Integer> skillsDATS = new HashMap<AbilityType, Integer>(); // Ability & Cooldown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final Map<AbilityType, Integer> abilityDATS = new HashMap<AbilityType, Integer>(); // Ability & Cooldown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public PlayerProfile(String playerName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.playerName = playerName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mobHealthbarType = Config.getInstance().getMobHealthbarDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (AbilityType abilityType : AbilityType.values()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            skillsDATS.put(abilityType, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (AbilityType abilityType : AbilityType.NORMAL_ABILITIES) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            abilityDATS.put(abilityType, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (SkillType skillType : SkillType.NON_CHILD_SKILLS) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,13 +51,12 @@ public class PlayerProfile { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Calling this constructor is considered loading the profile. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public PlayerProfile(String playerName, Map<SkillType, Integer> argSkills, Map<SkillType, Float> argSkillsXp, Map<AbilityType, Integer> argSkillsDats, MobHealthbarType mobHealthbarType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this(playerName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.playerName = playerName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.mobHealthbarType = mobHealthbarType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.skills.putAll(argSkills); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.skillsXp.putAll(argSkillsXp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.skillsDATS.putAll(argSkillsDats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skills.putAll(argSkills); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skillsXp.putAll(argSkillsXp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        abilityDATS.putAll(argSkillsDats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         loaded = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,6 +67,7 @@ public class PlayerProfile { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = !mcMMO.getDatabaseManager().saveUser(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             mcMMO.p.getLogger().warning("PlayerProfile for " + playerName + " failed to save"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -96,54 +93,40 @@ public class PlayerProfile { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.mobHealthbarType = mobHealthbarType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Scoreboards 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public Scoreboard getPlayerStatsScoreboard() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return playerStatsScoreboard; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void setPlayerStatsScoreboard(Scoreboard statsScoreboard) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.playerStatsScoreboard = statsScoreboard; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Cooldowns 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Get the current DATS of a skill. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Get the current deactivation timestamp of an ability. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param abilityType Ability to get the DATS for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @return the DATS for the ability 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param ability The {@link AbilityType} to get the DATS for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return the deactivation timestamp for the ability 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public long getSkillDATS(AbilityType abilityType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return skillsDATS.get(abilityType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public long getAbilityDATS(AbilityType ability) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return abilityDATS.get(ability); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Set the current DATS of a skill. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Set the current deactivation timestamp of an ability. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     *  @param abilityType Ability to set the DATS for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param ability The {@link AbilityType} to set the DATS for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param DATS the DATS of the ability 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void setSkillDATS(AbilityType abilityType, long DATS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int wearsOff = (int) (DATS * .001D); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setAbilityDATS(AbilityType ability, long DATS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsDATS.put(abilityType, wearsOff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        abilityDATS.put(ability, (int) (DATS * .001D)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Reset all skill cooldowns. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Reset all ability cooldowns. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void resetCooldowns() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (AbilityType ability : skillsDATS.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            skillsDATS.put(ability, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (AbilityType ability : abilityDATS.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            abilityDATS.put(ability, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -151,96 +134,102 @@ public class PlayerProfile { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Xp Functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public int getSkillLevel(SkillType skillType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return skillType.isChildSkill() ? getChildSkillLevel(skillType) : skills.get(skillType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int getSkillLevel(SkillType skill) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return skill.isChildSkill() ? getChildSkillLevel(skill) : skills.get(skill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public float getSkillXpLevelRaw(SkillType skillType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return skillsXp.get(skillType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public float getSkillXpLevelRaw(SkillType skill) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return skillsXp.get(skill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public int getSkillXpLevel(SkillType skillType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return (int) Math.floor(getSkillXpLevelRaw(skillType)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int getSkillXpLevel(SkillType skill) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return (int) Math.floor(getSkillXpLevelRaw(skill)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void setSkillXpLevel(SkillType skillType, float newValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (skillType.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setSkillXpLevel(SkillType skill, float xpLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (skill.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsXp.put(skillType, newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skillsXp.put(skill, xpLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void skillUp(SkillType skillType, int newValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skills.put(skillType, skills.get(skillType) + newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public float levelUp(SkillType skill) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        float xpRemoved = getXpToLevel(skill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skills.put(skill, skills.get(skill) + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skillsXp.put(skill, skillsXp.get(skill) - xpRemoved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return xpRemoved; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Remove Xp from a skill. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param skillType Type of skill to modify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param skill Type of skill to modify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param xp Amount of xp to remove 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void removeXp(SkillType skillType, int xp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (skillType.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void removeXp(SkillType skill, int xp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (skill.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsXp.put(skillType, skillsXp.get(skillType) - xp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skillsXp.put(skill, skillsXp.get(skill) - xp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Modify a skill level. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param skillType Type of skill to modify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param newValue New level value for the skill 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param skill Type of skill to modify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param level New level value for the skill 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void modifySkill(SkillType skillType, int newValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (skillType.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void modifySkill(SkillType skill, int level) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (skill.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skills.put(skillType, newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsXp.put(skillType, 0F); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skills.put(skill, level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skillsXp.put(skill, 0F); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Add levels to a skill. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param skillType Type of skill to add levels to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param skill Type of skill to add levels to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param levels Number of levels to add 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void addLevels(SkillType skillType, int levels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (skillType.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skills.put(skillType, skills.get(skillType) + levels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsXp.put(skillType, 0F); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void addLevels(SkillType skill, int levels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        modifySkill(skill, skills.get(skill) + levels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Add Experience to a skill. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param skillType Type of skill to add experience to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param skill Type of skill to add experience to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param experience Number of experience to add 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void addExperience(SkillType skillType, int experience) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (skillType.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void addExperience(SkillType skill, float experience) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillsXp.put(skillType, skillsXp.get(skillType) + experience); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (skill.isChildSkill()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<SkillType> parentSkills = FamilyTree.getParents(skill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            float dividedXP = (experience / parentSkills.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (SkillType parentSkill : parentSkills) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                skillsXp.put(parentSkill, skillsXp.get(parentSkill) + dividedXP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            skillsXp.put(skill, skillsXp.get(skill) + experience); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 |