package net.glowstone.io; import net.glowstone.entity.GlowPlayer; import org.bukkit.Location; import org.bukkit.OfflinePlayer; import java.util.Collection; import java.util.UUID; /** * Provider of I/O for player data. */ public interface PlayerDataService { /** * Begin reading player data for online or offline player loading. Some * attributes may be read before or without constructing a player entity, * see {@link PlayerReader} for more information. When finished with the * PlayerReader, {@link PlayerReader#close()} should be called. * @param uuid The UUID of the player to read data for. * @return The {@link PlayerReader} to use. */ PlayerReader beginReadingData(UUID uuid); /** * Shorthand method to read data into an existing player entity. * @param player The target player. */ void readData(GlowPlayer player); /** * Save all data for an online player. * @param player The source player. */ void writeData(GlowPlayer player); /** * Get a collection of all known offline players. Currently online * players may or may not be included, but if they are, they will be * included in OfflinePlayer form. * @return All known offline players. */ Collection<OfflinePlayer> getOfflinePlayers(); /** * Locally look up the UUID of an offline player based on their name. If * no local player with the name was found, an offline-mode UUID is * returned. * @param name The name to look up. * @return The UUID of the player. */ UUID lookupUUID(String name); /** * A piecewise reader for initializing new players. * See {@link PlayerDataService#beginReadingData}. */ interface PlayerReader extends AutoCloseable { /** * Check whether the player has played before. If the player has * not played before, most of the rest of the fields will have their * default values. If the player has played before, some fields may * still not have meaningful values, depending on the data. * @return True if the player has played before. */ boolean hasPlayedBefore(); /** * Get the last saved location of the player if available. * @return The location, or null. */ Location getLocation(); /** * Get the player's bed spawn location if available. * @return The location, or null. */ Location getBedSpawnLocation(); /** * Get the first-played time if available. * @return Time in milliseconds since epoch, or 0. */ long getFirstPlayed(); /** * Get the last-played time if available. * @return Time in milliseconds since epoch, or 0. */ long getLastPlayed(); /** * Get the player's last known username if available. * @return The name, or null. */ String getLastKnownName(); /** * Finish reading the rest of the player's entity data into the * specified player entity. * @param player The target player. */ void readData(GlowPlayer player); /** * Close any resources involved in reading the player data. */ @Override void close(); } }