Contenido generado con IA — puede contener errores.

Referenciadev

API

Preguntar dónde está un jugador, leer los mundos y sus kits, vestirlo y leer sus estadísticas de sandbox.

SandBoxService es como otro plugin pregunta si un jugador está en un sandbox o en una cola, lee los mundos configurados y los kits guardados de un jugador, viste a alguien con uno de ellos y lee sus bajas, muertes y tiempo jugado.

ExyliaAPI.get(SandBoxService.class).ifPresent(sandbox -> {
    if (sandbox.isInSandbox(player.getUniqueId())) {
        event.setCancelled(true);
    }
});
Añadirlo a tu proyecto

El artefacto, el repositorio y la línea de plugin.yml son los mismos para todos los plugins de Exylia y están en la página de la API pública.

La respuesta es la reserva, no el mundo

isInSandbox responde desde la reserva de sesión que toma el plugin, no desde el mundo en el que esté parado el jugador. Los dos no coinciden durante un teletransporte sin terminar, y gana la reserva — que es lo que quieres: un jugador ya reservado y en vuelo está ocupado.

Todo lo que devuelve un valor lee una caché y es seguro desde un placeholder, una línea de marcador o un redibujado de menú. Todo lo que actúa teletransporta jugadores y reescribe inventarios: llama a eso en el hilo principal, y no más a menudo de lo que podría provocarlo un jugador.

Sesión

MétodoQué hace
boolean isInSandbox(UUID)Si tiene la reserva de sandbox.
boolean isInQueue(UUID)Si está esperando rival.
boolean leave(Player)Lo manda de vuelta al lobby. Informa de si la petición se aceptó, no de si terminó; false mientras está montando un kit.
boolean joinQueue(Player, String worldId, int kitSlot)Lo mete en la cola de un mundo. false solo cuando no hay ningún mundo con ese id — cualquier otro rechazo de la cola ya se le ha dicho al jugador.
void leaveQueue(Player)Lo saca de la cola en la que esté.

Mundos

MétodoQué hace
List<SandboxWorld> worlds()Todos los mundos configurados, inservibles incluidos, sin orden concreto. Inmutable.
Optional<SandboxWorld> world(String worldId)Uno por id.
Optional<SandboxWorld> worldOf(World)La pregunta de un listener: ¿este mundo de Bukkit es de los nuestros?
float pregenerationProgress(String worldId)De 0 a 1. 0 tanto para un mundo terminado como para uno que nunca empezó.

SandboxWorld es una foto fija, no una vista viva: id, displayName, worldName, biome, borderSize, type, status y loaded, más isPlayable() — cargado y READY. Lleva un nombre de mundo en vez de un World porque un mundo configurado no está necesariamente cargado.

WorldStatus es CREATING, PREGENERATING, READY o UNAVAILABLE. WorldType es MANAGED o IMPORTED.

Kits

MétodoQué hace
List<SandboxKit> kits(UUID)Sus kits guardados, ordenados por ranura. Un jugador desconectado no informa de nada. Inmutable.
Optional<SandboxKit> kit(UUID, int slot)Una ranura.
Optional<SandboxKit> favoriteKit(UUID)El marcado con estrella, si tiene alguno.
int maxKits(Player)Cuántas ranuras se le permiten. Lee permisos, por eso toma el jugador.
int activeKitSlot(UUID)La ranura que lleva puesta, -1 si no lleva ninguna.
void applyKit(Player, int slot)Sustituye lo que lleva por ese kit. No hace nada en una ranura sin usar.

SandboxKit es slot, name, favorite, hasContents, createdAt y updatedAt. El contenido no se expone a propósito: usa applyKit en vez de leer las pilas.

Estadísticas

MétodoQué hace
SandboxStats stats(UUID)Nunca vacío. Un jugador que nadie ha cargado se lee como ceros, y la lectura se lanza, así que el siguiente dibujado ya tiene los números.

SandboxStats es player, kills, deaths y playtimeMillis, más kdr() — que devuelve el número de bajas cuando no hay muertes. El tiempo jugado es tiempo de sandbox, no tiempo en el servidor.

No hay eventos

El plugin no dispara ninguno, y el paquete publicado no lleva clases de evento. Para reaccionar a que un jugador entre o salga, mira su mundo con worldOf, o pregunta a isInSandbox cuando importe. Si necesitas un enganche en un momento concreto, pídelo en vez de sondear cada tick.

¿Falta algo en esta página? Dínoslo en Discord