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 GameProfiles 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

GameProfiles 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 GameProfiletambahkan 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 GameProfiles 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().