# Compatibility ## Tested matrix | Component | Version | Status | Notes | |-----------|---------|--------|-------| | Paper | 1.21.11 | Verified | Primary target. Builds against `1.21.11-R0.1-SNAPSHOT`. | | Purpur | 1.21.11 | Expected to work | Purpur is a Paper fork with a superset of the Paper API used here. Untested in CI but the relevant API surface (`teleportAsync`, `setChunkForceLoaded`, modern `ChunkGenerator`) is identical. | | Folia | any | Untested | Folia's regionised threading model changes how `LoginEvent` is dispatched. The current `Bukkit.getScheduler().runTaskLater` calls would need to be reworked to use Folia's region scheduler. Do not run this plugin on Folia until it has been audited. | | Java | 21 | Required | `pom.xml` targets Java 21. | | Java | 22 / 23 / 24 | Expected to work | Source compatibility level is 21. No reflection or unsafe APIs are used. | ## Auth plugins | Plugin | Version | Status | Notes | |--------|---------|--------|-------| | AuthMe-ReReloaded (HaHaWTH fork) | b49 | Verified | Hard dependency. The fork's SQLite schema is the one we read. | | AuthMe-ReReloaded (other 5.x forks) | any | Expected to work | Other forks track the same upstream schema (`authme` table with `username, x, y, z, world, yaw, pitch`). The plugin will compile and load against any 5.x AuthMe binary because we depend on `fr.xephi.authme.events.LoginEvent` which has been stable since 5.0. | | AuthMe-ReReloaded (6.x) | any | Untested | API likely the same; no reason to expect a break. | | Original AuthMe (`fr.xephi:authme` 5.x) | any | Expected to work | Same Java package, same event class. | | nLogin / FastLogin / SimpleAuth / others | n/a | Not supported | This plugin is hard-coupled to AuthMe events. It will refuse to load without `AuthMe` in `plugin.yml`. | | MySQL-backed AuthMe | n/a | Not supported (yet) | The plugin reads `authme.db` directly via SQLite JDBC. If your AuthMe stores data in MySQL, the LoginEvent restore is a no-op. | ## Other plugins | Plugin | Status | Notes | |--------|--------|-------| | Multiverse-Core | Untested | Multiverse intercepts teleports for portals and respawn. The two plugins should coexist because RackedLimbo runs at `MONITOR` priority and overrides whatever Multiverse does to the post-login location. If you only run Multiverse for the limbo world, you do not need it any more — RackedLimbo's `LimboWorldManager` covers that case. | | EssentialsX | Untested | Essentials' spawn-on-join (`spawn-on-join` in `essentials.yml`) is the most common conflicting feature. With Essentials' default ordering, RackedLimbo's `MONITOR` listener still runs last and wins. If you see the spawn-on-join location winning, set `spawn-on-join: false`. | | WorldGuard | Should not interfere | WorldGuard does not teleport on login. | | BetterReload / PlugManX | Avoid | Hot-reloading any of (RackedLimbo, AuthMe, Paper itself) will leave dangling listeners. Always restart. | ## Database compatibility The plugin opens `plugins/AuthMe/authme.db` with a fresh JDBC connection per query. AuthMe also keeps a connection open to the same file. SQLite supports multiple readers under WAL mode, which is AuthMe's default; we never `PRAGMA journal_mode` ourselves, never write, and never wrap the read in a transaction. There is no risk of corruption from this access pattern. If AuthMe is configured to use MySQL or PostgreSQL instead of SQLite, this plugin will log a warning on first lookup and the LoginEvent restore will be skipped. A MySQL backend is on the wishlist but not implemented. ## Reporting compatibility results If you run this plugin on a configuration not covered above, please [open an issue](https://github.com/s8n-ru/racked-limbo/issues/new?template=bug_report.md) or PR an update to this table.