Datos del Jugador Fuera de Línea
Puede ser necesario para los complementos acceder a los datos de jugador incluso cuando el jugador está fuera de línea. Podría pensar que Sponge.getServer().getPlayer()
devuelve un :javadoc:`Jugador` que puede utilizarse para esto. Pero ya que los objetos Jugador
solo existen para jugadores en línea, otra solución debe ser utilizada.
Algunos complementos almacenan los datos relevantes ellos mismos y los asocian al usuario utilizando GameProfileManager. Pero escribir diferentes códigos para usuarios en línea y fuera de línea no es necesario. El ServiceManager nativamente proporciona un servicio conocido como :javadoc:`UserStorageService`el cual es capaz de devolver instancias :javadoc:`Usuario` para Jugador
s que estén fuera de línea actualmente. Ya que la interfaz de Jugador
se extiende a Usuario
la mayoría de los métodos a los que llama para un Jugador
también están disponibles.
Por ejemplo:
#hasPermission(String permission)
está disponible para ambas instancias.
Ejemplo de Código
Aquí está un ejemplo de un método útil que puede utilizarse para obtener un Usuario
:
import java.util.Optional;
import java.util.UUID;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.entity.living.player.User;
import org.spongepowered.api.service.user.UserStorageService;
public Optional<User> getUser(UUID uuid) {
Optional<Player> onlinePlayer = Sponge.getServer().getPlayer(uuid);
if (onlinePlayer.isPresent()) {
return onlinePlayer;
}
Optional<UserStorageService> userStorage = Sponge.getServiceManager().provide(UserStorageService.class);
return userStorage.get().get(uuid);
}
Primero verifique si una instancia de Jugador
existe, lo que significa que el usuario está en línea. Si es así, el objeto es devuelto. Si no, obtenga el UserStorageService
desde el ServiceManager
y entonces recupere el Usuario
desde ahí.
Nota
El UserStorageService
solo puede obtener Usuario
s que estuvieron conectados previamente.
Truco
Esta solución puede utilizarse para obtener Usuario
s en línea y fuera de línea. lo que hace que pueda ser utilizable de forma dinámica dentro de su complemento.