# Minecraft server — itzg NeoForge ## Summary `itzg/minecraft-server:java21`, NeoForge 1.21.1, offline-mode + authlib-injector pointing at drasl. Mods via `PACKWIZ_URL`. itzg installs MC + NeoForge + libraries + server mods on first boot and re-syncs on restart; the stack assumes the internet is present, so `TYPE=NEOFORGE` boots normally every time. ## Server config ``` TYPE=NEOFORGE, VERSION=1.21.1, NEOFORGE_VERSION=21.1.x PACKWIZ_URL=http://pack.${BASE_DOMAIN}/pack.toml ``` First boot installs MC + NeoForge + libraries + server mods into the `mc_data` volume. Subsequent boots re-sync the pack against `PACKWIZ_URL`. ## Auth / config ``` ONLINE_MODE=FALSE 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.) Memory: `INIT_MEMORY 4G`, `MAX_MEMORY 10G`, `USE_AIKAR_FLAGS TRUE`. RCON enabled for mc-backup. ## Tasks - [ ] Compose: authlib URL `http://auth.${BASE_DOMAIN}/authlib-injector` - [ ] Compose: `PACKWIZ_URL=http://pack.${BASE_DOMAIN}/pack.toml` - [ ] Mount `./runtime` for authlib-injector.jar at `/extras` - [ ] `depends_on`: drasl + caddy (pack served before server installs) - [ ] Confirm `ENFORCE_SECURE_PROFILE=FALSE` ↔ drasl `SignPublicKeys=false` - [ ] Verify a client joins with their drasl skin