Données du Joueur Hors-Ligne

Il peut être nécessaire pour les plugins d’accéder aux données du joueur même si le joueur est déconnecté. Vous pourriez penser que Sponge.getServer().getPlayer() qui retourne un Player peut être utilisé pour ça. Mais puisque les objets Player n’existent que pour les joueurs en ligne, une autre solution doit être utilisée.

Certains plugins stockent les données elles-mêmes et les associent aux utilisateurs en utilisant le GameProfileManager. Mais écrire différents codes pour les joueurs connectés et déconnectés n’est pas nécessaire. Le ServiceManager fournit nativement un service connu en tant que UserStorageService qui est capable de retourner des instances de User pour des Players qui sont actuellement déconnectés. Puisque l’interface Player hérite d”User la plupart des méthodes que vous appelez sur un Player sont disponibles.

Par exemple :

  • #hasPermission(String permission) est disponible depuis les deux instances.

Exemple de Code

Voici un exemple d’une méthode utilitaire qui peut être utilisée pour récupérer un User :

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);
}

Ce code va récupérer le UserStorageService à partir du ServiceManager puis récupérer le User à partir d’ici.

Note

Le UserStorageService peut seulement retourner des Users qui se sont déjà connectés.

Note

Cette solution ne va pas retourner d’instance de Player. Cela rend sécurisé de stocker les objets User retournés, mais vous pouvez utiliser la méthode User.getPlayer() pour récupérer l’entité en ligne.