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 Player
s 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 User
s qui se sont déjà connectés.
Astuce
La solution peut être utilisée pour récupérer des User
s connectés et déconnectés, ce qui la rend utilisable dynamiquement dans votre plugin.