Playing a match
The lobby, opening a table and inviting players, tables in the world, choosing the stake, the match itself, the payout and every way a match ends.
Finding a match
Every way in leads to the same tables:
| Way | What it does |
|---|---|
/games | Opens ExyliaLib's games catalogue. Under Tabletop, every game the server has on has a card with its seats and the players at it right now; clicking one opens its lobby. |
/tabletop | The same screen, on this plugin's games alone. |
/<game> | Opens that game's lobby: /ttt, /poker, /battleship. |
/<game> create [amount] [currency] | Opens a table anybody may take. |
/<game> duel <player> [player...] [amount] [currency] | Invites one player or several. |
| A table in the world | Click it to sit down. See Tables in the world. |
The lobby
The lobby lists the game's open tables, oldest first, and follows them live: a table somebody opens or fills appears or vanishes while the screen is open, and its age counts up. Tables in the world are not listed: they are joined where they stand.
| Item | What it does |
|---|---|
| A table | The host's head, the stake, the pot once every seat is taken, the currency and how long it has been listed. A click asks "Stake … against …? The winner takes …" and seats you on a yes. |
| YOUR TABLE | Your own table, while it waits. A click closes it and refunds your stake. |
| OPEN A TABLE | Asks for the stake and opens a table. Replaced by CLOSE YOUR TABLE while you host one. |
| YOUR RECORD | Your wins, losses, draws and win rate at this game, the open tables, the matches being played and the server fee. |
| CHALLENGE A PLAYER | How to invite players: /<game> duel <player> [player...] <amount>. |
Choosing the stake
Whatever is left out of the command is asked:
- The seats, only when a host opens a table of a game for more than two: a choice dialog lists every
count from 2 up to the game's
players(2 or 4 for Truco). Aduelis never asked: it seats the players invited and the host. - The currency, only when the player may play for more than one and typed no amount. A choice dialog lists them.
- The stake, in an amount dialog that states the minimum (and the maximum, when there is one).
An amount typed in the command uses the server's default currency when the player may use it, and the first
currency offered otherwise. Amounts accept the short forms of ExyliaLib's economy, such as 2.5k.
Every seat pays the same stake, the host's included: the host's stake is held as soon as the table opens, each guest's as they sit down.
When a seat is refused
| Refused because | The player reads |
|---|---|
| No currency they may use is offered | There is no currency you can play for. |
| The currency typed is not offered | … can't be staked here. |
| Not a positive amount | That is not an amount you can stake. |
Under wager.minimum or over wager.maximum | The smallest stake is … / The largest stake is … |
| They cannot afford it | You need … to take that seat. |
| They are already at a table | You are already at a table. |
| A duel invites more players than the game seats | … seats at most … players. |
tables.only is on and they open a table by command | Matches are played at the tables: walk up to one and click it. |
| Another plugin holds them | You are busy in … |
| Another plugin advises against seating them | Its own reason. |
Two attempts inside matches.join-cooldown | Slow down. Try again in … |
| The game is switched off | … is not available on this server. |
| The escrow is still settling the last run | Tables are closed for a moment. Try again shortly. |
Every check runs before anything is charged. A charge that fails answers "Your stake could not be taken. Nothing was charged."
Tables and invitations
- One table at a time. A player has one table, open, invited or played, across the whole server.
- An open table seats as many players as its host picked. It waits in the lobby for
matches.open-expiry(10 minutes). If nobody fills it, it is closed and every stake refunded. When it opens, the whole server reads "… opened a … table for …" with a clickable [JOIN] that opens the game's lobby. The announcement goes out on ExyliaLib'stabletop-tableschannel, which each player can mute in/settings. Invitations and tables in the world are not announced. - An invitation goes to one player or several, and seats exactly them and the host: its seats are kept
for them, nobody else may take one. It reaches each of them as a centred block in chat, with the game,
the stake, the pot and clickable ACCEPT and DECLINE buttons, and waits
matches.invite-expiry(60 seconds)./<game> accept [player]and/<game> deny [player]answer it too; without a name they answer the newest. If every invitee declines, the host is refunded; if some decline and the rest sat down, the host may start with them. - Tables of more than two start when every seat is taken. Each new player is announced to the table
with the seats left and the command others join with. Once enough are seated, the host gets a clickable
START button and may also type
/<game> startto begin without waiting. Enough is two, except where the game cannot be played by fewer: a Truco table of four starts only when full. - Before the start, a guest who leaves gets their seat and stake back; a host who leaves or types
/<game> cancelcloses the table and every stake is refunded.
Tables in the world
An admin sets a table down for one game with /tabletopadmin table create <game>, by clicking the chairs
round it (see Commands). A hologram over it says
whether it is free, how many have sat down and for what stake, or who is playing; each free chair is
marked.
- The first player to click a free table sets the stake, pays it and sits down as its host. The table seats as many as it has chairs, up to what its game seats.
- The next players click it, confirm "Sit down at …'s … table for …? The winner takes …", pay the same stake and sit down on the next free chair.
- It starts when every chair is taken, or when the host clicks the table again with at least two
seated. A table that does not fill within
tables.fill-time(90 seconds) is closed, every stake refunded and everyone stood up.
Players are brought to their chair and sit down on it (tables.sit). Sneaking stands a player up before
the start, which gives them their seat and stake back; once the match starts the seat holds. The match is
played there, with no room: whoever stands within tables.watch-radius (12 blocks) watches the boards,
while hands, dice under a cup, fleets and hidden picks stay hidden from them. With tables.only on, these
tables are the only way to play.
The match
When the table fills, each player is seated where they stand (or on their chair at a table in the
world): nobody is sent anywhere else, and their inventories stay theirs. A countdown title
(matches.start-delay, 3 seconds) names the opponents, then:
- The room. A closed dark room goes up round each player with the countdown, only for them, and other
players are hidden from them meanwhile. It is styled by
roominconfig.yml. Tables in the world have none. - The board. The game is drawn in front of their eyes, on a dark board with a softly lit frame, under a heading with the game and the pot.
- The side panels. How the game is played stands on their left, how it is won on their right, a turn
of the head away (
guideinconfig.yml). - The clock. A boss bar says whose turn it is and how long is left.
- Kept in the room. With
arena.freezeon, they may walk around inside their room, never out of it. - The hotbar. Their own items are out of sight; the last slot holds a LEAVE MATCH button, and right-clicking it asks to confirm and forfeits.
The crosshair plays the game: what can be clicked glows under it with a soft sound, and a left or right click presses it. In turn-based games whoever moves first is drawn at random, so hosting is never an advantage. A turn that runs out is played for the player with an automatic move; it is never a forfeit. See Games for what each game plays.
While a match is up the player cannot be hurt, does not get hungry, cannot drop, pick up, break or place
anything, and cannot move items in their inventory. Commands are blocked, except the game's own commands
(so /ttt leave works) and those listed in arena.allowed-commands (msg, r, tell by default). A
blocked command answers "Leave the match with /ttt leave first."
The result
| Outcome | What happens |
|---|---|
| A win | The winner takes the pot less the server fee: "You won …! (server fee …)" and a VICTORY title. Every other player reads "You lost …" and a DEFEAT title. |
| A win by a pair (Truco for four) | The pot less the server fee is split evenly between the two partners; each reads their own share. |
| A draw | Every stake is refunded, with a DRAW title. |
The verdict also lands on each board, and stays there for three seconds before the room is taken down.
The server fee is wager.fee-percent (5% by default) of the pot, rounded down to the currency's
decimals so rounding favours the winner. The fee is not paid to anyone: it leaves the economy. A winner with
exyliatabletop.bypass.fee keeps the whole pot.
Every finished match counts for every seat: a win for the winner (for each partner of a winning pair), a loss for the others, a draw for all. Matches called off are not counted.
How a match ends
| What happens | What it costs |
|---|---|
| The game plays out | Paid or refunded as the result says. |
/<game> leave (asked to confirm), quitting, dying, a teleport not made by a plugin, changing world | The player forfeits. In a game of two, the opponent wins the pot. In a game of more, the player is taken out, their stake stays in the pot and the rest play on; the last one left wins. |
| A player leaves during the start countdown | The match is called off and every stake refunded. |
| The match outlasts its game's time limit | Called off and every stake refunded. The limit is worked out from the game's turn time and length (Ludo has its own max-duration; Truco and Escoba allow an hour). |
| An admin calls it off | Every stake refunded: "The match was called off. Every stake was refunded." |
| The server stops or the plugin is disabled | Every table, waiting or played, is called off and refunded. |
Dying in a match keeps the inventory and the levels. /tabletopadmin reload does not touch matches under
way: they are left to finish, and a game switched off only refuses new tables.
A teleport whose cause is a plugin (or unknown) does not forfeit a match, so another plugin moving a player does not cost them their stake. A teleport by command, an ender pearl or a portal does; so does any change of world.
Something missing on this page? Tell us on Discord