Commit graph

5 commits

Author SHA1 Message Date
s8n
afea34badc fix(login): F1+F2+F4 — void-death guard, retry recovery, AuthMe pre-empt
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.
2026-05-07 17:50:00 +01:00
s8n-ru
7f081b2a5c License: switch to AGPL-3.0-or-later
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
2026-04-30 19:31:34 +01:00
s8n-ru
cb746147f0 Rename: LoginLimbo -> AuthLimbo
User wants name to literally be 'auth-limbo' to match the auth_limbo
world the plugin manages. Same functionality, same code, just renamed.
2026-04-30 19:19:26 +01:00
s8n-ru
9e0ed01321 Rename: RackedLimbo -> LoginLimbo
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]
2026-04-30 18:52:36 +01:00
s8n-ru
8cd92694e7 Initial commit: RackedLimbo 1.0.0
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.
2026-04-30 18:23:13 +01:00