Administrador de Perfiles del Juego
Advertencia
These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!
Un :javadoc:`GameProfile`representa el perfil de un jugador, incluyendo datos tales como un nombre, ``UUID`` y otros datos arbitrarios conocidos como propiedades. SpongeAPI proporciona la clase GameProfileManager para obtener, crear y rellenar GameProfile
s. Puede obtener una instancia del GameProfileManager
utilizando el siguiente código.
import org.spongepowered.api.Sponge;
import org.spongepowered.api.profile.GameProfileManager;
GameProfileManager profileManager = Sponge.getServer().getGameProfileManager();
Recuperar GameProfiles
Es importante notar que Sponge mantiene un caché de GameProfile
s para ser utilizado como un sustituto para realizar una solicitud para la Mojang API cada vez que un GameProfile
es solicitado. Los métodos para recuperar GameProfile
s ofrecen un segundo argumento boolean
determinando si se utilizará el caché. Por defecto, el caché será utilizado cuando sea posible.
Un GameProfile
puede ser buscado utilizando ya sea un UUID
o un nombre de usuario. Tenga en cuenta que el mismo perfil siempre será devuelto cuando se busque por UUID
, pero por los nombre de usuarios puede cambiar, esto no necesariamente puede ser el caso cuando busca por nombre de usuario.
Recuperar por nombre de usuario
import org.spongepowered.api.profile.GameProfile;
import java.util.concurrent.CompletableFuture;
CompletableFuture<GameProfile> futureGameProfile = profileManager.get("Notch");
Recuperar por UUID
import java.util.UUID;
CompletableFuture<GameProfile> futureGameProfile =
profileManager.get(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5"));
Truco
Puede también recuperar muchos GameProfile
s a la vez, utilizando GameProfileManager#getAllById(Iterable<UUID>, boolean) o GameProfileManager#getAllByName(Iterable<String>, boolean). Ambos métodos devuelven CompletableFuture<Collection<GameProfile>>
.
Tenga en cuenta que cada uno de estos métodos devuelve algún tipo tipo de CompletableFuture
. Esto indica que el GameProfile
(o Collection<GameProfile>
) puede no estar disponible inmediatamente a causa de las solicitudes pendientes a la Mojang API. Los Javadocs para CompletableFuture describen todas las capacidades de la clase, pero nos enfocaremos en el método get
para el propósito de este artículo.
Para proporcionar un GameProfile
de un CompletableFuture<GameProfile
, puede simplemente llamar al método CompletableFuture#get
.
GameProfile gameProfile = futureGameProfile.get();
Advertencia
Si el GameProfile
no está disponible inmediatamente (por ejemplo si el caché no está siendo utilizado o no contiene el GameProfile
), entonces get
esperará a que se completa el futuro. Por esta razón, no es recomendable utilizar esto en el hilo principal ya que detendrá el servidor. Alternativamente, puede utilizar el método CompletableFuture#thenAccept(Consumer<? super T>)
para especificar un Consumidor
que se ejecutará al finalizar.
Creación de GameProfiles
Puede generar un nuevo GameProfile
utilizando GameProfile
using GameProfile#of(UUID, String). Tenga en cuenta que el nombre de usuario no necesita necesariamente corresponder con el UUID
de es jugador. Además, el UUID
no necesita pertenecer a un jugador válido.
GameProfile gameProfile = GameProfile.of(
UUID.fromString("00000000-0000-0000-0000-000000000000"),
"Herobrine");
Nota
No es obligatorio especificar el nombre del GameProfile
(nulo
es un argumento válido).
Llenar GameProfiles
Llenar un GameProfile
completa el perfil obteniendo información como la máscara del jugador de la Mojang API. Tenga en cuenta que si datos falsos, como el nombre de usuario, están asociados con un cierto UUID, serán remplazados por los datos reales de la Mojang API.
GameProfile filledProfile = profileManager.fill(gameProfile).get();
ProfileProperties
GameProfile
s pueden ser utilizados para almacenar datos arbitrarios sobre un jugador usando ProfilePropertys. Sin embargo, esto no puede ser utilizado como un almacén permanente de datos, ya que los datos no persisten a través de los reinicios del servidor. Podemos recuperar las propiedades de un GameProfile
utilizando el método GameProfile#getPropertyMap(), que devuelve un Multimap
. Desde allí, puede recuperar ProfileProperty
s existentes o almacenados, que son representados como un par de valores clave. Para generar un nuevo ProfileProperty
, simplemente llame el método ProfileProperty#of(String, String). El tercer argumento (firma) es opcional. Sin embargo, una firma válida de Mojang debe ser especificada para ciertas propiedades.
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
Puede también acceder directamente al GameProfileCache utilizado por Sponge para almacenar GameProfile
s. Para hacerlo, simplemente llame al método GameProfileManager#getCache(). Utilizando el GameProfileCache
, puede buscar GameProfile
s, agregar GameProfile
s recién construidos, y llenar perfiles con los datos almacenados en el caché.
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);
Truco
GameProfileCache#add(GameProfile) también acepta un segundo argumento boolean
determinando si existen entradas de caché que deben ser sobrescritas y un tercer argumento Plazo
que establece el vencimiento del GameProfile
.
Si alguna vez decide que necesita eliminar un GameProfile
del caché, puede llamar a GameProfileCache#remove(GameProfile). Si necesita eliminar todos los GameProfile
s del caché, puede llamar a GameProfileCache#clear().
El GameProfileCache
puede ser configurado también mediante complementos con el método GameProfileManager#setCache(GameProfileCache). Para recuperar el caché original, utilice el mismo método, pasando el resultado de GameProfileManager#getDefaultCache().