Skip to content

v1.0.4: Chess runs on Spigot

Choose a tag to compare

@castledking castledking released this 16 Aug 23:57
· 2 commits to c2bd47fdd658a7647951f94958de8c7d3e2390a3 since this release

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.

The inventory 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.mode in settings.yml (auto | dialog | inventory): auto follows the server.
    inventory forces the inventory board even on Paper. dialog on 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 watch now 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.
  • InventoryLayoutTest is 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 build succeeds.

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.