In my plugin every player has a Profile object. The Profile holds all of that players stats that relate to the plugin, such as cooldowns, abilities, skill levels, etc. I have a singleton class called ProfileManager that contains a HashMap (called OnlinePlayers) with player UUIDs as the key, and the players Profile object as the value. When a player joins, their Profile object is built from their player_data.yml file and added to OnlinePlayers. Same goes for a player leaving, their Profile object is saved to their player_data.yml file and removed from OnlinePlayers. Example: To add 100 xp to a players Woodcutting level, I have to write this. Code: ProfileManager.getInstance().getPlayerProfile(player).addXP(Skill.WOODCUTTING, 100); The question: Is this a good way of doing things? It seems efficient but I want to check before I get too deep in things. At the moment I'm not interacting with player profiles, I've only just set up the framework. Also, I want as much advice about creating large plugins as possible. What's something I should know now that I'm starting out? Any of you who have worked on large scale plugins please pitch in, thank-you!