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<Player> onlinePlayer = Sponge.getServer().getPlayer(uuid);

    if (onlinePlayer.isPresent()) {
        return onlinePlayer;
    }

    Optional<UserStorageService> userStorage = Sponge.getServiceManager().provide(UserStorageService.class);

    return userStorage.get().get(uuid);
}

Vérifiez d’abord si une instance de Player existe signifiant que l’utilisateur est connecté. Si c’est le cas, l’objet est retourné. Sinon récupérez le UserStorageService depuis le ServiceManager et récupérer l”User à partir de là.

Note

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

Astuce

La solution peut être utilisée pour récupérer des Users connectés et déconnectés, ce qui la rend utilisable dynamiquement dans votre plugin.