Contenido generado con IA — puede contener errores.

Referencia

API

Lee juegos, partidas e historiales, abre un lobby o una mesa en nombre de un jugador, cancela una partida, y escucha cuándo se crean, se ocupan, empiezan y terminan las partidas.

TableService es como otro plugin lee los juegos y las partidas de ExyliaTabletop, mete a un jugador en su flujo (un lobby, una mesa, una invitación) y cancela una partida. Cuatro eventos siguen una partida desde que está a punto de crearse hasta su pago.

ExyliaAPI.get(TableService.class).ifPresent(tables -> tables.openLobby(player, "tictactoe"));
Añadirla 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. El contrato de Tabletop llegó en la API pública 3.0.0, en el paquete net.exylia.lib.api.tabletop; la 3.1.0 añadió las invitaciones a varios jugadores.

Un Optional vacío significa que el servidor no tiene ExyliaTabletop, no que algo haya fallado. El servicio se registra cuando todas las partes del plugin están en marcha y desaparece cuando se desactiva.

Métodos

Juegos y partidas

MétodoQué hace
List<TableGameInfo> games()Todos los juegos de esta versión, jugables o no.
Optional<TableGameInfo> game(String gameId)Un juego, por su id.
Optional<TableMatch> match(String matchId)Una partida en vivo, por su id.
Optional<TableMatch> matchOf(UUID player)La partida en vivo en la que un jugador tiene asiento: una mesa abierta, una invitación o una en juego.
boolean isPlaying(UUID player)Si el jugador está en una partida que ha salido del lobby: empezando o en juego.
List<TableMatch> matches()Todas las partidas en vivo.
List<TableMatch> offers(String gameId)Las mesas abiertas de un juego que puede ocupar cualquiera, de la más antigua a la más reciente.
CompletableFuture<TableStats> stats(UUID player, String gameId)El historial de un jugador en un juego; ceros si nunca lo jugó. Se lee de memoria para un jugador conectado y de la base de datos en otro caso.

Actuar como un jugador

Estos ejecutan el propio flujo del jugador, con las mismas comprobaciones y mensajes que los comandos, y vuelven antes de cobrar ningún importe. El importe y la moneda que se pasan se validan, nunca se dan por buenos.

MétodoQué hace
openLobby(Player player, String gameId)Abre el lobby de un juego, para un NPC o el menú de otro plugin.
createOffer(Player host, String gameId, String currency, BigDecimal stake)Abre una mesa, como hace /<game> create <importe> <moneda>, con tantos asientos como admite el juego; no se preguntan los asientos. Se niega con tables.only activado.
duel(Player host, Player target, String gameId, String currency, BigDecimal stake)Invita a un jugador a una mesa de dos, como hace /<game> duel <jugador> <importe> <moneda>. Se niega con tables.only activado.
join(Player player, String matchId)Ocupa un asiento en una mesa abierta, o acepta una invitación enviada a este jugador. No pide confirmación.
forfeit(Player player)Saca al jugador de donde esté: un asiento en espera se reembolsa, una mesa que tiene abierta se cierra, una partida en juego se pierde.

Actuar como el servidor

MétodoQué hace
boolean cancel(String matchId)Cancela una partida en vivo y reembolsa todo lo puesto en juego. Responde si existía esa partida.

Lo que devuelve

TipoContiene
TableGameInfoid, displayName (con tokens de la paleta), minPlayers, maxPlayers, playable (si el servidor acepta mesas de él ahora mismo) y commands (el primero es el comando).
TableMatchUna copia de la partida tal como estaba al leerla: id (como lo admite /tabletopadmin cancel), gameId, state, currency, stake (lo que paga cada asiento), pot (todo lo retenido hasta ahora), seats (el anfitrión primero), invitee (null en una mesa abierta; el primer invitado cuando se invitó a varios), createdAt y startedAt (milisegundos epoch, 0 antes de empezar). host(), isDuel() y seatOf(uuid) la leen.
TableSeatplayer y name. El asiento 0 es el anfitrión.
MatchStateCREATING, OPEN, STARTING, PLAYING, ENDED, en ese orden.
TableStatswins, losses, draws, played() y winRate().

TableMatch.arena siempre es null aquí: las partidas se juegan donde está cada jugador, nunca en una arena.

Eventos

EventoCancelableCuándo
TableMatchCreateEventsíUn jugador está a punto de abrir una mesa o enviar una invitación, antes de cobrar su importe; también en una mesa del mundo, cuando se sienta su primer jugador. getHost(), getInvitees() (cada jugador invitado, vacío en una mesa abierta; desde la 3.1.0), getInvitee() (el primero de ellos, o null), getGame(), getCurrency(), getStake().
TableMatchJoinEventsíUn jugador está a punto de ocupar un asiento, antes de cobrar su importe. No se lanza para el asiento del anfitrión. getMatch(), getPlayer().
TableMatchStartEventnoTodos los jugadores están sentados y se está jugando el primer turno. getMatch().
TableMatchEndEventnoUna vez por partida, incluidas las mesas que expiraron, se rechazaron o se cancelaron. getMatch(), getWinner() (null en un reembolso; el primer compañero cuando gana una pareja de Truco), getReason(), getPrize() (lo que se pagó a los ganadores en total) y getFee() (cero en un reembolso).

EndReason es WIN, DRAW, FORFEIT (los demás se fueron) o CANCELLED; isRefund() es verdadero en un empate o una cancelación. Un evento de creación o de unión cancelado no le envía nada al jugador: el plugin que lo canceló dice por qué.

Cada partida de un evento es una instantánea. Pregunta match(id) cuando necesites el estado actual. Los eventos se lanzan desde el hilo que llegó a ese paso, y se marcan como asíncronos cuando no es el hilo principal: en Folia, no toques un bloque, un chunk ni otra entidad desde un handler sin un salto de planificador propio.

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