Dane gracza offline
Czasami pluginy potrzebują uzyskać dane gracza, nawet wtedy kiedy jest on offline (kiedy nie ma go obecnie w grze). Może Ci się wydawać że funkcja Sponge.getServer().getPlayer()
zwracająca obiekt gracza, może zostać do tego wykorzystana. Lecz, z racji iż obiekt :javadoc: Player
istnieje tylko w przypadku graczy online, trzeba użyć tu innego rozwiązania.
Niektóre pluginy, same przechowują potrzebne im dane i dopasowują do nich użytkownika poprzez GameProfileManager. Pisanie osobnego kodu dla użytkownika offline i użytkownika online nie jest wymagane. ServiceManager natywnie dostarcza serwis znany jako UserStorageService, który potrafi zwracać instancje użytkowników User przypisanych do graczy Player
, którzy są obecnie offline. Z powodu iż interfejs Player``poszerza interfejs ``User
, to większość metod których możesz użyć na Player
jest również dostępna w interfejsie User
.
Na przykład:
#hasPermission(String permission)
jest dostępne z obu instancji.
Przykład Kodu
Oto przykład własnej funkcji, która może być użyta do otrzymania obiektu 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);
}
Najpierw sprawdzamy czy instancja Player
istnieje dla podanego UUID. Jeśli tak, oznacza to że użytkownik jest online (dostępny) i możemy śmiało zwrócić obiekt gracza. W przypadku jeżeli obiekt gracza nie istnieje, zdobywamy serwis UserStorageService
od ServiceManager
a następnie wydobywamy z niego obiekt użytkownika User
.
Informacja
UserStorageService
może zwracać obiekty User
tylko tych użytkowników, którzy byli wcześniej podłączeni.
Wskazówka
To rozwiązanie może być użyte do otrzymania obiektu użytkownika User
będącego online oraz offline, co czyni je dynamicznie użytecznym w Twoim pluginie.