readme: restyle to match minecraft-launcher format
Some checks failed
Build / build (push) Has been cancelled
Some checks failed
Build / build (push) Has been cancelled
Centered hero header with chunky black Download badge, small chip badges below, em-dash tagline, single-line nav row. Sections trimmed, license collapsed to <sub> footer line. Same visual language as s8n-ru/minecraft-launcher README.
This commit is contained in:
parent
a5bd58c577
commit
b6863806cd
1 changed files with 57 additions and 111 deletions
168
README.md
168
README.md
|
|
@ -1,133 +1,103 @@
|
||||||
# Auth-Limbo
|
<div align="center">
|
||||||
|
|
||||||
|
# auth-limbo
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<a href="https://github.com/s8n-ru/auth-limbo/releases/latest">
|
||||||
|
<img src="https://img.shields.io/badge/Download_.jar-black?style=for-the-badge&logoColor=white&labelColor=black&color=white" height="60" alt="Download latest jar">
|
||||||
|
</a>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
[](https://papermc.io/)
|
||||||
|
[](https://adoptium.net/)
|
||||||
[](https://github.com/s8n-ru/auth-limbo/actions/workflows/build.yml)
|
[](https://github.com/s8n-ru/auth-limbo/actions/workflows/build.yml)
|
||||||
[](LICENSE)
|
|
||||||
[](https://papermc.io/)
|
|
||||||
[](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
|
built for my server, runs there daily.
|
||||||
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
|
[Issues](../../issues) · [Releases](../../releases)
|
||||||
[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.
|
|
||||||
|
|
||||||
Filed a mental bug report against AuthMe, decided writing my own
|
</div>
|
||||||
listener was faster than waiting on a fork.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|
||||||
Two things and that's it.
|
Two things.
|
||||||
|
|
||||||
1. **Void `auth_limbo` world.** A custom `ChunkGenerator` produces
|
1. **Void `auth_limbo` world.** Custom `ChunkGenerator`, 5x5 barrier
|
||||||
empty chunks. A 5x5 barrier platform sits under spawn so unauth
|
platform under spawn. AuthMe uses it as pre-auth limbo. No
|
||||||
players don't fall forever. No daylight cycle, no weather, no mob
|
Multiverse-Core required.
|
||||||
spawning, no PvP. AuthMe uses it as the pre-auth limbo. No
|
2. **Restore-teleport that actually works.** `LoginEvent` listener at
|
||||||
Multiverse-Core needed.
|
`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
|
Bug background: [PaperMC/Paper#4085](https://github.com/PaperMC/Paper/issues/4085).
|
||||||
`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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
1. Download `AuthLimbo-1.0.0.jar` from the
|
1. Download `AuthLimbo-1.0.0.jar` from [Releases](https://github.com/s8n-ru/auth-limbo/releases).
|
||||||
[Releases page](https://github.com/s8n-ru/auth-limbo/releases).
|
2. Drop in `plugins/`.
|
||||||
2. Drop it in your `plugins/` directory.
|
3. Restart server. Don't `/reload`.
|
||||||
3. Restart the server. Don't `/reload` — it'll break things. Just
|
|
||||||
restart.
|
|
||||||
|
|
||||||
AuthMe-ReReloaded is a **hard dependency**. The plugin refuses to
|
Hard dep: **AuthMe-ReReloaded**. Plugin refuses to load without it.
|
||||||
load without it.
|
|
||||||
|
|
||||||
For the `itzg/minecraft-server` Docker image, see
|
For `itzg/minecraft-server` Docker image, see [`docs/installation.md`](docs/installation.md).
|
||||||
[`docs/installation.md`](docs/installation.md) for the `PLUGINS:`
|
|
||||||
environment-variable form.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Configuration
|
## Config
|
||||||
|
|
||||||
Defaults work. `plugins/AuthLimbo/config.yml` is created on first
|
Defaults work. `plugins/AuthLimbo/config.yml` on first start:
|
||||||
start. If you want to tweak:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
limbo:
|
limbo:
|
||||||
world: auth_limbo # Bukkit world name
|
world: auth_limbo
|
||||||
spawn-x: 0.5
|
spawn-x: 0.5
|
||||||
spawn-y: 128.0
|
spawn-y: 128.0
|
||||||
spawn-z: 0.5
|
spawn-z: 0.5
|
||||||
build-platform: true # 5x5 barrier under spawn
|
build-platform: true
|
||||||
platform-y: 127
|
platform-y: 127
|
||||||
|
|
||||||
authme:
|
authme:
|
||||||
db-path: plugins/AuthMe/authme.db
|
db-path: plugins/AuthMe/authme.db
|
||||||
teleport-delay-ticks: 10 # ticks to wait after LoginEvent
|
teleport-delay-ticks: 10
|
||||||
preload-chunks: true # forceload chunk before teleport
|
preload-chunks: true
|
||||||
|
debug: false
|
||||||
debug: false # verbose logging
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Full reference in [`docs/configuration.md`](docs/configuration.md).
|
Full reference: [`docs/configuration.md`](docs/configuration.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
| Command | Permission | Effect |
|
| Command | Permission | Effect |
|
||||||
|----------------------------|---------------------|-----------------------------------------------------|
|
|---|---|---|
|
||||||
| `/authlimbo reload` | `authlimbo.admin` | Reload `config.yml`. |
|
| `/authlimbo reload` | `authlimbo.admin` | Reload `config.yml`. |
|
||||||
| `/authlimbo tp <player>` | `authlimbo.admin` | Manually teleport a player to their saved location. |
|
| `/authlimbo tp <player>` | `authlimbo.admin` | Teleport player to saved location. |
|
||||||
|
|
||||||
Aliases: `/alimbo`.
|
Alias: `/alimbo`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What I tested
|
## Tested
|
||||||
|
|
||||||
| Component | Status | Notes |
|
| Component | Status |
|
||||||
|-----------------------------------|----------|----------------------------------------|
|
|---|---|
|
||||||
| Paper 1.21.11 | Yes | Primary target. |
|
| Paper 1.21.11 | Yes |
|
||||||
| Purpur 1.21.11 | Yes | Same Paper API surface. |
|
| Purpur 1.21.11 | Yes |
|
||||||
| Folia | Unknown | Untested. Login event threading may differ. |
|
| Folia | Untested — login event threading may differ |
|
||||||
| AuthMe-ReReloaded (HaHaWTH b49) | Yes | Verified on production. |
|
| AuthMe-ReReloaded (HaHaWTH b49) | Yes |
|
||||||
| AuthMe-ReReloaded other 5.x forks | Untested | Schema is the same, should work. |
|
| AuthMe-ReReloaded other 5.x forks | Untested — schema same, should work |
|
||||||
| Multiverse-Core | Untested | Not required. Possible teleport-intercept conflict — see [`docs/compatibility.md`](docs/compatibility.md). |
|
| 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.
|
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
|
`lib/AuthMe-5.6.0-FORK-Universal.jar` is `system`-scope so build
|
||||||
a `system`-scope dep so the build doesn't need any private repo
|
needs no private repo credentials.
|
||||||
credentials.
|
|
||||||
|
CI builds via [GitHub Actions](.github/workflows/build.yml) on every tag.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Why not just use Multiverse-Core for the void world?
|
<sub>[AGPL-3.0](LICENSE) — modified network-deployed builds must offer source per §13. Built by [s8n-ru](https://github.com/s8n-ru).</sub>
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue