Skip to content

v1.0.3: premovable castling, the vertical castling easter egg, and an in-tree engine

Choose a tag to compare

@castledking castledking released this 16 Aug 18:11

Chess v1.0.3

Chess v1.0.3 fixes two premove bugs from v1.0.2 — castling could not be queued as a premove, and
premoving a capture onto a checked king drew a missing-glyph box — and adds an opt-in vertical
castling easter egg. Internally the chess engine now lives inside the plugin, so Chess no longer
depends on an external engine artifact.

Fixed

  • Castling is premovable again: Castling could not be queued as the first premove. The
    premove generator offered a king only its eight adjacent squares, so the two-square castling
    destination was rejected and the whole queue was cancelled. Because only the head of the queue
    is validated at queue time, castling already worked from the second position onwards, which is
    why this went unnoticed in v1.0.2. Both premove generators now offer castling: the one used for
    a selected piece, and the one used for a ghost selection on the projected board.
  • Premoving a capture onto a checked king no longer renders a raw glyph box: That square is
    both the checked king's square and a premove destination, so it took the red check wash while
    displaying the capturing piece as a ghost. The pack bakes the check wash for the two kings only
    — nothing else can be in check — so the result was a request for a codepoint the pack does not
    declare, and the client drew a tofu box. Such a square now stays premove blue and shows the
    ghost piece, which is also what it means: by the time the premove plays, the king may have moved
    away. Premove source squares follow the same rule, so a king premoved out of check shows its
    origin in premove blue rather than check red.

Added

  • Vertical castling easter egg (easter-egg.enable-vertical-castling, default false): The
    Pam-Krabbé castling. Promote a pawn to a rook on your king's own file and that rook has never
    moved, so the king may castle with it straight up the board — the king moves two squares towards
    it and the rook lands on the square the king crossed. White Ke1 with a promoted rook on e8
    becomes Ke3, Re2; Black castles the same way down the board. 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. Both squares up the file highlight — the
    first as an ordinary king step, the second as the castle — and the move is premovable like any
    other castling.

Changed

  • The chess engine is now vendored in-tree: The engine's rules, board, and game implementations
    live in the plugin under codes.castled.chess.engine, the same package the build previously
    relocated them to. The shipped JAR layout is unchanged, and the plugin still has no runtime
    engine dependency. Chess no longer needs the external pocket-chess-api and pocket-chess-common
    artifacts, and the Guice compile dependency is gone with them.
  • Castling is derived from board geometry rather than fixed squares: Move results now carry the
    rook's half of a castling move instead of a flag, so the rook's squares are no longer re-derived
    from the king's destination file. Castling rights track unmoved rooks by square rather than
    king-side and queen-side flags. Standard and vertical castling run through the same code.
  • Promotion is applied by the engine: Choosing a promotion piece previously wrote to the board
    directly, so the engine never learned a promotion had happened. It now goes through the engine,
    which is what lets a promoted rook count as never having moved.

Resource Pack

  • The pack namespace changed from pocketchess to chess. assets/pocketchess/ is now
    assets/chess/, and the board font is addressed as chess:board. Everything inside the pack
    already used the minecraft namespace and is unaffected.
  • The pack.mcmeta description is now Chess, replacing a leftover generated string.
  • No textures or codepoints were added or removed this release.

The pack SHA-1 has therefore changed and clients will redownload it, even though the board
looks identical.

Configuration

settings.yml gains an easter-egg section:

easter-egg:
  enable-vertical-castling: false

Existing installs do not need editing. Chess merges any keys missing from an on-disk config with
the bundled defaults at startup, so the new section is added automatically and the easter egg stays
off until it is switched on.

Commands

/chess duel <player> <time>
/chess accept <player>
/chess decline <player>
/chess watch <player>
/chess open
/chess help

Commands are unchanged from v1.0.2.

Verification

  • 35 tests pass across four suites: CastlingTest (23), PremoveTest (8), GlyphPackContractTest
    (3), and DialogContentGrowthTest (1).
  • CastlingTest covers standard king-side and queen-side castling, blocked paths, castling through
    an attacked square, lost rights, the vertical easter egg on and off, and the premove behaviour of
    each.
  • GlyphPackContractTest is new. It walks every combination of piece, highlight, and square colour
    and asserts the resource pack declares the codepoint the plugin emits. A missing glyph is
    invisible to every other test — the dialog still builds and only a screenshot shows the damage —
    so this pins the contract between the code and board.json.
  • 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 updated bundled pack during startup.

Because the pack's asset namespace changed, this release requires the updated pack to reach
clients; running v1.0.3 against the v1.0.2 pack leaves the board font unresolved, and pieces will
not render correctly. If ResourcePackManager merges the Chess pack, allow it to rebuild and
redistribute the combined pack. If the pack is hosted or merged manually, replace that external
copy with the new plugins/Chess/resourcepack.zip. Players may need to reconnect after the
updated pack is available.

Chess v1.0.3 continues to target Paper 1.21.11, Java 21, and compatible Folia servers.