package me.prestige.bases.user; import com.customhcf.util.Config; import com.google.common.base.MoreObjects; import me.prestige.bases.Bases; import org.bukkit.configuration.MemorySection; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import java.util.*; public class UserManager implements Listener { private final Bases plugin; private final Map users; private Config userConfig; public UserManager(final Bases plugin) { this.users = new HashMap(); this.plugin = plugin; this.reloadUserData(); plugin.getServer().getPluginManager().registerEvents((Listener) this, (Plugin) plugin); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerJoin(final PlayerJoinEvent event) { final UUID uuid = event.getPlayer().getUniqueId(); this.users.putIfAbsent(uuid, new FactionUser(uuid)); } public Map getUsers() { return this.users; } public FactionUser getUserAsync(final UUID uuid) { synchronized(this.users) { final FactionUser revert; final FactionUser user = this.users.putIfAbsent(uuid, revert = new FactionUser(uuid)); return (FactionUser) MoreObjects.firstNonNull(user, revert); } } public FactionUser getUser(final UUID uuid) { final FactionUser revert; final FactionUser user = this.users.putIfAbsent(uuid, revert = new FactionUser(uuid)); return (FactionUser) MoreObjects.firstNonNull((Object) user, (Object) revert); } public void reloadUserData() { this.userConfig = new Config(this.plugin, "users"); final Object object = this.userConfig.get("users"); if(object instanceof MemorySection) { final MemorySection section = (MemorySection) object; final Collection keys = section.getKeys(false); for(final String id : keys) { this.users.put(UUID.fromString(id), (FactionUser) this.userConfig.get(section.getCurrentPath() + '.' + id)); } } } public void saveUserData() { final Set> entrySet = this.users.entrySet(); final Map saveMap = new LinkedHashMap(entrySet.size()); for(final Map.Entry entry : entrySet) { saveMap.put(entry.getKey().toString(), entry.getValue()); } this.userConfig.set("users", (Object) saveMap); this.userConfig.save(); } }