diff --git a/README.md b/README.md index 2992660..1561fcc 100644 --- a/README.md +++ b/README.md @@ -1,133 +1,103 @@ -# Auth-Limbo +
+# auth-limbo + +
+ + Download latest jar + +

+ +[![Paper](https://img.shields.io/badge/Paper-1.21.11+-black?style=flat-square&logo=papermc&logoColor=white)](https://papermc.io/) +[![Java](https://img.shields.io/badge/Java-21+-black?style=flat-square&logo=openjdk&logoColor=white)](https://adoptium.net/) [![Build](https://github.com/s8n-ru/auth-limbo/actions/workflows/build.yml/badge.svg)](https://github.com/s8n-ru/auth-limbo/actions/workflows/build.yml) -[![License: AGPL--3.0](https://img.shields.io/badge/license-AGPL--3.0-lightgrey.svg)](LICENSE) -[![Paper](https://img.shields.io/badge/Paper-1.21.11%2B-lightgrey.svg)](https://papermc.io/) -[![Java](https://img.shields.io/badge/Java-21%2B-lightgrey.svg)](https://adoptium.net/) - -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 +a small paper plugin - ***fixes AuthMe's broken post-login teleport*** -Friend logs in, types `/login`, AuthMe is supposed to teleport them -back to where they were. They land at world spawn instead. Every -time. +built for my server, runs there daily. -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](https://github.com/PaperMC/Paper/issues/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. +[Issues](../../issues) · [Releases](../../releases) -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. +Two things. -1. **Void `auth_limbo` world.** A custom `ChunkGenerator` produces - 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. +1. **Void `auth_limbo` world.** Custom `ChunkGenerator`, 5x5 barrier + platform under spawn. AuthMe uses it as pre-auth limbo. No + Multiverse-Core required. +2. **Restore-teleport that actually works.** `LoginEvent` listener at + `MONITOR` priority reads quit-location from `plugins/AuthMe/authme.db`, + pins destination chunk via `addPluginChunkTicket`, chains + `getChunkAtAsyncUrgently` into `teleportAsync`. No spawn-snap. -2. **Authoritative restore-teleport.** A `LoginEvent` listener at - `MONITOR` priority fires *after* AuthMe's broken teleport, reads - the saved quit-location straight out of - `plugins/AuthMe/authme.db`, pins the destination chunk with - `Chunk#addPluginChunkTicket`, then chains - `World#getChunkAtAsyncUrgently` into an authoritative - `Player#teleportAsync`. Same pattern - [PaperLib's `AsyncTeleportPaper`](https://github.com/PaperMC/PaperLib) - uses, 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. +Bug background: [PaperMC/Paper#4085](https://github.com/PaperMC/Paper/issues/4085). --- ## Install -1. Download `AuthLimbo-1.0.0.jar` from the - [Releases page](https://github.com/s8n-ru/auth-limbo/releases). -2. Drop it in your `plugins/` directory. -3. Restart the server. Don't `/reload` — it'll break things. Just - restart. +1. Download `AuthLimbo-1.0.0.jar` from [Releases](https://github.com/s8n-ru/auth-limbo/releases). +2. Drop in `plugins/`. +3. Restart server. Don't `/reload`. -AuthMe-ReReloaded is a **hard dependency**. The plugin refuses to -load without it. +Hard dep: **AuthMe-ReReloaded**. Plugin refuses to load without it. -For the `itzg/minecraft-server` Docker image, see -[`docs/installation.md`](docs/installation.md) for the `PLUGINS:` -environment-variable form. +For `itzg/minecraft-server` Docker image, see [`docs/installation.md`](docs/installation.md). --- -## Configuration +## Config -Defaults work. `plugins/AuthLimbo/config.yml` is created on first -start. If you want to tweak: +Defaults work. `plugins/AuthLimbo/config.yml` on first start: ```yaml limbo: - world: auth_limbo # Bukkit world name + world: auth_limbo spawn-x: 0.5 spawn-y: 128.0 spawn-z: 0.5 - build-platform: true # 5x5 barrier under spawn + build-platform: true 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 + teleport-delay-ticks: 10 + preload-chunks: true +debug: false ``` -Full reference in [`docs/configuration.md`](docs/configuration.md). +Full reference: [`docs/configuration.md`](docs/configuration.md). --- ## Commands -| Command | Permission | Effect | -|----------------------------|---------------------|-----------------------------------------------------| -| `/authlimbo reload` | `authlimbo.admin` | Reload `config.yml`. | -| `/authlimbo tp ` | `authlimbo.admin` | Manually teleport a player to their saved location. | +| Command | Permission | Effect | +|---|---|---| +| `/authlimbo reload` | `authlimbo.admin` | Reload `config.yml`. | +| `/authlimbo tp ` | `authlimbo.admin` | Teleport player to saved location. | -Aliases: `/alimbo`. +Alias: `/alimbo`. --- -## What I tested +## 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`](docs/compatibility.md). | +| 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`](docs/compatibility.md) | --- @@ -138,35 +108,11 @@ 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. +`lib/AuthMe-5.6.0-FORK-Universal.jar` is `system`-scope so build +needs no private repo credentials. + +CI builds via [GitHub Actions](.github/workflows/build.yml) on every tag. --- -## 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`](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](https://github.com/s8n-ru). If this fixes your -headache too, cool. If not, file an issue, I'll look. +[AGPL-3.0](LICENSE) — modified network-deployed builds must offer source per §13. Built by [s8n-ru](https://github.com/s8n-ru).