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<UserStorageService> userStorage = Sponge.getServiceManager().provide(UserStorageService.class);
return userStorage.get().get(uuid);
}
This code will get the UserStorageService
from the ServiceManager
and then retrieve the User
from there.
Nota
El UserStorageService
solo puede obtener Usuario
s que estuvieron conectados previamente.
Nota
This solution will not return Player
instances. This makes it safe to store the returned User
objects,
but you will need to use the User.getPlayer()
method to retrieve the online entity.