Tidak hidup Data Pemain
Mungkin diperlukan untuk plugin untuk mengakses data pemain bahkan ketika pemain sedang offline. Anda mungkin berpikir bahwa Sponge.getServer().getPlayer()
kembali :javadoc:`Pemain` dapat digunakan untuk ini. Tapi karena Pemain
benda-benda yang ada hanya untuk pemain online, solusi lain harus digunakan.
Beberapa plugin menyimpan data mereka sendiri yang relevan dan mengaitkan pengguna dengan menggunakan GameProfileManager. Namun menulis kode yang berbeda untuk pengguna luring dan daring tidak diperlukan. ServiceManager secara native menyediakan layanan yang dikenal sebagai UserStorageService yang mampu mengembalikan User contoh untuk Player
s yang sedang luring. Sejak Player
antarmuka diperluas User
sebagian besar metode yang anda panggil pada Player
juga tersedia.
Sabagai contoh:
#hasPermission(String permission)
tersedia dari kedua contoh.
Contoh kode
Berikut ini adalah contoh untuk utilitas metode yang dapat digunakan untuk mendapatkan User
:
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);
}
Periksa dulu jika seorang Player
misalnya ada yang berarti bahwa pengguna sedang online. Jika demikian, objek dikembalikan. Jika tidak mendapatkan UserStorageService
dari ServiceManager
dan kemudian mengambil Pengguna
dari sana.
Catatan
UserStorageService
hanya bisa kembali User
s yang sebelumnya tidak terhubung.
Tip
Solusi ini dapat digunakan untuk mendapatkan online dan offline Pengguna
s yang membuatnya dinamis dapat digunakan dalam plugin anda.