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 Jugadors 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 Usuarios 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.