fix(mc): ONLINE_MODE=true — authlib-injector needs online handshake for skins
online-mode=false made the server skip the online-auth handshake entirely, so authlib-injector never validated sessions against Drasl: players got offline-hash UUIDs and no skin textures (everyone Steve). authlib-injector's whole purpose is to redirect the *online* handshake from Mojang to Drasl, so online-mode must be true; only the 1.21+ secure profile stays off (ENFORCE_SECURE_PROFILE=false + Drasl SignPublicKeys=false). Correct the conflation in CLAUDE.md and plan/05-minecraft.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,21 +25,30 @@ mirrors `/mods` into `/data/mods` and prunes removed ones (`REMOVE_OLD_MODS`).
|
||||
## Auth / config
|
||||
|
||||
```
|
||||
ONLINE_MODE=FALSE
|
||||
ONLINE_MODE=TRUE
|
||||
ENFORCE_SECURE_PROFILE=FALSE # pairs with drasl SignPublicKeys=false
|
||||
JVM_OPTS=-javaagent:/extras/authlib-injector.jar=http://auth.${BASE_DOMAIN}/authlib-injector
|
||||
```
|
||||
authlib URL uses the `auth` subdomain; resolves internally via the caddy alias.
|
||||
(Server still needs the agent even though Fjord clients have it built in.)
|
||||
|
||||
**`ONLINE_MODE` MUST be true.** authlib-injector works by redirecting the
|
||||
server's normal online-auth handshake from Mojang to Drasl. With
|
||||
`ONLINE_MODE=FALSE` the server skips that handshake entirely → players get
|
||||
offline-hash UUIDs, no session validation, and **no skins** (the server never
|
||||
fetches textures from Drasl). The thing that must stay *off* for 1.21+ is the
|
||||
**secure profile** (`ENFORCE_SECURE_PROFILE=FALSE` + Drasl `SignPublicKeys=false`),
|
||||
not online-mode. Symptom of getting this wrong: everyone can join but everyone is
|
||||
Steve, and `usercache.json` shows offline-hash UUIDs.
|
||||
|
||||
Memory: `INIT_MEMORY 4G`, `MAX_MEMORY 10G`, `USE_AIKAR_FLAGS TRUE`.
|
||||
RCON enabled for mc-backup.
|
||||
|
||||
## Server operators (OP)
|
||||
|
||||
**Do NOT use the itzg `OPS` env var.** It resolves usernames to UUIDs via a
|
||||
Mojang lookup, but this server is `ONLINE_MODE=FALSE` with Drasl auth — Drasl
|
||||
assigns its own UUIDs (not Mojang, not the offline-hash). A Mojang-resolved UUID
|
||||
Mojang lookup, but this server is `ONLINE_MODE=TRUE` validated against Drasl —
|
||||
Drasl assigns its own UUIDs (not Mojang, not the offline-hash). A Mojang-resolved UUID
|
||||
would not match the player's real session UUID, so the op entry would be inert
|
||||
(and could clobber a correct `ops.json` on reboot).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user