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.
User chose AGPL-3.0 to match AuthMe's GPLv3 lineage but with §13
network-distribution clause. This forces server hosts running modified
forks to share source with players who connect.
Changes:
- LICENSE: full AGPL-3.0 text
- README.md: badge + license section explaining §13 implication
- pom.xml: <licenses> block
- src/main/java/ru/authlimbo/*.java: SPDX header on all 5 files
Plugin renamed for clarity. Same functionality. Old name was tied
to racked.ru brand; new name describes what it does.
- Java package ru.racked.limbo -> ru.loginlimbo
- Main class RackedLimbo -> LoginLimbo
- Jar LoginLimbo-1.0.0.jar
- Command /loginlimbo (alias /llimbo)
- Permission loginlimbo.admin
- Log prefix [LoginLimbo]
Auth-limbo + login-restore fix for Paper 1.21+. Bypasses the
AuthMe `teleportOnLogin` race (PaperMC/Paper#4085) by listening at
MONITOR priority, reading the player's saved quit-location from
AuthMe's SQLite DB, pinning the destination chunk via
addPluginChunkTicket, then chaining getChunkAtAsyncUrgently and
teleportAsync.
Bundles a void auth_limbo world via custom ChunkGenerator so the
plugin removes the need for Multiverse-Core for offline-mode auth flows.