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<UserStorageService> userStorage = Sponge.getServiceManager().provide(UserStorageService.class);
return userStorage.get().get(uuid);
}
Ten kod pokazuje jak otrzymać UserStorageService
z ServiceManager
i wydobyć obiekt użytkownika User
.
Informacja
UserStorageService
może zwracać obiekty User
tylko tych użytkowników, którzy byli wcześniej podłączeni.
Informacja
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.