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.