Releases: EntonioDMI/postern
Release list
Postern 0.1.1 — Forge/Fabric 1.20.1, NeoForge/Fabric 1.21.1
0.1.0 never froze anybody — this release fixes that
If you installed 0.1.0, replace it. It looked like it worked: the server started,
it printed Postern is ready, it created its database and answered admin
commands. It also let every player join and move around freely, because its
mixins were never applied. There was no error, no warning and nothing in the
log. 0.1.0 has been withdrawn.
The cause was a single missing line: the jar manifest had no MixinConfigs
attribute. Forge 1.20.1 registers mixin configurations from that attribute and
nowhere else — the [[mixins]] block in mods.toml that the build relied on is
NeoForge's mechanism, and classic Forge does not read it for this. Without the
attribute Forge quietly rejects the jar as a mixin container and carries on.
It is worth saying plainly what this defeated: a green build, 179 passing unit
tests, a development server, and a real production server. All four were clean.
Only joining with a game client revealed it, as a ClassCastException the moment
a player connected. The build now checks the manifest before anything else and
fails with an explanation if it is missing.
Downloads
| Minecraft | Loader | File |
|---|---|---|
| 1.20.1 | Forge | postern-forge-1.20.1-0.1.1.jar |
| 1.20.1 | Fabric | postern-fabric-1.20.1-0.1.1.jar |
| 1.21.1 | NeoForge | postern-neoforge-1.21.1-0.1.1.jar |
| 1.21.1 | Fabric | postern-fabric-1.21.1-0.1.1.jar |
Server-side only — players need no client mod, and a vanilla client can connect.
Drop the jar into mods/ and start the server once; it writes
config/postern/config.yml and its language files, then creates its database.
How far this was verified
1.20.1 Forge was run on a real, reobfuscated Forge 1.20.1-47.4.10 server with
a game client joining it. Confirmed there: the freeze engages (a joined player
cannot move or interact), /register issues recovery codes, an IP session lets a
returning player back in without a password, and the admin commands answer from
the console.
Not exercised on that server: /logout, /changepassword, /recover, the
damage protection, limbo freeze mode, and the lockout after repeated wrong
passwords. They are covered by unit tests, which — as the bug above shows — is
not the same thing.
The other three jars build and pass the static checks, but no server has been
started with them. They are published so they can be tried, not because they
are known to work. If you run one, please report back.
Fixed
- A second world in one process had no authentication at all. The runtime was
built when the mod loaded, once per JVM, and torn down when the server stopped.
A dedicated server never notices; opening a LAN world, returning to the menu
and opening another one left no handlers, no commands and no packet gate. - Login did a blocking database query on the game thread, as did every join
and/postern db. On SQLite that queued behind password hashing; on MySQL it
was a network round trip inside a tick. - Players are now frozen the moment they join, before the asynchronous
decision returns. Previously there was a window with no anchor and no
protection, and a/registertyped into it answered "you already have an
account". - A frozen player stayed visible in the tab list to anyone who joined while
they were still logging in. /postern user resetpasswordandunregisterleft an online player hanging
— packets dropped, entity hidden, no message, no protection, until the timeout
kicked them./postern reloadcould not report a brokenconfig.yml. Malformed YAML
arrives as a runtime exception and onlyIOExceptionwas caught.- The password log filter was added again on every reload and could never be
removed, including when the option was turned off. - Expired sessions and stale attempt counters are now actually purged.
- The resource-pack response is no longer dropped, which was getting players
kicked from servers withrequire-resource-pack=true.
Removed
- The
premiumconfig section. It documented an auto-login mode, a Mojang
timeout and a fail-closed guarantee, and not one line of code ever read it. It
will return with the implementation. session.disable-if-proxy-detected. It promised that sessions switch off
behind a proxy "rather than being left as a silent hole". There is no proxy
detection in the mod; the switch was wired to nothing. The config now says
plainly that you must turn sessions off yourself.
Also
- Each jar declares exactly the one Minecraft version it was built for. 0.1.0
advertised[1.20.1,1.21), which would have let it load on 1.20.2+ — where the
methods its mixins target have moved. - The full LGPL-2.1 text ships in the repository and inside every jar, alongside
LICENSEandTHIRD-PARTY.md, so a jar-only recipient can see the MariaDB
Connector/J notice. - 215 tests, up from 179, covering the admin commands and the packet whitelist.