Repository navigation
v1.7.1 — fixes a 1.7.0 disconnect, and colours the login messages
If you are on 1.7.0, update. It disconnects players for reading a long message.
The disconnect
Minecraft's compressed frame format carries a declared uncompressed length, and both ends enforce a rule about it that is easy to miss: a payload at or above the negotiated threshold must be compressed, one below it must not be. Every packet this proxy composed itself was sent uncompressed, on a belief written into the code as a comment — that the format allowed it whatever the threshold was.
It does not. The explanation of what locking your name means is 312 bytes and the default threshold is 256, so asking the question kicked you:
Internal Exception: io.netty.handler.codec.DecoderException:
java.lang.IllegalStateException: Actual uncompressed size 312 is greater than threshold 256
The threshold is now read from the backend's own Set Compression rather than assumed, and nothing is sent before it is known. All three encodings are picked correctly, boundary included — exactly-at-threshold is legal compressed and illegal uncompressed, which is where an off-by-one disconnects one player in a million and is never found.
Coloured login messages
Using the codes every server owner already knows — &c red, &l bold, &r reset; § works too. Every message is still yours to edit.
An ampersand only counts as a code when what follows is a lowercase letter or a digit, so "Q&A" in your own text survives untouched.
A premium lock now survives a restart
Setting one told the player, in those words, that only their account could ever use the name again. It lasted until the next restart — and failed open: the name went back to being usable by anyone, and the UUID pin recorded for it sat unused, because a pin is only consulted while the name is currently locked.
That is fixed for both ways a lock is made at runtime: a player proving their account, and an administrator clicking Lock on the Players page. Locks that your configuration file declares stay unpersisted, because the file owns those and a cache would quietly overrule the file you edited.
A backend that hangs up is no longer a stack trace
It was logged as an unhandled error, forty lines, at error level, naming nothing you could act on. Now it is one line — and if IP forwarding is on, it says so, because a server not configured to expect the header drops every connection the moment it arrives and that looks exactly like this.
627 tests. Windows 10/11, x64. Nothing to install first.