Repository navigation
v1.7.2 — the optional plugin: held players cannot be hurt, and the commands turn blue
The optional server plugin
There is one thing a firewall in front of a server cannot do, and it is the thing people notice: stop a held player being hurt. A player waiting at the login prompt is genuinely standing in your world, and only the server decides their health. Until now the best available was to notice the damage and disconnect them before they died — a reconnect instead of an inventory, which is better than nothing and not the same as fixing it.
This release adds the part that goes inside the server.
The Protection page finds your server and installs it for you. It shows you the exact path first and writes nothing until you approve that path. About four kilobytes, compiled against the Minecraft 1.8 API using only calls that have existed since then, so one file works on every version this firewall supports and on versions that do not exist yet. The source is in plugin/ and is short enough to read in a couple of minutes.
With it installed, a player at the login prompt:
- cannot be hurt at all — not by mobs, falling, drowning, the void, fire, or hunger
- cannot be moved by anything in the world
- sees
/login,/registerand/premiumin blue, as real commands, and finds them in/help— which is where somebody actually works out how to claim their name
Everything still works without it. Nothing waits for it, no message depends on it, and a server without it behaves exactly as it did before it existed. Identity.UseServerPlugin turns it off entirely.
It never decides anything
Who is held, and for how long, is the firewall's judgement alone; the plugin holds whoever it is told to hold. A plugin that decided for itself would be a second implementation of the login rules, free to disagree with the first. It is also deliberately not allowed to look at the world — that would be the shadow world model this project already rejected for the anti-cheat, in a place where it is even harder to reason about.
The channel is closed at both ends
Instructions travel on the player's own connection and the format has no field for a name, so a message cannot be aimed at anybody else. The plugin cannot tell an instruction the firewall injected from one a player sent — so the firewall drops anything a client sends on that channel, unconditionally, not as an inspection setting. Tested with a byte-identical forged instruction.
Installing is the careful part
It writes into software this project does not own, and the server folder is found by a heuristic. So: the exact absolute path is approved before anything is written, a missing plugins folder is treated as evidence the wrong directory was found rather than something to create, and the only filename ever written or deleted is our own.
One thing to be aware of: the plugin builds, packages and installs correctly, and that whole path is verified. It has not been loaded on a live Minecraft server from here — there isn't one on the build machine. If it misbehaves on yours, the source is right there and it is forty lines.
646 tests. Windows 10/11, x64.