Manajer profil game
A :javadoc:`GamePofile' menunjukkan profil pemain, meliputi seperti data nama,``UUID``, dan data sewenang-wenang lainnya yang dikenal sebagai properti. SpongeAPI menyediakan :javadoc: GameProfileManager untuk mendapatkan, membuat, dan mengisi` GameProfile` s. Anda bisa mendapatkan secara instan GameProfileManager
dengan mengikuti code berikut.
import org.spongepowered.api.Sponge;
import org.spongepowered.api.profile.GameProfileManager;
GameProfileManager profileManager = Sponge.getServer().getGameProfileManager();
Mengambil GameProfile
Penting untuk dicatat bahwa Sponge menyimpan cache `` GameProfile`` untuk digunakan sebagai pengganti untuk mengajukan permintaan ke API Mojang setiap kali `` GameProfile`` diminta. Metode untuk mengambil GameProfile
s offer a ``boolean``arguma kedua yang menenjukkan apakah cache akan digunakan. Secara default, cache akan digunakan bila memungkinkan.
A `` GameProfile`` dapat dicari dengan menggunakan sebuah `` UUID`` atau nama pengguna. Perhatikan bahwa profil yang sama akan selalu dikembalikan saat dicari oleh `` UUID``, namun seperti nama pengguna dapat diubah, ini mungkin tidak menjadi masalah saat mencari nama pengguna.
Mengambil dengan username
import org.spongepowered.api.profile.GameProfile;
import java.util.concurrent.CompletableFuture;
CompletableFuture<GameProfile> futureGameProfile = profileManager.get("Notch");
Mengambil dengan UUID
import java.util.UUID;
CompletableFuture<GameProfile> futureGameProfile =
profileManager.get(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5"));
Tip
Anda juga dapat mengambil banyak `` GameProfile`` s sekaligus menggunakan:javadoc:GameProfileManager # getAllById (Iterable <UUID>, boolean) atau:javadoc:GameProfileManager # getAllByName (Iterable <String>, boolean). Kedua metode ini kembali `` CompletableFuture <Collection <GameProfile >> ``.
Perhatikan bahwa masing-masing metode ini mengembalikan semacam CompletableFuture
. Ini menunjukkan bahwa GameProfile
(atau `` koleksi<GameProfile> ) mungkin tidak segera tersedia karena permintaan yang menunggu keputusan ke Mojang Api. `Javadocs for CompletableFuture <https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html>` _ menggambarkan kemampuan penuh dari kelas, namun kami akan fokus pada ``get
metode untuk tujuan artikel ini.
Untuk mengambil GameProfile
dari `` CompletableFuture<GameProfile``, Anda cukup memanggil metode `` CompletableFuture # get``.
GameProfile gameProfile = futureGameProfile.get();
Peringatan
Jika `` GameProfile`` tidak segera tersedia (seperti jika cache tidak digunakan atau tidak berisi `` GameProfile``), maka `` get`` akan menunggu selesai. Oleh karena itu, tidak disarankan untuk menggunakan ini di thread utama karena akan menghentikan server. Sebagai alternatif, Anda dapat menggunakan metode CompletableFuture # thenAccept (Consumer <? Super T>) `` untuk menentukan ``Consumer
yang akan dijalankan setelah selesai.
Membuat GameProfil
Anda bisa membuat GameProfile baru menggunakan :javadoc:` GameProfile#of (UUID, String) . Perhatikan bahwa nama pengguna tidak harus sesuai dengan ``UUID` dari pemain tersebut. Demikian juga, UUID` tidak perlu masuk ke pemain yang valid.
GameProfile gameProfile = GameProfile.of(
UUID.fromString("00000000-0000-0000-0000-000000000000"),
"Herobrine");
Catatan
Ini tidak wajib untuk menentukan nama GameProfile``(``null
adalah argumen yang valid).
Mengisi GameProfil
Mengisi GameProfile
melengkapi profil dengan mengambil informasi seperti skin pemain dari Mojang Api. Perhatikan bahwa jika data palsu seperti username dikaitkan dengan UUID tertentu, maka data akan digantikan oleh data aktual dari Mojang Api.
GameProfile filledProfile = profileManager.fill(gameProfile).get();
ProfileProperties
GameProfile
s dapat digunakan untuk menyimpan data sewenang-wenang tentang pemain dengan menggunakan ProfilePropertys. Bagaimanapun juga, ini tidak bisa digunakan sebagai penyimpanan data permanen, karena data tidak berlanjut di server restart. Kita dapat mengambil kembali properti GameProfile` dengan menggunakan metode :javadoc:`GameProfile # getPropertyMap ()`, yang mengembalikan ``Multimap
. Dari sana, Anda dapat mengambil yang sudah ada atau menyimpan ProfileProperty` baru, yang direpresentasikan sebagai pasangan nilai kunci. Untuk menghasilkan ProfileProperty baru, cukup panggil metode :Javadoc:`ProfileProperty#of(String, String) `. Argumen ketiga (signature) bersifat opsional. Namun, signature yang sah dari Mojang harus ditentukan untuk properti tertentu.
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");
Cache GameProfil
Anda juga bisa langsung mengakses GameProfileCache yang digunakan oleh Sponge untuk menyimpan``GameProfile`` s. Untuk melakukannya, cukup memanggil GameProfileManager#getCache() method. Dengan menggunakan `` GameProfileCache``, Anda bisa melihat `` GameProfile``, menambahkan GameProfile
tambahkan kontruksi terbaru``GameProfile``s, , dan mengisi profil dengan data yang tersimpan dalam cache.
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);
Tip
GameProfileCache#add(GameProfile) juga menerima`` boolean`argumen kedua adalah yang menentukan apakah entri cache yang ada harus ditimpa, dan Date` argumen ketiga mengatur`GameProfile
yang kadaluwarsa.
Jika Anda memutuskan untuk menghapus GameProfile
dari cache, Anda dapat menghubungi :javadoc: GameProfileCache#remove(GameProfile). Jika Anda perlu menghapus semua GameProfile
s dari cache, Anda dapat menghubungi GameProfileCache#clear().
The``GameProfileCache`` juga dapat diatur oleh plugin dengan metode GameProfileManager#setCache(GameProfileCache). Untuk mengembalikan cache asli, gunakan metode yang sama, lewati hasilnya GameProfileManager#getDefaultCache().