Skip to content

v1.0.7: a copied server no longer knocks another off the network

Latest

Choose a tag to compare

@castledking castledking released this 16 Sep 23:17

Chess v1.0.7

Chess v1.0.7 fixes cross-server play when two servers share a server key. That happens when
settings.yml is copied from one server to another. Before this release, the two servers took
turns disconnecting each other every few seconds. The console filled with
hub closed the link (replaced by a newer connection); reconnecting. and the castled.codes
dashboard showed both servers' players appearing and disappearing.

Fixed

Servers sharing a key

  • The first server keeps its connection. When a second server connects with a key already in
    use, the network checks whether the first server is still there. If it is, the newcomer is
    refused rather than replacing it. If it is not, the newcomer takes over as a normal reconnect.
  • The copied server fixes itself. On being refused, it generates a new
    network.server-key, saves it to settings.yml, and rejoins as a separate server. There is
    nothing to edit by hand, and it logs a warning explaining what happened.
  • Older versions stop retrying. A server still on v1.0.6 or earlier is refused once and stays
    offline from the network, instead of fighting the other server for the key. Update it, or
    delete network.server-key from its settings.yml and restart, to bring it back.
  • Late disconnects are ignored. A disconnect reported by an old connection can no longer drop
    the current one or schedule a second reconnect.

Server keys are no longer shared

The online player list sent to each server used to include every other server's key, which is
the credential a server connects with. Servers are now named by a one-way hash of their key, and
each server receives the list without its own players.

Configuration

No new settings. network.server-key is still generated on first start, and v1.0.7 rewrites it
only when the network reports the key is already in use by another server.

Commands

/chess duel <player> <time>
/chess duelcpu <1-10> <time>
/chess accept <player>
/chess decline <player>
/chess watch <player>
/chess open
/chess help

Commands are unchanged from v1.0.6.

Verification

  • gradle clean build succeeds, with 85 tests passing.
  • The network is tested to refuse a second live server with the same key while keeping the first
    server's players listed, and to let a genuine reconnect replace a connection that has stopped
    responding.
  • Messages from a connection that does not hold a key are tested to have no effect on the server
    that does.
  • The online player list and live game list are tested never to contain a server key.
  • The plugin is tested to renew its key only when refused for a shared key, and to stop after
    three attempts.

Upgrade Note

Replace the previous Chess.jar and fully restart the server. The resource pack is unchanged
from v1.0.6.

If you run a copy of another server, you do not need to do anything: the copy gets its own key
the first time it connects.

Chess v1.0.7 targets Java 21 and Minecraft 1.21.11 on Spigot, Paper, or Folia.