package com.alttd.essentia.user; import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.api.user.User; import com.alttd.essentia.api.user.UserManager; import com.alttd.essentia.model.EssentiaUserSettings; import org.bukkit.entity.Player; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class EssentiaUserManager implements UserManager { protected final EssentiaPlugin plugin; private final Map essentiaPlayers = new ConcurrentHashMap<>(); public EssentiaUserManager(EssentiaPlugin plugin) { this.plugin = plugin; } @Override public User getUser(Player player) { return getUser(player.getUniqueId()); } @Override public User getUser(UUID uuid) { User user = essentiaPlayers.get(uuid); if (user != null) { return user; } else { return createNewUser(uuid); } } @Override public void addUser(User user) { essentiaPlayers.put(user.getUUID(), user); } @Override public void removeUser(UUID uuid) { essentiaPlayers.remove(uuid); } @Override public boolean hasUser(UUID uuid) { return essentiaPlayers.containsKey(uuid); } @Override public Map getUsers() { return essentiaPlayers; } @Override public User createNewUser(UUID uuid) { return new EssentiaUser.Builder().uuid(uuid).build(); } @Override public void saveAllUsers() { for (User user : getUsers().values()) { if (user instanceof EssentiaUser essentiaUser && essentiaUser.getUserSettings() instanceof EssentiaUserSettings essentiaUserSettings) { try { if (essentiaUser.saving() || !essentiaUser.needsSaving() || !essentiaUserSettings.needsSaving()) { continue; } plugin.storageProvider().startSaving(essentiaUser); } catch(Exception e){ essentiaUser.saving(false); e.printStackTrace(); } } } } }