Çevrim dışı oyuncu verisi

Eklentiler için, oyuncu çevrimdışı olsa bile, oyuncu verilerine erişmek gerekli olabilir. Sponge.getServer().getPlayer()``metodu bir :javadoc:`Player` döner ve bunun için kullanılabilir diye düşünüyor olabilirsiniz. Ancak ``Player nesneleri yalnızca çevrimiçi oyuncular içindir, başka bir çözüm kullanılması gerekir.

Bazı eklentiler ilgili verileri kendileri depolarlar ve GameProfileManager kullanarak kullanıcıyı ilişkilendirirler. Ancak çevrimdışı ve çevrimiçi kullanıcılar için farklı kod yazmak gerekli değildir. ServiceManager , UserStorageService olarak bilinen, offline Playerlar için :javadoc: User oluşumunu dönebilen servisi sağlar. Player` arayüzü User metodlarını genişlettiğinden dolayı, Player da çağırabilirsiniz.

Örneğin:

  • Bütün örnek oluşumlar için #hasPermission(String permission) uygundur.

Örnek kod

Burada bir User ‘ın alınması için kullanılan yardımcı metodun örneği bulunmaktadır:

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);
}

Önce Player oluşumu mevcut mu diye kontrol edin, bu kullanıcının çevrimiçi olduğu anlamına gelir. Eğer öyleyse, nesne geri döner. Eğer değilse, ServiceManager ‘dan UserStorageService çağırın ve User ‘ı oradan edinin.

Not

UserStorageService, yalnızca bundan önce bağlanmış olan User ları döner.

Tüyo

Çevrimiçi ve çevrimdışı ``User``ları almak için, bu çözüm, dinamik olarak eklentinizde kullanılabilir.