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]
This commit is contained in:
s8n-ru 2026-04-30 18:52:36 +01:00
parent 8cd92694e7
commit 9e0ed01321
17 changed files with 101 additions and 101 deletions

View file

@ -1,6 +1,6 @@
---
name: Bug report
about: Report a problem with RackedLimbo
about: Report a problem with LoginLimbo
title: "[bug] "
labels: bug
assignees: ''
@ -14,7 +14,7 @@ A one-paragraph description of what is broken.
| Field | Value |
|-------------------------|----------------------------------------|
| RackedLimbo version | e.g. 1.0.0 |
| LoginLimbo version | e.g. 1.0.0 |
| Server software | Paper / Purpur / Folia |
| Server version | e.g. 1.21.11 build #142 |
| Java version | output of `java -version` |
@ -39,7 +39,7 @@ What actually happened. Include exact log lines.
## Logs
Paste the relevant section of `logs/latest.log` here. Search for
`RackedLimbo` to filter our log lines. If you are running with
`LoginLimbo` to filter our log lines. If you are running with
`debug: true` in `config.yml`, please include those lines as well.
```
@ -48,7 +48,7 @@ Paste the relevant section of `logs/latest.log` here. Search for
## Configuration
If you have customised `plugins/RackedLimbo/config.yml`, paste the
If you have customised `plugins/LoginLimbo/config.yml`, paste the
relevant keys here.
```yaml

View file

@ -41,6 +41,6 @@ jobs:
- name: Upload jar artifact
uses: actions/upload-artifact@v4
with:
name: RackedLimbo-jar
path: target/RackedLimbo-*.jar
name: LoginLimbo-jar
path: target/LoginLimbo-*.jar
if-no-files-found: error

View file

@ -39,6 +39,6 @@ jobs:
- name: Create GitHub release
uses: softprops/action-gh-release@v1
with:
files: target/RackedLimbo-*.jar
files: target/LoginLimbo-*.jar
generate_release_notes: true
fail_on_unmatched_files: true

View file

@ -1,6 +1,6 @@
# Changelog
All notable changes to RackedLimbo are documented here.
All notable changes to LoginLimbo are documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
@ -22,10 +22,10 @@ Initial public release.
are released 5 seconds after the teleport completes.
- Optional 5x5 barrier platform at limbo spawn so unauth players can't
fall into the void.
- `/rackedlimbo reload` and `/rackedlimbo tp <player>` admin commands
gated on `rackedlimbo.admin`.
- `/loginlimbo reload` and `/loginlimbo tp <player>` admin commands
gated on `loginlimbo.admin`.
- Shaded SQLite JDBC driver (`org.xerial:sqlite-jdbc 3.46.1.3`,
relocated to `ru.racked.limbo.shaded.sqlite`) so the plugin reads
relocated to `ru.loginlimbo.shaded.sqlite`) so the plugin reads
AuthMe's database without classpath collisions.
### Compatibility

View file

