| 
					
				 | 
			
			
				@@ -6,7 +6,6 @@ import com.gmail.nossr50.datatypes.database.DatabaseType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.database.PlayerStat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.database.UpgradeType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.player.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.gmail.nossr50.datatypes.skills.CoreSkills; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.skills.PrimarySkillType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.skills.SuperAbilityType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.mcMMO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,8 +21,6 @@ import com.neetgames.mcmmo.exceptions.ProfileRetrievalException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.neetgames.mcmmo.player.MMOPlayerData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.neetgames.mcmmo.skill.RootSkill; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.neetgames.mcmmo.skill.SkillBossBarState; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.neetgames.mcmmo.skill.SuperSkill; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import it.unimi.dsi.fastutil.Hash; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang.NullArgumentException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.bukkit.OfflinePlayer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.bukkit.entity.Player; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,6 +32,7 @@ import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static final String FLATFILE_SPLIT_CHARACTER_REGEX = ":"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static final String NULL_VALUE = NULL_VALUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final HashMap<RootSkill, List<PlayerStat>> playerStatHash = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final List<PlayerStat> powerLevels = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private long lastUpdate = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,7 +69,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 while ((line = in.readLine()) != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     String[] character = line.split(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Map<RootSkill, Integer> skills = getSkillMapFromLine(character); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Map<PrimarySkillType, Integer> skills = getSkillMapFromLine(character); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     boolean powerless = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (int skill : skills.values()) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -256,11 +254,6 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return worked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void removeCache(@NotNull UUID uuid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //Not used in FlatFile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public boolean saveUser(@NotNull MMODataSnapshot dataSnapshot) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String playerName = dataSnapshot.getPlayerName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UUID uuid = dataSnapshot.getPlayerUUID(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -330,35 +323,35 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void writeUserToLine(@NotNull MMODataSnapshot mmoDataSnapshot, @NotNull String playerName, @NotNull UUID uuid, @NotNull StringBuilder writer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ImmutableMap<RootSkill, Integer> primarySkillLevelMap = mmoDataSnapshot.getSkillLevelValues(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ImmutableMap<RootSkill, Float> primarySkillExperienceValueMap = mmoDataSnapshot.getSkillExperienceValues(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ImmutableMap<PrimarySkillType, Integer> primarySkillLevelMap = mmoDataSnapshot.getSkillLevelValues(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ImmutableMap<PrimarySkillType, Float> primarySkillExperienceValueMap = mmoDataSnapshot.getSkillExperienceValues(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(playerName).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.MINING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.MINING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.MINING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.WOODCUTTING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.WOODCUTTING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.REPAIR_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.UNARMED_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.HERBALISM_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.EXCAVATION_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.ARCHERY_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.SWORDS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.AXES_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.ACROBATICS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.REPAIR_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.UNARMED_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.HERBALISM_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.EXCAVATION_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.ARCHERY_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.SWORDS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.AXES_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.ACROBATICS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.MINING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.WOODCUTTING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.WOODCUTTING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.REPAIR)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.UNARMED)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.HERBALISM)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.EXCAVATION)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.ARCHERY)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.SWORDS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.AXES)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.ACROBATICS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.REPAIR)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.UNARMED)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.HERBALISM)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.EXCAVATION)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.ARCHERY)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.SWORDS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.AXES)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.ACROBATICS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.TAMING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.TAMING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.TAMING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.TAMING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.BERSERK)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.GIGA_DRILL_BREAKER)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.TREE_FELLER)).append(":"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -367,17 +360,16 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.SKULL_SPLITTER)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.SUPER_BREAKER)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.FISHING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.FISHING_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.FISHING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.FISHING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append((int) mmoDataSnapshot.getAbilityDATS(SuperAbilityType.BLAST_MINING)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MobHealthBarType mobHealthbarType = mmoDataSnapshot.getMobHealthBarType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mobHealthbarType.toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(NULL_VALUE).append(":"); //Mob Health Bars are no longer based on player data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.ALCHEMY_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.ALCHEMY_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(uuid != null ? uuid.toString() : "NULL").append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.ALCHEMY)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.ALCHEMY)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(uuid != null ? uuid.toString() : NULL_VALUE).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(mmoDataSnapshot.getScoreboardTipsShown()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(mmoDataSnapshot.getUniqueData(UniqueDataType.CHIMAERA_WING_DATS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -405,29 +397,29 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             public static int BARSTATE_CROSSBOWS = 64; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.TRIDENTS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.TRIDENTS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillLevelMap.get(CoreSkills.CROSSBOWS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(primarySkillExperienceValueMap.get(CoreSkills.CROSSBOWS_CS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.TRIDENTS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.TRIDENTS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillLevelMap.get(PrimarySkillType.CROSSBOWS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(primarySkillExperienceValueMap.get(PrimarySkillType.CROSSBOWS)).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //XPBar States 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.ACROBATICS_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.ALCHEMY_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.ARCHERY_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.AXES_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.EXCAVATION_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.FISHING_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.HERBALISM_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.MINING_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.REPAIR_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.SALVAGE_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.SMELTING_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.SWORDS_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.TAMING_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.UNARMED_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.WOODCUTTING_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.TRIDENTS_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        writer.append(mmoDataSnapshot.getBarStateMap().get(CoreSkills.CROSSBOWS_CS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.ACROBATICS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.ALCHEMY).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.ARCHERY).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.AXES).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.EXCAVATION).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.FISHING).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.HERBALISM).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.MINING).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.REPAIR).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.SALVAGE).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.SMELTING).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.SWORDS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.TAMING).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.UNARMED).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.WOODCUTTING).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.TRIDENTS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        writer.append(mmoDataSnapshot.getBarStateMap().get(PrimarySkillType.CROSSBOWS).toString()).append(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(0).append(":"); //archery super 1 cd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         writer.append(0).append(":"); //xbow super 1 cd 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -448,13 +440,13 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public @NotNull Map<RootSkill, Integer> readRank(@NotNull String playerName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public @NotNull Map<PrimarySkillType, Integer> readRank(@NotNull String playerName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         updateLeaderboards(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<RootSkill, Integer> skills = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<PrimarySkillType, Integer> skills = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (RootSkill rootSkill : CoreSkills.getImmutableCoreRootSkillSet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(CoreSkills.isChildSkill(rootSkill)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (RootSkill rootSkill : PrimarySkillType.getImmutableCoreRootSkillSet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(PrimarySkillType.isChildSkill(rootSkill)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             skills.put(rootSkill, getPlayerRank(playerName, playerStatHash.get(rootSkill))); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -466,7 +458,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void insertNewUser(@NotNull String playerName, @NotNull UUID uuid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void newUser(@NotNull String playerName, @NotNull UUID uuid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BufferedWriter out = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         synchronized (fileWritingLock) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -517,7 +509,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 out.append(Config.getInstance().getMobHealthbarDefault().toString()).append(":"); // Mob Healthbar HUD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 out.append(startingLevel); // Alchemy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 out.append("0:"); // AlchemyXp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                out.append(uuid != null ? uuid.toString() : "NULL").append(":"); // UUID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                out.append(uuid != null ? uuid.toString() : NULL_VALUE).append(":"); // UUID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 out.append("0:"); // Scoreboard tips shown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 out.append("0:"); // Chimaera Wing Dats 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -809,23 +801,23 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     playerName = data[FlatFileMappings.USERNAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     int powerLevel = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Map<RootSkill, Integer> skills = getSkillMapFromLine(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(acrobatics, playerName, skills.get(CoreSkills.ACROBATICS_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(alchemy, playerName, skills.get(CoreSkills.ALCHEMY_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(archery, playerName, skills.get(CoreSkills.ARCHERY_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(axes, playerName, skills.get(CoreSkills.AXES_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(excavation, playerName, skills.get(CoreSkills.EXCAVATION_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(fishing, playerName, skills.get(CoreSkills.FISHING_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(herbalism, playerName, skills.get(CoreSkills.HERBALISM_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(mining, playerName, skills.get(CoreSkills.MINING_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(repair, playerName, skills.get(CoreSkills.REPAIR_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(swords, playerName, skills.get(CoreSkills.SWORDS_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(taming, playerName, skills.get(CoreSkills.TAMING_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(unarmed, playerName, skills.get(CoreSkills.UNARMED_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(woodcutting, playerName, skills.get(CoreSkills.WOODCUTTING_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(woodcutting, playerName, skills.get(CoreSkills.CROSSBOWS_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    powerLevel += putStat(woodcutting, playerName, skills.get(CoreSkills.TRIDENTS_CS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Map<PrimarySkillType, Integer> skills = getSkillMapFromLine(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(acrobatics, playerName, skills.get(PrimarySkillType.ACROBATICS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(alchemy, playerName, skills.get(PrimarySkillType.ALCHEMY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(archery, playerName, skills.get(PrimarySkillType.ARCHERY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(axes, playerName, skills.get(PrimarySkillType.AXES)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(excavation, playerName, skills.get(PrimarySkillType.EXCAVATION)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(fishing, playerName, skills.get(PrimarySkillType.FISHING)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(herbalism, playerName, skills.get(PrimarySkillType.HERBALISM)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(mining, playerName, skills.get(PrimarySkillType.MINING)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(repair, playerName, skills.get(PrimarySkillType.REPAIR)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(swords, playerName, skills.get(PrimarySkillType.SWORDS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(taming, playerName, skills.get(PrimarySkillType.TAMING)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(unarmed, playerName, skills.get(PrimarySkillType.UNARMED)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(woodcutting, playerName, skills.get(PrimarySkillType.WOODCUTTING)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(woodcutting, playerName, skills.get(PrimarySkillType.CROSSBOWS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    powerLevel += putStat(woodcutting, playerName, skills.get(PrimarySkillType.TRIDENTS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     putStat(powerLevels, playerName, powerLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -862,19 +854,19 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         alchemy.sort(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         powerLevels.sort(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.MINING_CS, mining); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.WOODCUTTING_CS, woodcutting); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.REPAIR_CS, repair); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.UNARMED_CS, unarmed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.HERBALISM_CS, herbalism); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.EXCAVATION_CS, excavation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.ARCHERY_CS, archery); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.SWORDS_CS, swords); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.AXES_CS, axes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.ACROBATICS_CS, acrobatics); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.TAMING_CS, taming); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.FISHING_CS, fishing); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        playerStatHash.put(CoreSkills.ALCHEMY_CS, alchemy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.MINING, mining); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.WOODCUTTING, woodcutting); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.REPAIR, repair); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.UNARMED, unarmed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.HERBALISM, herbalism); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.EXCAVATION, excavation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.ARCHERY, archery); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.SWORDS, swords); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.AXES, axes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.ACROBATICS, acrobatics); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.TAMING, taming); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.FISHING, fishing); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        playerStatHash.put(PrimarySkillType.ALCHEMY, alchemy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -912,7 +904,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (!usernames.add(stringDataArray[FlatFileMappings.USERNAME])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             stringDataArray[FlatFileMappings.USERNAME] = "_INVALID_OLD_USERNAME_'"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             updated = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (stringDataArray.length < FlatFileMappings.UUID_INDEX + 1 || stringDataArray[FlatFileMappings.UUID_INDEX].equals("NULL")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (stringDataArray.length < FlatFileMappings.UUID_INDEX + 1 || stringDataArray[FlatFileMappings.UUID_INDEX].equals(NULL_VALUE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1007,7 +999,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             // Version 1.5.01 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             // Add a value because otherwise it gets removed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             stringDataArray = Arrays.copyOf(stringDataArray, stringDataArray.length + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            stringDataArray[stringDataArray.length - 1] = "NULL"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            stringDataArray[stringDataArray.length - 1] = NULL_VALUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (oldVersion == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 oldVersion = "1.5.01"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1107,8 +1099,8 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //TODO: If new skills are added this needs to be rewritten 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (Config.getInstance().getTruncateSkills()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            for (RootSkill rootSkill : CoreSkills.getImmutableCoreRootSkillSet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if(CoreSkills.isChildSkill(rootSkill)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (RootSkill rootSkill : PrimarySkillType.getImmutableCoreRootSkillSet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if(PrimarySkillType.isChildSkill(rootSkill)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 int index = getSkillIndex(rootSkill); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1175,8 +1167,8 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         updated |= oldVersion != null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (Config.getInstance().getTruncateSkills()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Map<RootSkill, Integer> skillsMap = getSkillMapFromLine(stringDataArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            for (RootSkill rootSkill : CoreSkills.getNonChildSkills()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Map<PrimarySkillType, Integer> skillsMap = getSkillMapFromLine(stringDataArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (RootSkill rootSkill : PrimarySkillType.getNonChildSkills()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 int cap = Config.getInstance().getLevelCap(rootSkill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 if (skillsMap.get(rootSkill) > cap) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     updated = true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1191,7 +1183,7 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // Prevent the same player from being present multiple times 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (stringDataArray.length == originalLength //If the length changed then the schema was expanded 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 && (!stringDataArray[FlatFileMappings.UUID_INDEX].isEmpty() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                && !stringDataArray[FlatFileMappings.UUID_INDEX].equals("NULL") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                && !stringDataArray[FlatFileMappings.UUID_INDEX].equals(NULL_VALUE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 && !players.add(stringDataArray[FlatFileMappings.UUID_INDEX]))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1279,29 +1271,31 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private @Nullable MMOPlayerData loadFromLine(@NotNull String[] dataStrSplit) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         MMODataBuilder playerDataBuilder = new MMODataBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String username = dataStrSplit[FlatFileMappings.USERNAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<RootSkill, Integer> skillLevelMap = getSkillMapFromLine(dataStrSplit);      // Skill levels 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<RootSkill, Float> skillExperienceValueMap   = new HashMap<>();     // Skill & XP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<SuperSkill, Integer> skillAbilityDeactivationTimeStamp = new HashMap<>(); // Ability & Cooldown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<PrimarySkillType, Integer> skillLevelMap = getSkillMapFromLine(dataStrSplit);      // Skill levels 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<PrimarySkillType, Float> skillExperienceValueMap   = new HashMap<>();     // Skill & XP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<SuperAbilityType, Integer> skillAbilityDeactivationTimeStamp = new HashMap<>(); // Ability & Cooldown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<UniqueDataType, Integer> uniquePlayerDataMap = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<RootSkill, SkillBossBarState> xpBarStateMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<PrimarySkillType, SkillBossBarState> xpBarStateMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int scoreboardTipsShown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.TAMING_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_TAMING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.MINING_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_MINING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.REPAIR_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_REPAIR])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.WOODCUTTING_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_WOODCUTTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.UNARMED_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_UNARMED])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.HERBALISM_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_HERBALISM])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.EXCAVATION_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_EXCAVATION])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.ARCHERY_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_ARCHERY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.SWORDS_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_SWORDS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.AXES_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_AXES])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.ACROBATICS_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_ACROBATICS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.FISHING_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_FISHING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.ALCHEMY_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_ALCHEMY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.TRIDENTS_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_TRIDENTS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillExperienceValueMap.put(CoreSkills.CROSSBOWS_CS, (float) Integer.parseInt(dataStrSplit[FlatFileMappings.EXP_CROSSBOWS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //XP Values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.TAMING, FlatFileMappings.EXP_TAMING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.MINING, FlatFileMappings.EXP_MINING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.REPAIR, FlatFileMappings.EXP_REPAIR, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.WOODCUTTING, FlatFileMappings.EXP_WOODCUTTING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.UNARMED, FlatFileMappings.EXP_UNARMED, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.HERBALISM, FlatFileMappings.EXP_HERBALISM, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.EXCAVATION, FlatFileMappings.EXP_EXCAVATION, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.ARCHERY, FlatFileMappings.EXP_ARCHERY, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.SWORDS, FlatFileMappings.EXP_SWORDS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.AXES, FlatFileMappings.EXP_AXES, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.ACROBATICS, FlatFileMappings.EXP_ACROBATICS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.FISHING, FlatFileMappings.EXP_FISHING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.ALCHEMY, FlatFileMappings.EXP_ALCHEMY, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.TRIDENTS, FlatFileMappings.EXP_TRIDENTS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillFloatValuesFromRawData(skillExperienceValueMap, dataStrSplit, PrimarySkillType.CROSSBOWS, FlatFileMappings.EXP_CROSSBOWS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //Set Skill XP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1320,14 +1314,9 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         skillAbilityDeactivationTimeStamp.put(SuperAbilityType.SUPER_SHOTGUN, Integer.valueOf(dataStrSplit[FlatFileMappings.COOLDOWN_CROSSBOWS_SUPER_1])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         skillAbilityDeactivationTimeStamp.put(SuperAbilityType.TRIDENT_SUPER, Integer.valueOf(dataStrSplit[FlatFileMappings.COOLDOWN_TRIDENTS_SUPER_1])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            mobHealthbarType = MobHealthBarType.valueOf(dataStrSplit[FlatFileMappings.HEALTHBAR]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            mobHealthbarType = Config.getInstance().getMobHealthbarDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * Mob Health Bars are no longer saved per player and are ignored from the data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //Sometimes players are retrieved by name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UUID playerUUID; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1347,7 +1336,6 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             scoreboardTipsShown = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             uniquePlayerDataMap.put(UniqueDataType.CHIMAERA_WING_DATS, Integer.valueOf(dataStrSplit[FlatFileMappings.COOLDOWN_CHIMAERA_WING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1356,27 +1344,28 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.ACROBATICS_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ACROBATICS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.ALCHEMY_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ALCHEMY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.ARCHERY_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ARCHERY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.AXES_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_AXES])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.EXCAVATION_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_EXCAVATION])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.FISHING_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_FISHING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.HERBALISM_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_HERBALISM])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.MINING_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_MINING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.REPAIR_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_REPAIR])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.SALVAGE_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SALVAGE])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.SMELTING_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SMELTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.SWORDS_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SWORDS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.TAMING_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_TAMING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.UNARMED_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_UNARMED])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.WOODCUTTING_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_WOODCUTTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.TRIDENTS_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_TRIDENTS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            xpBarStateMap.put(CoreSkills.CROSSBOWS_CS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_CROSSBOWS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.ACROBATICS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ACROBATICS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.ALCHEMY, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ALCHEMY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.ARCHERY, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_ARCHERY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.AXES, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_AXES])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.EXCAVATION, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_EXCAVATION])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.FISHING, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_FISHING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.HERBALISM, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_HERBALISM])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.MINING, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_MINING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.REPAIR, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_REPAIR])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.SALVAGE, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SALVAGE])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.SMELTING, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SMELTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.SWORDS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_SWORDS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.TAMING, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_TAMING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.UNARMED, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_UNARMED])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.WOODCUTTING, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_WOODCUTTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.TRIDENTS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_TRIDENTS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            xpBarStateMap.put(PrimarySkillType.CROSSBOWS, SkillUtils.asBarState(dataStrSplit[FlatFileMappings.BARSTATE_CROSSBOWS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             xpBarStateMap = MMOExperienceBarManager.generateDefaultBarStateMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         MMOPlayerData mmoPlayerData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1399,36 +1388,68 @@ public final class FlatFileDatabaseManager extends AbstractDatabaseManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //TODO: Add tests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private @NotNull Map<RootSkill, Integer> getSkillMapFromLine(@NotNull String[] stringDataArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        HashMap<RootSkill, Integer> skillLevelsMap = new HashMap<>();   // Skill & Level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.TAMING_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_TAMING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.MINING_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_MINING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.REPAIR_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_REPAIR])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.WOODCUTTING_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_WOODCUTTING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.UNARMED_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_UNARMED])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.HERBALISM_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_HERBALISM])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.EXCAVATION_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_EXCAVATION])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.ARCHERY_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_ARCHERY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.SWORDS_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_SWORDS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.AXES_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_AXES])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.ACROBATICS_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_ACROBATICS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.FISHING_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_FISHING])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.ALCHEMY_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_ALCHEMY])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.TRIDENTS_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_TRIDENTS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        skillLevelsMap.put(CoreSkills.CROSSBOWS_CS, Integer.valueOf(stringDataArray[FlatFileMappings.SKILLS_CROSSBOWS])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return skillLevelsMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private @NotNull Map<PrimarySkillType, Integer> getSkillMapFromLine(@NotNull String[] splitDataArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<PrimarySkillType, Integer> skills = new EnumMap<>(PrimarySkillType.class);   // Skill & Level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String username = splitDataArray[FlatFileMappings.USERNAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.TAMING, FlatFileMappings.SKILLS_TAMING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.MINING, FlatFileMappings.SKILLS_MINING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.REPAIR, FlatFileMappings.SKILLS_REPAIR, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.WOODCUTTING, FlatFileMappings.SKILLS_WOODCUTTING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.UNARMED, FlatFileMappings.SKILLS_UNARMED, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.HERBALISM, FlatFileMappings.SKILLS_HERBALISM, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.EXCAVATION, FlatFileMappings.SKILLS_EXCAVATION, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.ARCHERY, FlatFileMappings.SKILLS_ARCHERY, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.SWORDS, FlatFileMappings.SKILLS_SWORDS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.AXES, FlatFileMappings.SKILLS_AXES, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.ACROBATICS, FlatFileMappings.SKILLS_ACROBATICS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.FISHING, FlatFileMappings.SKILLS_FISHING, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.ALCHEMY, FlatFileMappings.SKILLS_ALCHEMY, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.TRIDENTS, FlatFileMappings.SKILLS_TRIDENTS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tryLoadSkillIntValuesFromRawData(skills, splitDataArray, PrimarySkillType.CROSSBOWS, FlatFileMappings.SKILLS_CROSSBOWS, username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return skills; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void tryLoadSkillCooldownFromRawData(@NotNull Map<SuperAbilityType, Integer> cooldownMap, @NotNull String[] character, @NotNull SuperAbilityType superAbilityType, int cooldownSuperBreaker, @NotNull String userName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cooldownMap.put(superAbilityType, Integer.valueOf(character[cooldownSuperBreaker])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (NumberFormatException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.p.getLogger().severe("Data corruption when trying to load the value for skill "+superAbilityType.toString()+" for player named " + userName+ " setting value to zero"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void tryLoadSkillFloatValuesFromRawData(@NotNull Map<PrimarySkillType, Float> skillMap, @NotNull String[] character, @NotNull PrimarySkillType primarySkillType, int index, @NotNull String userName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            float valueFromString = Integer.parseInt(character[index]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            skillMap.put(primarySkillType, valueFromString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (NumberFormatException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            skillMap.put(primarySkillType, 0F); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.p.getLogger().severe("Data corruption when trying to load the value for skill "+primarySkillType.toString()+" for player named " + userName+ " setting value to zero"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void tryLoadSkillIntValuesFromRawData(@NotNull Map<PrimarySkillType, Integer> skillMap, @NotNull String[] character, @NotNull PrimarySkillType primarySkillType, int index, @NotNull String userName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int valueFromString = Integer.parseInt(character[index]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            skillMap.put(primarySkillType, valueFromString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (NumberFormatException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            skillMap.put(primarySkillType, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.p.getLogger().severe("Data corruption when trying to load the value for skill "+primarySkillType.toString()+" for player named " + userName+ " setting value to zero"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public @NotNull DatabaseType getDatabaseType() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return DatabaseType.FLATFILE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private int getSkillIndex(@NotNull RootSkill rootSkill) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PrimarySkillType primarySkillType = CoreSkills.getSkill(rootSkill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int getSkillIndex(@NotNull PrimarySkillType primarySkillType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         switch (primarySkillType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case ACROBATICS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return FlatFileMappings.SKILLS_ACROBATICS; 
			 |