package me.lethunderhawk.fluxapi.profile; import me.lethunderhawk.fluxapi.util.config.ConfigLoader; import me.lethunderhawk.fluxapi.profile.representation.FluxProfile; import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class ProfileManager { private final Map profiles = new HashMap<>(); private final ConfigLoader loader; public ProfileManager(ConfigLoader loader) { this.loader = loader; } public FluxProfile loadProfile(UUID uuid) { if (profiles.containsKey(uuid)) { return profiles.get(uuid); } FluxProfile profile = loader.loadObject( "/profiles/" + uuid.toString(), uuid.toString(), FluxProfile.class ); if(profile == null) { profile = createDefaultProfile(uuid); } profiles.put(uuid, profile); return profile; } private FluxProfile createDefaultProfile(UUID uuid) { return new FluxProfile(uuid.toString()); } /* * Manual profile creation (rarely needed now). */ public FluxProfile createNewProfile(Player player) { UUID uuid = player.getUniqueId(); FluxProfile profile = createDefaultProfile(uuid); profiles.put(uuid, profile); return profile; } /* * Get from memory only. */ public FluxProfile getProfile(UUID uuid) { return profiles.get(uuid); } /* * Save single profile. */ public void saveProfile(UUID uuid) { FluxProfile profile = profiles.get(uuid); if (profile == null) return; saveProfile(profile); } public void saveProfile(FluxProfile profile) { if (profile == null) return; loader.saveObject( "/profiles/" + profile.getPlayerUUID() + ".yml", profile.getPlayerUUID(), profile); } /* * Save all loaded profiles. */ public void saveAllProfiles() { for (FluxProfile profile : profiles.values()) { saveProfile(profile); } } /* * Unload profile (save before removal). */ public void unloadProfile(UUID uuid) { FluxProfile profile = profiles.remove(uuid); if (profile != null) { saveProfile(profile); } } }