No description
Closes the YOU500 inventory-loss path documented in AUDIT-2026-05-07.md. Bumps to 1.1.0 per CHANGELOG. F1 — void-damage guard: new EntityDamageEvent listener at HIGHEST, ignoreCancelled=true. While a UUID sits in pendingTransit, DamageCause.VOID is cancelled, the player is healed to 20.0, fall/fire reset, sync-TP back to limbo spawn. Console gets a WARN with intended TP target. This single guard would have saved YOU500's inventory. F2 — recovery on teleportAsync false / exception: replaces the previous log-only branch in doTeleport. On failure: sync-TP to limbo spawn, bump per-UUID retry counter, schedule retry after 30 ticks. After MAX_RETRIES=3 failures: leave at limbo spawn in GameMode.SPECTATOR, log SEVERE with full saved coords + reason, alert console for manual `/authlimbo tp` action. Player stays in pendingTransit across retries so F1 keeps protecting them. F4 — pre-empt AuthMe's broken teleport: new LoginEvent handler at EventPriority.LOWEST that adds the UUID to pendingTransit and sync-TPs the player to limbo spawn BEFORE AuthMe-ReReloaded's own internal post-login teleport runs. AuthMe's teleport then operates against an irrelevant location; the existing MONITOR handler still wins last with the authoritative restore. Net effect: closes the void-death window even when the saved chunk is far out and slow to load. Internal: ConcurrentHashMap-backed pendingTransit set + retryCounts map, both watchdog-timed-out after 5 s so we never leak entries on edge cases. No new Maven dependencies. Privacy invariant unchanged — F4 actually strengthens limbo-on-join by guaranteeing the limbo position is reasserted at LOGIN-LOWEST. Build: mvn -B clean package (in maven:3.9-eclipse-temurin-21 container) -> BUILD SUCCESS, AuthLimbo-1.1.0.jar produced. |
||
|---|---|---|
| .github | ||
| docs | ||
| lib | ||
| src/main | ||
| .gitignore | ||
| AUDIT-2026-05-07.md | ||
| CHANGELOG.md | ||
| LICENSE | ||
| pom.xml | ||
| README.md | ||
| ROADMAP.md | ||
auth-limbo
a small paper plugin - fixes AuthMe's broken post-login teleport
built for my server, runs there daily.
What it does
Two things.
- Void
auth_limboworld. CustomChunkGenerator, 5x5 barrier platform under spawn. AuthMe uses it as pre-auth limbo. No Multiverse-Core required. - Restore-teleport that actually works.
LoginEventlistener atMONITORpriority reads quit-location fromplugins/AuthMe/authme.db, pins destination chunk viaaddPluginChunkTicket, chainsgetChunkAtAsyncUrgentlyintoteleportAsync. No spawn-snap.
Bug background: PaperMC/Paper#4085.
Install
- Download
AuthLimbo-1.0.0.jarfrom Releases. - Drop in
plugins/. - Restart server. Don't
/reload.
Hard dep: AuthMe-ReReloaded. Plugin refuses to load without it.
For itzg/minecraft-server Docker image, see docs/installation.md.
Config
Defaults work. plugins/AuthLimbo/config.yml on first start:
limbo:
world: auth_limbo
spawn-x: 0.5
spawn-y: 128.0
spawn-z: 0.5
build-platform: true
platform-y: 127
authme:
db-path: plugins/AuthMe/authme.db
teleport-delay-ticks: 10
preload-chunks: true
debug: false
Full reference: docs/configuration.md.
Commands
| Command | Permission | Effect |
|---|---|---|
/authlimbo reload |
authlimbo.admin |
Reload config.yml. |
/authlimbo tp <player> |
authlimbo.admin |
Teleport player to saved location. |
Alias: /alimbo.
Tested
| Component | Status |
|---|---|
| Paper 1.21.11 | Yes |
| Purpur 1.21.11 | Yes |
| Folia | Untested — login event threading may differ |
| AuthMe-ReReloaded (HaHaWTH b49) | Yes |
| AuthMe-ReReloaded other 5.x forks | Untested — schema same, should work |
| Multiverse-Core | Untested — 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.
lib/AuthMe-5.6.0-FORK-Universal.jar is system-scope so build
needs no private repo credentials.
CI builds via GitHub Actions on every tag.
AGPL-3.0 — modified network-deployed builds must offer source per §13. Built by s8n-ru.