ProfileManager.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package me.lethunderhawk.fluxapi.profile;
  2. import me.lethunderhawk.fluxapi.util.config.ConfigLoader;
  3. import me.lethunderhawk.fluxapi.profile.representation.FluxProfile;
  4. import org.bukkit.entity.Player;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import java.util.UUID;
  8. public class ProfileManager {
  9. private final Map<UUID, FluxProfile> profiles = new HashMap<>();
  10. private final ConfigLoader loader;
  11. public ProfileManager(ConfigLoader loader) {
  12. this.loader = loader;
  13. }
  14. public FluxProfile loadProfile(UUID uuid) {
  15. if (profiles.containsKey(uuid)) {
  16. return profiles.get(uuid);
  17. }
  18. FluxProfile profile = loader.loadObject(
  19. "/profiles/" + uuid.toString(),
  20. uuid.toString(),
  21. FluxProfile.class
  22. );
  23. if(profile == null) {
  24. profile = createDefaultProfile(uuid);
  25. }
  26. profiles.put(uuid, profile);
  27. return profile;
  28. }
  29. private FluxProfile createDefaultProfile(UUID uuid) {
  30. return new FluxProfile(uuid.toString());
  31. }
  32. /*
  33. * Manual profile creation (rarely needed now).
  34. */
  35. public FluxProfile createNewProfile(Player player) {
  36. UUID uuid = player.getUniqueId();
  37. FluxProfile profile = createDefaultProfile(uuid);
  38. profiles.put(uuid, profile);
  39. return profile;
  40. }
  41. /*
  42. * Get from memory only.
  43. */
  44. public FluxProfile getProfile(UUID uuid) {
  45. return profiles.get(uuid);
  46. }
  47. /*
  48. * Save single profile.
  49. */
  50. public void saveProfile(UUID uuid) {
  51. FluxProfile profile = profiles.get(uuid);
  52. if (profile == null) return;
  53. saveProfile(profile);
  54. }
  55. public void saveProfile(FluxProfile profile) {
  56. if (profile == null) return;
  57. loader.saveObject(
  58. "/profiles/" + profile.getPlayerUUID() + ".yml",
  59. profile.getPlayerUUID(),
  60. profile);
  61. }
  62. /*
  63. * Save all loaded profiles.
  64. */
  65. public void saveAllProfiles() {
  66. for (FluxProfile profile : profiles.values()) {
  67. saveProfile(profile);
  68. }
  69. }
  70. /*
  71. * Unload profile (save before removal).
  72. */
  73. public void unloadProfile(UUID uuid) {
  74. FluxProfile profile = profiles.remove(uuid);
  75. if (profile != null) {
  76. saveProfile(profile);
  77. }
  78. }
  79. }