Ç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 Player
lar 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.