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 Players 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 Users yang sebelumnya tidak terhubung.

Tip

Solusi ini dapat digunakan untuk mendapatkan online dan offline Penggunas yang membuatnya dinamis dapat digunakan dalam plugin anda.