76 lines
5.5 KiB
Markdown
76 lines
5.5 KiB
Markdown
|
|
# Research: 2b2t Queue / Login Gatekeeper
|
||
|
|
|
||
|
|
Read-only reference for AuthLimbo v2 design. Last updated 2026-05-07.
|
||
|
|
|
||
|
|
## TL;DR
|
||
|
|
- **Architecture**: BungeeCord-style proxy plus a separate "queue server" (a stripped-down Minecraft instance acting as a holding world); the main Paper server is gated behind it.
|
||
|
|
- **Drain model**: Slow FIFO with a small reserved pool for paid priority — pacing is what protects main from join-flood crashes more than any explicit packet shaper.
|
||
|
|
- **Drama**: Almost every controversy (paid priority, veteran-queue removal, prio-strip ban waves) is policy-layer, not technical. Avoid the policies; copy the architecture.
|
||
|
|
|
||
|
|
## 1. Architecture
|
||
|
|
- Two-tier: **Velocity/Bungee proxy** -> **queue server** (limbo holding JVM) -> **main Paper server**. Queue is its own process, not a plugin on main.
|
||
|
|
- Public clones use the same shape: `PistonQueue` (Bungee+Velocity, v4.0.0 Apr 2026, most production-grade), `AnarchyQueue` (Velocity, pairs with `QueueServerPlugin` on the limbo instance), `LeeesBungeeQueue` (archived 2025-04-28, 1.12.2 cap).
|
||
|
|
- Queue state is **in-memory** on the proxy; clones don't persist across restart. Disconnect = back of line.
|
||
|
|
|
||
|
|
## 2. Queue Mechanics
|
||
|
|
- Pure FIFO inside each tier. Tiers historically: priority -> veteran -> regular. Today: priority -> regular.
|
||
|
|
- Slot allocation: ~200 reserved slots for priority on ~1000-cap main; regular advances only when a non-reserved slot frees.
|
||
|
|
- Drain rate is wall-clock, not packet-throttled — 1000-deep regular queue = 6-12h.
|
||
|
|
- ETA = naive `position * avg_drain`. Wrong because priority steals slots from above; ETA can go *up*.
|
||
|
|
|
||
|
|
## 3. AFK + Reconnect
|
||
|
|
- 2016 queue: reconnect every ~30s, drove hacked-client adoption. Replaced within a year by limbo-queue with auto-updating position.
|
||
|
|
- Main: 15-min idle disconnect. Queue: long-lived TCP; drop = position lost. `2bored2wait` (archived) proxies queue locally for headless waiting.
|
||
|
|
|
||
|
|
## 4. Priority Queue
|
||
|
|
- Separate FIFO + reserved slot pool. Tier check = permission/uuid lookup on join.
|
||
|
|
- Pricing: $19.99/mo originally, now $29/mo via 2b2t.shop.
|
||
|
|
- TheCampingRusher held add/remove power on priority + veteran lists; Torogadude incident.
|
||
|
|
- Reserved-slot design means a queue can exist even when main isn't full — structurally pay-to-skip.
|
||
|
|
|
||
|
|
## 5. Chunk-Load / Crash Mitigation
|
||
|
|
- Queue server runs near-empty world; no chunk gen, minimal ticks, absorbs thousands of idle TCP sessions cheaply.
|
||
|
|
- Pacing the drain protects main's chunk pipeline; no explicit login-packet shaper beyond letting `PlayerJoinEvent` finish before pulling next.
|
||
|
|
- **Nocom (Jul 2018 - Jul 2021)**: unrate-limited `CPacketPlayerDigging` flood on queue starved keepalives, forced mass disconnects, skipped queue. Hausemaster: 500 pkt/s late-2019; factor-14 May 2020; factor-8 next day; factor-2 Jul 2021; full patch 2021-07-15. Leijurv's Monte Carlo particle-filter tracker (2020-2021) kept working at 2 checks/s.
|
||
|
|
|
||
|
|
## 6. Veteran Tier
|
||
|
|
- Whitelist: `joined_before = 2016-06-01`, offline lookup against historical login data.
|
||
|
|
- Removed **2017-12-04** explicitly to "increase incentive to buy priority". Trust burned.
|
||
|
|
|
||
|
|
## 7. Bot Ecosystem
|
||
|
|
- Mineflayer / headless clients sit in queue 24/7 — indistinguishable from a human leaving client running.
|
||
|
|
- Detection: behavior only (instant logout on join, scripted movement). "Good" bot = afk-for-owner; "exploit" bot = multi-account prio-skip or queue-bypass client.
|
||
|
|
- For AuthLimbo v2: AFK bots in pre-auth limbo cost ~nothing. Gate at promote-to-main, not join-limbo.
|
||
|
|
|
||
|
|
## 8. Failure Modes
|
||
|
|
- Nocom-era queue crashes dropped 1000+ waiting players.
|
||
|
|
- "Ghost queue" — players queued but TCP dead — caused by keepalive starvation, fixed by rate limits.
|
||
|
|
- Recovery: full restart loses all positions. No persisted state.
|
||
|
|
|
||
|
|
## 9. Public Clones — Survey
|
||
|
|
- **PistonQueue** — Bungee+Velocity, reserved slots, shadow-ban, pre-queue auth, active.
|
||
|
|
- **AnarchyQueue** — Velocity, minimal, needs `QueueServerPlugin` companion.
|
||
|
|
- **LeeesBungeeQueue** — archived 2025.
|
||
|
|
- **Shirodo-Queue**, **eslym/bungee-queue** — toy reimplementations.
|
||
|
|
- Common mistakes: in-memory only, no priority-abuse audit log, no rate-limit on queue's own packet handlers (re-creates Nocom-class risk).
|
||
|
|
|
||
|
|
## 10. Drama Timeline
|
||
|
|
- **2016-06** Rusher influx; queue introduced.
|
||
|
|
- **2016-2017** Rusher holds add/remove power on priority + veteran lists.
|
||
|
|
- **2017-12-04** Veteran queue removed. Mass quits.
|
||
|
|
- **2018-07 / 2021-07** Nocom queue-bypass exploit + tracking.
|
||
|
|
- **2022-04** ~40 prio-stripped + banned over a doxxing chain.
|
||
|
|
- **2022-12-07** 500+ accounts prio-banned cumulatively; `2builders12rules` discord forms to track strips.
|
||
|
|
|
||
|
|
## Drama-Avoidance Principles for AuthLimbo v2
|
||
|
|
1. **No paid priority. Ever.** FIFO only; no money-tied reserved slots.
|
||
|
|
2. **No hidden-criteria veteran tier.** If seniority exists, rule is public, automated, irrevocable.
|
||
|
|
3. **No staff add/remove of queue position.** Admin commands log to append-only audit; no silent privilege.
|
||
|
|
4. **Persist queue state.** Position survives proxy restart (sqlite/redis).
|
||
|
|
5. **Rate-limit every packet handler in limbo.** Nocom is the canonical lesson.
|
||
|
|
6. **Honest ETA or no ETA.** Position only, or confidence interval — no fake countdowns.
|
||
|
|
7. **Privacy-first limbo (AuthLimbo thesis):** new joiners isolated from main-world coords/inventory until AuthMe login completes.
|
||
|
|
8. **Bots welcome in limbo, gated at promote.** Don't fight Mineflayer pre-auth.
|
||
|
|
9. **Open source the gatekeeper.** Hausemaster's plugin is closed; opacity amplifies drama.
|
||
|
|
10. **Document idle/disconnect rules in-game.** No silent kicks.
|