Oyun Profili Yöneticisi
Bir GameProfile veriyi UUID``ismi gibi kapsayan bir oyuncu profilini ve özellikler olarak bilinen diğer rastgele seçilmiş veriyi temsil eder.SpongeAPI ``GameProfile
ları almak,oluşturmak ve doldurmak için :javadoc:`GameProfileManager`sınıfı sağlar.Sıradaki kodu kullanarak ``GameProfileManager`` örneğini edinebilirsiniz.
import org.spongepowered.api.Sponge;
import org.spongepowered.api.profile.GameProfileManager;
GameProfileManager profileManager = Sponge.getServer().getGameProfileManager();
Oyun Profilleri alınıyor
Her GameProfile
isteğinde, Mojang API’sine bir istek yapmak için kullanılacak Sponge’ın GameProfile
nin önbelleğini sağladığının farkında olmak önemlidir. ``GameProfile`almak için kullanılan yöntemler önbellek kullanılıp kullanılmayacağını belirleyen ikinci bir boolean
değişkeni saptar. Varsayılanda, önbellek mümkün olduğunda kullanılacak.
Bir GameProfile``ı, bir ``UUID
ya da bir kullanıcı adı kullanılarak aranabilir. Aynı profili UUID
olarak bakıldığında her zaman geri gönderileceğini unutmayın, fakat kullanıcı adları değiştirilebileceğinden, kullanıcı adı olarak arandığında bu durum her seferinde geçerli olmayabilir.
Kullanıcı adı ile alınıyor
import org.spongepowered.api.profile.GameProfile;
import java.util.concurrent.CompletableFuture;
CompletableFuture<GameProfile> futureGameProfile = profileManager.get("Notch");
UUID ile alınıyor
import java.util.UUID;
CompletableFuture<GameProfile> futureGameProfile =
profileManager.get(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5"));
Tüyo
Ayrıca GameProfileManager#getAllById(Iterable<UUID>, boolean) veya GameProfileManager#getAllByName(Iterable<String>, boolean) kullanarak bir çok GameProfile
geri getirebilirsiniz.Bu tekniklerin her ikisi de ``CompletableFuture<Collection<GameProfile>>``i geri getirir.
Bu tekniklerin her birinin bir tür CompletableFuture
geri getirdiğini dikkate alınız.Bu durum GameProfile
(veya Collection<GameProfile>
) Mojang API için askıda kalan istekler yüzünden hemen mevcut durumda olmayabileceğini gösterir.
CompletableFuture<GameProfile
den GameProfile
almak için kolaylıkla CompletableFuture#get
yöntemini kullanabilirsin.
GameProfile gameProfile = futureGameProfile.get();
Uyarı
Eğer GameProfile
hemen kullanılabilir olmazsa (örneğin önbellek kullanılmıyor veya GameProfile
içermiyorsa) o zaman get
daha sonra tamamlamak için bekleyecek. Bu sebeple sunucuyu durduracağından bunu ana başlıkta kullanmanız tavsiye edilmez. Buna alternatif olarak tamamlama üzerinden çalıştırılacak bir Consumer
belirlemek için CompletableFuture#thenAccept(Consumer<? super T>)
kullanabilirsiniz.
OyunProfilleri oluşturuluyor
GameProfile#of(UUID, String) kullanarak yeni bir GameProfile
oluşturabilirsiniz.Kullanıcı adının o oyuncunun UUID``si ile muhakkak uyuşma zorunluluğu olmadığını dikkate alınız.Aynı şekilde ``UUID
de geçerli bir oyuncuya ait olmak zorunda değildir.
GameProfile gameProfile = GameProfile.of(
UUID.fromString("00000000-0000-0000-0000-000000000000"),
"Herobrine");
Not
GameProfile``adını belirtmek zorunlu değildir (``null
geçerli bir değişkendir).
Oyun Profilleri Dolduruluyor
Bir GameProfile
doldurmak, oyuncunun dış görünüşü gibi bilgileri Mojang API’sinden alarak profili tamamlar. Kullanıcı adı gibi sahte veri belirli bir UUID ile ilişkilendirilmişse, bunun yerine Mojang API’sındaki gerçek verilerle değiştirileceğini unutmayın.
GameProfile filledProfile = profileManager.fill(gameProfile).get();
Profil Özellikleri
GameProfile
, bir oyuncuyla ilgili keyfi verileri saklamak için ProfileProperty ile kullanılabilir. Ancak bu durum kalıcı veri saklama olarak kullanılamaz, çünkü veriler sunucu yeniden başladığında yerinde kalmayacaktır. Bir GameProfile
’in özelliklerini almak için, Multimap
döndüren GameProfile#getPropertyMap() yöntemini kullanabiliriz. Buradan, varolan bir değeri alabilir veya yeni bir ProfileProperty
depolayabilir, bunlar bir anahtar değerin çifti olarak temsil edilir. Yeni bir ProfileProperty
üretmek için ProfileProperty#of(String, String) yöntemini çağırmanız yeterlidir. Üçüncü argüman olan (imza) isteğe bağlıdır. Bununla birlikte, bazı özellikler için geçerli bir Mojang imzası belirtilmelidir.
import org.spongepowered.api.profile.property.ProfileProperty;
import java.util.Collection;
profile.getPropertyMap().put(
"key", ProfileProperty.of("foo", "bar", null));
Collection<ProfileProperty> customProperties = profile.getPropertyMap().get("key");
GameProfileCache
Ayrıca``GameProfile``lar depolamak için Sponge tarafından kullanılan the :javadoc:`GameProfileCache`e direkt olarak erişebilirsiniz.Bunu yapmak için basit bir şekilde the :javadoc:`GameProfileManager#getCache()` tekniğini çağırın. GameProfileCache
kullanarak,``GameProfile``a bakabilir,yeni yapılmış ``GameProfile``lar ekleyebilir ve profilleri önbellekte depolanmış verilerle doldurabilirsiniz.
import org.spongepowered.api.profile.GameProfileCache;
GameProfile fakeProfile =
GameProfile.of(UUID.fromString("00000000-0000-0000-0000-000000000000"),
"Herobrine");
GameProfileCache cache = profileManager.getCache();
cache.add(profile);
Tüyo
Ayrıca GameProfileCache#add(GameProfile) var olan önbelleğin girdilerinin üstüne yazılmış olup olmayacağını belirleyen bir boolean
ikincil argüman ve GameProfile``ın bitiş zamanını ayarlayan bir``Date
üçüncü argüman onaylar.
Eğer hiç önbellekten bir GameProfile
silmeniz gerektiğine karar verirseniz GameProfileCache#remove(GameProfile) çağırabilirsiniz.Eğer bütün ``GameProfile``larını önbellekten silmeniz gerekiyorsa GameProfileCache#clear() çağırabilirsiniz.
GameProfileCache
ayrıca :javadoc:`GameProfileManager#setCache(GameProfileCache)`tekniği ile birlikte eklentiler tarafından kurulabilir. Orijinal önbelleği iyileştirmek için aynı yöntemi kullanın, :javadoc:`GameProfileManager#getDefaultCache()`in sonuçlarını geçmek.