| .github | ||
| docs | ||
| lib | ||
| src/main | ||
| .gitignore | ||
| CHANGELOG.md | ||
| LICENSE | ||
| pom.xml | ||
| README.md | ||
Auth-Limbo
A small Paper plugin I wrote because AuthMe's post-login teleport kept dumping my players at world spawn instead of where they last were. Tried every config flag, removed Multiverse, tried forks. Nothing fixed it. So this does.
Two jobs: hosts a void auth_limbo world (so I could stop running
Multiverse-Core for one world I never visited) and replaces AuthMe's
broken post-login teleport with one that actually works.
The problem
Friend logs in, types /login, AuthMe is supposed to teleport them
back to where they were. They land at world spawn instead. Every
time.
Spent a day chasing this. Disabled Multiverse-Core. Disabled GrimAC. Disabled UnexpectedSpawn. Disabled Essentials. Even ran with just AuthMe loaded and the bug stayed.
Eventually traced it to
PaperMC/Paper#4085 —
Player#teleportAsync resolves before the destination chunk loads,
Paper's safety logic snaps the player to the nearest loaded chunk,
and that chunk is world spawn. AuthMe's teleportOnLogin flow walks
right into it.
Filed a mental bug report against AuthMe, decided writing my own listener was faster than waiting on a fork.
What it does
Two things and that's it.
-
Void
auth_limboworld. A customChunkGeneratorproduces empty chunks. A 5x5 barrier platform sits under spawn so unauth players don't fall forever. No daylight cycle, no weather, no mob spawning, no PvP. AuthMe uses it as the pre-auth limbo. No Multiverse-Core needed. -
Authoritative restore-teleport. A
LoginEventlistener atMONITORpriority fires after AuthMe's broken teleport, reads the saved quit-location straight out ofplugins/AuthMe/authme.db, pins the destination chunk withChunk#addPluginChunkTicket, then chainsWorld#getChunkAtAsyncUrgentlyinto an authoritativePlayer#teleportAsync. Same pattern PaperLib'sAsyncTeleportPaperuses, just narrower.
That's the whole surface area. No password handling, no permissions beyond admin commands, no register flow, no chat formatting. AuthMe owns all of that.
Install
- Download
AuthLimbo-1.0.0.jarfrom the Releases page. - Drop it in your
plugins/directory. - Restart the server. Don't
/reload— it'll break things. Just restart.
AuthMe-ReReloaded is a hard dependency. The plugin refuses to load without it.
For the itzg/minecraft-server Docker image, see
docs/installation.md for the PLUGINS:
environment-variable form.
Configuration
Defaults work. plugins/AuthLimbo/config.yml is created on first
start. If you want to tweak:
limbo:
world: auth_limbo # Bukkit world name
spawn-x: 0.5
spawn-y: 128.0
spawn-z: 0.5
build-platform: true # 5x5 barrier under spawn
platform-y: 127
authme:
db-path: plugins/AuthMe/authme.db
teleport-delay-ticks: 10 # ticks to wait after LoginEvent
preload-chunks: true # forceload chunk before teleport
debug: false # verbose logging
Full reference in docs/configuration.md.
Commands
| Command | Permission | Effect |
|---|---|---|
/authlimbo reload |
authlimbo.admin |
Reload config.yml. |
/authlimbo tp <player> |
authlimbo.admin |
Manually teleport a player to their saved location. |
Aliases: /alimbo.
What I tested
| Component | Status | Notes |
|---|---|---|
| Paper 1.21.11 | Yes | Primary target. |
| Purpur 1.21.11 | Yes | Same Paper API surface. |
| Folia | Unknown | Untested. Login event threading may differ. |
| AuthMe-ReReloaded (HaHaWTH b49) | Yes | Verified on production. |
| AuthMe-ReReloaded other 5.x forks | Untested | Schema is the same, should work. |
| Multiverse-Core | Untested | Not required. Possible teleport-intercept conflict — see docs/compatibility.md. |
Build from source
mvn clean package
Shaded jar lands at target/AuthLimbo-1.0.0.jar. Java 21, Maven 3.9.
Standard. The lib/AuthMe-5.6.0-FORK-Universal.jar is referenced as
a system-scope dep so the build doesn't need any private repo
credentials.
Why not just use Multiverse-Core for the void world?
Multiverse-Core does a dozen things. I needed one void world. Also Multiverse intercepts teleports for portals and respawn, which is the exact contention I was running from. This plugin is ~400 lines and only manages the one world AuthMe needs. If you already run Multiverse for legit reasons, ignore the limbo manager and just use the teleport fix.
License
AGPL-3.0. See LICENSE.
If you run a modified version of this plugin on a Minecraft server that players connect to over the network, AGPLv3 §13 requires you to offer the modified source to those players. Unmodified use carries no obligation beyond GPLv3 (no source-sharing required).
Author
Built by s8n-ru. If this fixes your headache too, cool. If not, file an issue, I'll look.