@ -1,8 +1,8 @@
# RackedLimbo
# LoginLimbo
Auth-limbo + login-restore fix for Paper 1.21+.
[![Build](https://github.com/s8n-ru/racked-limbo/actions/workflows/build.yml/badge.svg)](https://github.com/s8n-ru/racked-limbo/actions/workflows/build.yml)
[![Build](https://github.com/s8n-ru/login-limbo/actions/workflows/build.yml/badge.svg)](https://github.com/s8n-ru/login-limbo/actions/workflows/build.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-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/)
@ -29,7 +29,7 @@ chunk is loaded, Paper's safety logic then snaps the player back to the
nearest loaded position, and that position is world spawn.
We tried fixing this in AuthMe config. We tried removing Multiverse.
The bug kept reappearing. RackedLimbo is the long-term fix.
The bug kept reappearing. LoginLimbo is the long-term fix.
---
@ -62,8 +62,8 @@ all of that.
## Install
1. Download `RackedLimbo-1.0.0.jar` from the
[Releases page](https://github.com/s8n-ru/racked-limbo/releases).
1. Download `LoginLimbo-1.0.0.jar` from the
[Releases page](https://github.com/s8n-ru/login-limbo/releases).
2. Drop it into your server's `plugins/` directory.
3. Restart the server (do not use `/reload`).
@ -78,7 +78,7 @@ environment variable form.
## Configuration
`plugins/RackedLimbo/config.yml` is created on first start. Defaults:
`plugins/LoginLimbo/config.yml` is created on first start. Defaults:
```yaml
limbo:
@ -105,8 +105,8 @@ Full reference in [`docs/configuration.md`](docs/configuration.md).
| Command | Permission | Effect |
|----------------------------|---------------------|-----------------------------------------------------|
| `/rackedlimbo reload` | `rackedlimbo.admin` | Reload `config.yml`. |
| `/rackedlimbo tp <player>` | `rackedlimbo.admin` | Manually teleport a player to their saved location. |
| `/loginlimbo reload` | `loginlimbo.admin` | Reload `config.yml`. |
| `/loginlimbo tp <player>` | `loginlimbo.admin` | Manually teleport a player to their saved location. |
Aliases: `/rlimbo`.
@ -131,7 +131,7 @@ Aliases: `/rlimbo`.
mvn clean package
```
The shaded jar lands at `target/RackedLimbo-1.0.0.jar`. Requires Java
The shaded jar lands at `target/LoginLimbo-1.0.0.jar`. Requires Java
21+ and a Maven 3.9+ install. The `lib/AuthMe-5.6.0-FORK-Universal.jar`
in the repo is referenced as a `system`-scope dependency so the build
does not need any private repository credentials.
@ -144,7 +144,7 @@ Multiverse-Core is a 2 MB plugin that does world creation, world
listing, dimension portals, world-specific permissions, world inventory
separation, and a dozen other things. It also intercepts teleports for
its own portal and respawn logic, which is exactly the contention point
we are trying to avoid here. RackedLimbo is ~400 lines of code and only
we are trying to avoid here. LoginLimbo is ~400 lines of code and only
manages the one void world AuthMe needs. If you are already running
Multiverse for other reasons, you can ignore the limbo manager and only
benefit from the LoginEvent fix.

View file

@ -25,10 +25,10 @@
| 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`. |
| Multiverse-Core | Untested | Multiverse intercepts teleports for portals and respawn. The two plugins should coexist because LoginLimbo 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 — LoginLimbo'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, LoginLimbo'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. |
| BetterReload / PlugManX | Avoid | Hot-reloading any of (LoginLimbo, AuthMe, Paper itself) will leave dangling listeners. Always restart. |
## Database compatibility
@ -47,5 +47,5 @@ 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)
[open an issue](https://github.com/s8n-ru/login-limbo/issues/new?template=bug_report.md)
or PR an update to this table.

View file

@ -1,7 +1,7 @@
# Configuration reference
`plugins/RackedLimbo/config.yml` is created on first start with the
defaults below. Reload at runtime with `/rackedlimbo reload`.
`plugins/LoginLimbo/config.yml` is created on first start with the
defaults below. Reload at runtime with `/loginlimbo reload`.
```yaml
limbo:
@ -139,4 +139,4 @@ diagnosing a player report; noisy in production.
`limbo.world` cannot be changed without a full server restart — the
limbo world is created during `onEnable`. Other keys take effect on
`/rackedlimbo reload`.
`/loginlimbo reload`.

View file

@ -1,6 +1,6 @@
# How it works
A technical walkthrough of the bug RackedLimbo fixes and how the fix is
A technical walkthrough of the bug LoginLimbo fixes and how the fix is
implemented.
## The bug
@ -34,7 +34,7 @@ upstream as [PaperMC/Paper#4085](https://github.com/PaperMC/Paper/issues/4085).
## The fix
RackedLimbo intercepts the post-login flow at two points.
LoginLimbo intercepts the post-login flow at two points.
### 1. Pre-login: pin the chunk
@ -100,7 +100,7 @@ teleportAsync rejection), the ticket release runs anyway via the
so we cannot deadlock with AuthMe's own connection pool.
- The shaded SQLite driver
(`org.xerial:sqlite-jdbc:3.46.1.3`, relocated to
`ru.racked.limbo.shaded.sqlite`) means we do not depend on whatever
`ru.loginlimbo.shaded.sqlite`) means we do not depend on whatever
driver AuthMe ships with, and we cannot accidentally clobber it.
## Code map
@ -109,7 +109,7 @@ All Java sources live under `src/main/java/ru/racked/limbo/`.
| File | Responsibility |
|------|----------------|
| `RackedLimbo.java` | `JavaPlugin` entry point. Loads config, builds the limbo world, registers the listener, exposes `/rackedlimbo` admin commands. |
| `LoginLimbo.java` | `JavaPlugin` entry point. Loads config, builds the limbo world, registers the listener, exposes `/loginlimbo` admin commands. |
| `AuthMeDatabase.java` | Read-only JDBC wrapper around AuthMe's SQLite DB. One method: `getQuitLocation(playerName)`. Returns a `Location` or null. |
| `LimboWorldManager.java` | Creates the `auth_limbo` world with `VoidGenerator`, sets game rules, builds the optional barrier platform. |
| `VoidGenerator.java` | Modern (1.17+) `ChunkGenerator` that produces empty chunks. Disables noise, surface, bedrock, caves, decorations, mobs, and structures. |

View file

@ -10,20 +10,20 @@
## Bare-metal / VPS install
1. Download `RackedLimbo-X.Y.Z.jar` from the
[Releases page](https://github.com/s8n-ru/racked-limbo/releases/latest).
1. Download `LoginLimbo-X.Y.Z.jar` from the
[Releases page](https://github.com/s8n-ru/login-limbo/releases/latest).
2. Drop the jar into your server's `plugins/` directory.
3. Restart the server. Do **not** use `/reload` — the listener wiring
does not survive a hot reload.
4. On first start the plugin will create:
- `plugins/RackedLimbo/config.yml`
- `plugins/LoginLimbo/config.yml`
- The `auth_limbo/` world directory at the server data root.
5. Tail the log and look for:
```
[RackedLimbo] Using AuthMe DB at: /path/to/plugins/AuthMe/authme.db
[RackedLimbo] Limbo world 'auth_limbo' already loaded.
[RackedLimbo] Enabled. Listening for AuthMe LoginEvent at MONITOR.
[LoginLimbo] Using AuthMe DB at: /path/to/plugins/AuthMe/authme.db
[LoginLimbo] Limbo world 'auth_limbo' already loaded.
[LoginLimbo] Enabled. Listening for AuthMe LoginEvent at MONITOR.
```
If you see "No saved location for ..." on a successful `/login`, that
@ -43,11 +43,11 @@ services:
TYPE: PAPER
VERSION: "1.21.11"
PLUGINS: |
https://github.com/s8n-ru/racked-limbo/releases/download/v1.0.0/RackedLimbo-1.0.0.jar
https://github.com/s8n-ru/login-limbo/releases/download/v1.0.0/LoginLimbo-1.0.0.jar
# Pin the version — itzg's auto-loader purges unrecognised jars on restart.
REMOVE_OLD_MODS: "TRUE"
REMOVE_OLD_MODS_INCLUDE: "*.jar"
REMOVE_OLD_MODS_EXCLUDE: "RackedLimbo*.jar,AuthMe*.jar,(other-plugins)*.jar"
REMOVE_OLD_MODS_EXCLUDE: "LoginLimbo*.jar,AuthMe*.jar,(other-plugins)*.jar"
volumes:
- ./data:/data
ports:
@ -67,17 +67,17 @@ Notes:
Run as an op:
```
/rackedlimbo
/loginlimbo
```
You should see:
```
RackedLimbo 1.0.0 - sub: reload | tp <player>
LoginLimbo 1.0.0 - sub: reload | tp <player>
```
To confirm the DB read path is working, log out a test account, then run
`/rackedlimbo tp <name>` — the plugin should report the world and
`/loginlimbo tp <name>` — the plugin should report the world and
coordinates it pulled from `authme.db`.
## Updating
@ -92,7 +92,7 @@ be flagged in `CHANGELOG.md` for the affected version.
## Uninstalling
1. Stop the server.
2. Delete `plugins/RackedLimbo-*.jar` and the `plugins/RackedLimbo/`
2. Delete `plugins/LoginLimbo-*.jar` and the `plugins/LoginLimbo/`
folder.
3. Optionally delete the `auth_limbo/` world directory if you no longer
want the void world. AuthMe will fall back to whatever

View file

@ -4,12 +4,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.racked</groupId>
<artifactId>RackedLimbo</artifactId>
<groupId>ru.loginlimbo</groupId>
<artifactId>LoginLimbo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>RackedLimbo</name>
<name>LoginLimbo</name>
<description>AuthMe-aware void limbo + reliable post-login teleport for Paper 1.21.11.</description>
<properties>
@ -92,7 +92,7 @@
<relocations>
<relocation>
<pattern>org.sqlite</pattern>
<shadedPattern>ru.racked.limbo.shaded.sqlite</shadedPattern>
<shadedPattern>ru.loginlimbo.shaded.sqlite</shadedPattern>
</relocation>
</relocations>
<filters>

View file

@ -1,4 +1,4 @@
package ru.racked.limbo;
package ru.loginlimbo;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -27,21 +27,21 @@ import java.util.logging.Level;
*/
public final class AuthMeDatabase {
private final RackedLimbo plugin;
private final LoginLimbo plugin;
private final File dbFile;
private final String url;
public AuthMeDatabase(RackedLimbo plugin, File dbFile) {
public AuthMeDatabase(LoginLimbo plugin, File dbFile) {
this.plugin = plugin;
this.dbFile = dbFile;
this.url = "jdbc:sqlite:" + dbFile.getAbsolutePath();
// Force-load shaded SQLite driver class so DriverManager finds it.
try {
Class.forName("ru.racked.limbo.shaded.sqlite.JDBC");
Class.forName("ru.loginlimbo.shaded.sqlite.JDBC");
} catch (ClassNotFoundException e) {
plugin.getLogger().log(Level.SEVERE,
"[RackedLimbo] Shaded SQLite driver class missing — build is broken!", e);
"[LoginLimbo] Shaded SQLite driver class missing — build is broken!", e);
}
}
@ -62,7 +62,7 @@ public final class AuthMeDatabase {
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) {
if (plugin.debug()) {
plugin.getLogger().info("[RackedLimbo][debug] No DB row for " + playerName);
plugin.getLogger().info("[LoginLimbo][debug] No DB row for " + playerName);
}
return null;
}
@ -76,7 +76,7 @@ public final class AuthMeDatabase {
if (worldName == null || worldName.isEmpty()) worldName = "world";
World world = Bukkit.getWorld(worldName);
if (world == null) {
plugin.getLogger().warning("[RackedLimbo] World '" + worldName
plugin.getLogger().warning("[LoginLimbo] World '" + worldName
+ "' from authme.db is not loaded — cannot restore "
+ playerName + ".");
return null;
@ -85,7 +85,7 @@ public final class AuthMeDatabase {
}
} catch (SQLException e) {
plugin.getLogger().log(Level.WARNING,
"[RackedLimbo] Failed to read authme.db for " + playerName, e);
"[LoginLimbo] Failed to read authme.db for " + playerName, e);
return null;
}
}

View file

@ -1,4 +1,4 @@
package ru.racked.limbo;
package ru.loginlimbo;
import org.bukkit.Bukkit;
import org.bukkit.GameRule;
@ -19,9 +19,9 @@ import org.bukkit.configuration.file.FileConfiguration;
*/
public final class LimboWorldManager {
private final RackedLimbo plugin;
private final LoginLimbo plugin;
public LimboWorldManager(RackedLimbo plugin) {
public LimboWorldManager(LoginLimbo plugin) {
this.plugin = plugin;
}
@ -31,18 +31,18 @@ public final class LimboWorldManager {
World world = Bukkit.getWorld(name);
if (world == null) {
plugin.getLogger().info("[RackedLimbo] Creating limbo world '" + name + "'...");
plugin.getLogger().info("[LoginLimbo] Creating limbo world '" + name + "'...");
WorldCreator wc = new WorldCreator(name)
.environment(World.Environment.THE_END)
.generator(new VoidGenerator())
.generateStructures(false);
world = wc.createWorld();
if (world == null) {
plugin.getLogger().severe("[RackedLimbo] Failed to create limbo world!");
plugin.getLogger().severe("[LoginLimbo] Failed to create limbo world!");
return;
}
} else {
plugin.getLogger().info("[RackedLimbo] Limbo world '" + name + "' already loaded.");
plugin.getLogger().info("[LoginLimbo] Limbo world '" + name + "' already loaded.");
}
double sx = cfg.getDouble("limbo.spawn-x", 0.5);
@ -73,7 +73,7 @@ public final class LimboWorldManager {
}
}
if (built > 0) {
plugin.getLogger().info("[RackedLimbo] Built " + built + " barrier blocks at "
plugin.getLogger().info("[LoginLimbo] Built " + built + " barrier blocks at "
+ cx + "," + py + "," + cz + ".");
}
}

View file

@ -1,4 +1,4 @@
package ru.racked.limbo;
package ru.loginlimbo;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -11,7 +11,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
/**
* RackedLimbo companion plugin for AuthMe-ReReloaded.
* LoginLimbo companion plugin for AuthMe-ReReloaded.
*
* Two responsibilities:
* 1. Provide a void {@code auth_limbo} world (no Multiverse required).
@ -21,14 +21,14 @@ import java.io.File;
*
* The DB is read directly via JDBC SQLite we never modify it.
*/
public final class RackedLimbo extends JavaPlugin {
public final class LoginLimbo extends JavaPlugin {
private static RackedLimbo instance;
private static LoginLimbo instance;
private LimboWorldManager limboManager;
private AuthMeDatabase authmeDb;
private LoginListener loginListener;
public static RackedLimbo getInstance() {
public static LoginLimbo getInstance() {
return instance;
}
@ -45,7 +45,7 @@ public final class RackedLimbo extends JavaPlugin {
if (!dbFile.isAbsolute()) {
dbFile = new File(getServer().getWorldContainer(), dbPathStr);
}
getLogger().info("[RackedLimbo] Using AuthMe DB at: " + dbFile.getAbsolutePath());
getLogger().info("[LoginLimbo] Using AuthMe DB at: " + dbFile.getAbsolutePath());
this.authmeDb = new AuthMeDatabase(this, dbFile);
// Build the limbo world before AuthMe gets a chance to teleport players there.
@ -56,13 +56,13 @@ public final class RackedLimbo extends JavaPlugin {
this.loginListener = new LoginListener(this, authmeDb);
Bukkit.getPluginManager().registerEvents(loginListener, this);
getLogger().info("[RackedLimbo] Enabled. Listening for AuthMe LoginEvent at MONITOR.");
getLogger().info("[LoginLimbo] Enabled. Listening for AuthMe LoginEvent at MONITOR.");
}
@Override
public void onDisable() {
if (authmeDb != null) authmeDb.close();
getLogger().info("[RackedLimbo] Disabled.");
getLogger().info("[LoginLimbo] Disabled.");
}
public LimboWorldManager limbo() {
@ -77,14 +77,14 @@ public final class RackedLimbo extends JavaPlugin {
return getConfig().getBoolean("debug", false);
}
/* ---------------- /rackedlimbo admin command ---------------- */
/* ---------------- /loginlimbo admin command ---------------- */
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!command.getName().equalsIgnoreCase("rackedlimbo")) return false;
if (!command.getName().equalsIgnoreCase("loginlimbo")) return false;
if (args.length == 0) {
sender.sendMessage("RackedLimbo " + getDescription().getVersion()
sender.sendMessage("LoginLimbo " + getDescription().getVersion()
+ " — sub: reload | tp <player>");
return true;
}
@ -92,12 +92,12 @@ public final class RackedLimbo extends JavaPlugin {
switch (args[0].toLowerCase()) {
case "reload" -> {
reloadConfig();
sender.sendMessage("[RackedLimbo] config reloaded.");
sender.sendMessage("[LoginLimbo] config reloaded.");
return true;
}
case "tp" -> {
if (args.length < 2) {
sender.sendMessage("Usage: /rackedlimbo tp <player>");
sender.sendMessage("Usage: /loginlimbo tp <player>");
return true;
}
Player target = Bukkit.getPlayerExact(args[1]);

View file

@ -1,4 +1,4 @@
package ru.racked.limbo;
package ru.loginlimbo;
import fr.xephi.authme.events.AuthMeAsyncPreLoginEvent;
import fr.xephi.authme.events.LoginEvent;
@ -46,13 +46,13 @@ import java.util.Set;
*/
public final class LoginListener implements Listener {
private final RackedLimbo plugin;
private final LoginLimbo plugin;
private final AuthMeDatabase db;
/** Tracks active plugin-chunk-tickets so we don't double-add or fail to release. */
private final Set<String> activeTickets = new HashSet<>();
public LoginListener(RackedLimbo plugin, AuthMeDatabase db) {
public LoginListener(LoginLimbo plugin, AuthMeDatabase db) {
this.plugin = plugin;
this.db = db;
}
@ -80,11 +80,11 @@ public final class LoginListener implements Listener {
try {
world.getChunkAt(cx, cz).addPluginChunkTicket(plugin);
if (plugin.debug()) {
plugin.getLogger().info("[RackedLimbo][debug] Chunk-ticket added "
plugin.getLogger().info("[LoginLimbo][debug] Chunk-ticket added "
+ key + " for " + name);
}
} catch (Throwable t) {
plugin.getLogger().warning("[RackedLimbo] addPluginChunkTicket failed for "
plugin.getLogger().warning("[LoginLimbo] addPluginChunkTicket failed for "
+ name + ": " + t.getMessage());
activeTickets.remove(key);
}
@ -102,7 +102,7 @@ public final class LoginListener implements Listener {
final Location saved = db.getQuitLocation(name);
if (saved == null) {
plugin.getLogger().info("[RackedLimbo] No saved location for "
plugin.getLogger().info("[LoginLimbo] No saved location for "
+ name + " — leaving where AuthMe put them.");
return;
}
@ -116,19 +116,19 @@ public final class LoginListener implements Listener {
private void doTeleport(Player player, String name, Location saved) {
if (!player.isOnline()) {
plugin.getLogger().info("[RackedLimbo] " + name
plugin.getLogger().info("[LoginLimbo] " + name
+ " went offline before restore — skipping.");
return;
}
World world = saved.getWorld();
if (world == null) {
plugin.getLogger().warning("[RackedLimbo] Saved world for "
plugin.getLogger().warning("[LoginLimbo] Saved world for "
+ name + " is no longer loaded.");
return;
}
plugin.getLogger().info(String.format(
"[RackedLimbo] Restoring %s to %s(%.1f, %.1f, %.1f)",
"[LoginLimbo] Restoring %s to %s(%.1f, %.1f, %.1f)",
name, world.getName(), saved.getX(), saved.getY(), saved.getZ()));
final int cx = saved.getBlockX() >> 4;
@ -151,10 +151,10 @@ public final class LoginListener implements Listener {
.thenAccept(success -> {
if (Boolean.TRUE.equals(success)) {
if (plugin.debug()) {
plugin.getLogger().info("[RackedLimbo][debug] Teleport ok for " + name);
plugin.getLogger().info("[LoginLimbo][debug] Teleport ok for " + name);
}
} else {
plugin.getLogger().warning("[RackedLimbo] teleportAsync returned false for "
plugin.getLogger().warning("[LoginLimbo] teleportAsync returned false for "
+ name + " — Paper may have rejected the location.");
}
// Release the ticket 5s later gives the client time to
@ -162,13 +162,13 @@ public final class LoginListener implements Listener {
scheduleTicketRelease(world, cx, cz, key);
})
.exceptionally(ex -> {
plugin.getLogger().warning("[RackedLimbo] teleportAsync threw for "
plugin.getLogger().warning("[LoginLimbo] teleportAsync threw for "
+ name + ": " + ex.getMessage());
scheduleTicketRelease(world, cx, cz, key);
return null;
});
}).exceptionally(ex -> {
plugin.getLogger().warning("[RackedLimbo] getChunkAtAsyncUrgently threw for "
plugin.getLogger().warning("[LoginLimbo] getChunkAtAsyncUrgently threw for "
+ name + ": " + ex.getMessage());
scheduleTicketRelease(world, cx, cz, key);
return null;
@ -185,7 +185,7 @@ public final class LoginListener implements Listener {
} finally {
activeTickets.remove(key);
if (plugin.debug()) {
plugin.getLogger().info("[RackedLimbo][debug] Chunk-ticket released " + key);
plugin.getLogger().info("[LoginLimbo][debug] Chunk-ticket released " + key);
}
}
}, 20L * 5L);

View file

@ -1,4 +1,4 @@
package ru.racked.limbo;
package ru.loginlimbo;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.generator.WorldInfo;

View file

@ -1,4 +1,4 @@
# RackedLimbo configuration
# LoginLimbo configuration
# Limbo world settings — pre-auth players are kept here.
limbo:

View file

@ -1,5 +1,5 @@
name: RackedLimbo
main: ru.racked.limbo.RackedLimbo
name: LoginLimbo
main: ru.loginlimbo.LoginLimbo
version: ${project.version}
api-version: '1.21'
authors: [s8n / racked.ru]
@ -17,13 +17,13 @@ softdepend:
- VoidWorldGenerator
commands:
rackedlimbo:
description: RackedLimbo admin commands.
aliases: [rlimbo]
permission: rackedlimbo.admin
usage: /rackedlimbo <reload|tp <player>>
loginlimbo:
description: LoginLimbo admin commands.
aliases: [llimbo]
permission: loginlimbo.admin
usage: /loginlimbo <reload|tp <player>>
permissions:
rackedlimbo.admin:
description: Manage RackedLimbo at runtime.
loginlimbo.admin:
description: Manage LoginLimbo at runtime.
default: op