v1.0.4: Chess runs on Spigot
Chess v1.0.4
Chess v1.0.4 runs on Spigot. Where Paper's Dialog API is unavailable the board is drawn from
Bukkit inventories instead, and the plugin picks the right one automatically. Paper and Folia are
unaffected and keep the dialog board.
Added
- Inventory board: A second board rendered from Bukkit inventories, using no Paper API at all.
A chess board needs 64 squares and a chest holds 54, so it spans a six-row chest for the six
ranks furthest from you and the two rows of your own inventory nearest it for the two closest —
the two read as one continuous board. Your items are held aside while a board is open and given
back when it closes. - Automatic board selection: The plugin detects the Dialog API at startup and uses the dialog
board where it exists, the inventory board where it does not. The startup log line records which
it chose. ui.modeinsettings.yml(auto|dialog|inventory):autofollows the server.
inventoryforces the inventory board even on Paper.dialogon a server without the Dialog API
is refused with a warning rather than honoured, because honouring it would leave players with no
board at all.
Changed
- Scheduling picks a backend by platform: Paper and Folia keep the region-aware schedulers,
which Folia requires because its world state is split across region threads. Spigot uses the
legacy Bukkit scheduler. The plugin's rule is unchanged either way: authoritative game state is
mutated on the global region, which on Spigot is simply the main thread. - The clickable
[Watch Game]broadcast survives on both: Paper renders it with Adventure as
before, Spigot with the BungeeCord chat components it bundles instead, so the click and hover
work everywhere. /chess watchnow answers when spectating is unavailable instead of doing nothing. The
inventory board refuses spectators, because it borrows the viewer's own inventory to draw the
board and that is not a price to charge someone who is not playing.
Scope of the inventory board
It covers core chess: the board, moves, legal-move highlights, promotion, draw and resign.
These are dialog-board features and are inactive on the inventory board:
- Premoves, including the ghost pieces and blue highlights
- Spectating via
/chess watch - Focus mode
- The last-move highlight
- The on-board clock
The clock still runs. It is simply not drawn on the inventory board, so a player can still lose
on time there without a visible countdown. Use the dialog board on Paper if that matters to you.
Known limitation
Because the board occupies your inventory, your items are held in memory while it is open and
restored when it closes, when you resign, when you disconnect, or when the plugin disables. If the
server process is killed outright while a board is open, that in-memory copy goes with it and those
items are lost. Closing the board, ending the game, or a clean server stop all restore normally.
Configuration
settings.yml gains ui.mode above the existing ui.dialog block:
ui:
mode: auto
dialog:
...The existing ui.dialog keys are shared by both boards where they make sense, so
show-legal-moves and orientation-follows-player apply to the inventory board too. The
dialog-only keys (title, allow-escape-close, show-coordinates, show-captured-pieces,
square-button-width) are ignored when the inventory board is active.
Existing installs need no editing. Chess merges keys missing from an on-disk config with the
bundled defaults at startup, so ui.mode is added automatically and defaults to auto.
Commands
/chess duel <player> <time>
/chess accept <player>
/chess decline <player>
/chess watch <player>
/chess open
/chess help
Commands are unchanged from v1.0.3. /chess watch reports that spectating is unavailable when the
inventory board is active.
Verification
- 41 tests pass across five suites.
InventoryLayoutTestis new and pins the mapping between chess squares and inventory slots:
every square round-trips through its slot for both colours, no two squares share a slot, all 64
are placed, and the spare ninth column of each row holds no square. An error there would quietly
move the wrong piece rather than throw.- A scan of the compiled classes confirms every reference to a Paper or Adventure class sits in a
class that only loads on a server providing it — the dialog builders, the Adventure broadcaster,
and the region scheduler backend. The platform detector names those classes only as strings, so
it loads anywhere. gradle clean buildsucceeds.
Upgrade Note
Replace the previous Chess.jar and fully restart the server. Chess will overwrite
plugins/Chess/resourcepack.zip with the bundled pack during startup.
The resource pack is unchanged from v1.0.3 — the inventory board's piece models, item definition
and GUI background all shipped already. If you are coming from v1.0.2 or earlier, the pack's asset
namespace changed in v1.0.3 and the updated pack must reach clients or pieces will not render
correctly; see the v1.0.3 notes.
Chess v1.0.4 targets Java 21 and Minecraft 1.21.11 on Spigot, Paper, or Folia.
