Chess turns Paper's native dialog system into a live, clickable 8x8 board. Players can challenge each other, choose a time control, and play a complete match without inventory menus, physical boards, or extra runtime dependencies.
- A native Paper dialog with 64 individually clickable squares.
- Legal-move, selected-square, last-move, and check highlighting.
- Castling, en passant, promotion, checkmate, stalemate, and insufficient-material draws.
- Seventeen clock presets, including increment modes from
1|1through15|10. - Player-relative board orientation plus an in-game flip control.
- Live clocks, captured-piece displays, draw offers, and resign confirmation.
- A bundled board resource pack with automatic ResourcePackManager integration.
- A pack-free Unicode fallback when
ui.dialog.use-glyphsis disabled. - Configurable sounds, dialog labels, player messages, request expiry, and UI behavior.
- Folia-safe scheduling for commands, game state, clocks, dialogs, and pack delivery.
- Java 21.
- Paper 1.21.11, or Folia based on the same API.
- Clients must accept the resource pack for the textured board. A Unicode fallback is available.
Chess uses Paper's native Dialog API and therefore does not run on a standard Spigot server.
ResourcePackManager is optional; the chess engine and resource pack are bundled into Chess.jar.
- Download
Chess.jarand place it in the server'spluginsdirectory. - Start or restart the server once to generate
plugins/Chess/settings.yml,messages.yml, andresourcepack.zip. - Configure resource-pack delivery:
- With ResourcePackManager installed, Chess registers its bundled pack automatically.
- Without it, host
plugins/Chess/resourcepack.zipand set its public URL atresource-pack.urlinsettings.yml. - To manage or merge the pack yourself, set
resource-pack.use-resourcepacktofalse.
- Restart after changing configuration files.
| Command | Description |
|---|---|
/chess duel <player> <time> |
Send a timed duel request. |
/chess accept <player> |
Accept that player's request and open the board. |
/chess decline <player> |
Decline that player's request. |
/chess open |
Reopen the board for your active game. |
/chess help |
Show the command reference in game. |
The time argument is minutes, optionally followed by a | and increment seconds. Available modes
are 1, 1|1, 2|1, 3, 3|2, 5, 5|2, 5|5, 10, 10|5, 15|10, 30, 60,
120, 180, 240, and 300. Tab completion lists every valid mode.
There are no permission nodes in version 1.0.0; every player can use /chess.
settings.ymlcontrols duel expiry, draw and resign timing, sounds, board rendering, and resource-pack delivery.messages.ymlcontains player-facing chat messages and MiniMessage dialog labels.
The board can follow each player's color, show or hide coordinates, legal moves, last moves, captured pieces, and clocks, and use textured glyphs or standard Unicode pieces.
Set easter-egg.enable-vertical-castling: true in settings.yml to allow vertical castling (the
Pam-Krabbé castling). Promote a pawn to a rook on your king's own file and the king may castle with
it straight up the board — it moves two squares towards the rook and the rook lands on the square
the king crossed, so white Ke1 with a promoted rook on e8 becomes Ke3, Re2. Every normal
castling restriction still applies: the king must not have moved, the file between them must be
empty, and the king may not castle out of, through, or into check. Off by default.
Chess uses Java 21 and Gradle. The rules engine is part of this repository, so there is nothing else to fetch or install.
git clone https://github.com/castledking/Chess.git
cd Chess
gradle clean buildThe publishable shaded artifact is build/libs/Chess.jar.

