diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 9017655..7876712 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -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 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index beb687a..8b07196 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 15d9c60..59ce57d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 47d2f5f..f6722b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ` admin commands - gated on `rackedlimbo.admin`. +- `/loginlimbo reload` and `/loginlimbo tp ` 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 diff --git a/README.md b/README.md index 0d223c6..5725700 100644 --- a/README.md +++ b/README.md @@ -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 ` | `rackedlimbo.admin` | Manually teleport a player to their saved location. | +| `/loginlimbo reload` | `loginlimbo.admin` | Reload `config.yml`. | +| `/loginlimbo tp ` | `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. diff --git a/docs/compatibility.md b/docs/compatibility.md index 08413dc..df33fd5 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -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. diff --git a/docs/configuration.md b/docs/configuration.md index 2835645..de82879 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -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`. diff --git a/docs/how-it-works.md b/docs/how-it-works.md index d0843e7..7d6ac49 100644 --- a/docs/how-it-works.md +++ b/docs/how-it-works.md @@ -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. | diff --git a/docs/installation.md b/docs/installation.md index fab486f..343ee34 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -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 +LoginLimbo 1.0.0 - sub: reload | tp ``` To confirm the DB read path is working, log out a test account, then run -`/rackedlimbo tp ` — the plugin should report the world and +`/loginlimbo tp ` — 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 diff --git a/pom.xml b/pom.xml index 9e69186..70509ec 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - ru.racked - RackedLimbo + ru.loginlimbo + LoginLimbo 1.0.0 jar - RackedLimbo + LoginLimbo AuthMe-aware void limbo + reliable post-login teleport for Paper 1.21.11. @@ -92,7 +92,7 @@ org.sqlite - ru.racked.limbo.shaded.sqlite + ru.loginlimbo.shaded.sqlite diff --git a/src/main/java/ru/racked/limbo/AuthMeDatabase.java b/src/main/java/ru/loginlimbo/AuthMeDatabase.java similarity index 84% rename from src/main/java/ru/racked/limbo/AuthMeDatabase.java rename to src/main/java/ru/loginlimbo/AuthMeDatabase.java index 2b4ec71..fb79765 100644 --- a/src/main/java/ru/racked/limbo/AuthMeDatabase.java +++ b/src/main/java/ru/loginlimbo/AuthMeDatabase.java @@ -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; } } diff --git a/src/main/java/ru/racked/limbo/LimboWorldManager.java b/src/main/java/ru/loginlimbo/LimboWorldManager.java similarity index 86% rename from src/main/java/ru/racked/limbo/LimboWorldManager.java rename to src/main/java/ru/loginlimbo/LimboWorldManager.java index fa7f643..057768c 100644 --- a/src/main/java/ru/racked/limbo/LimboWorldManager.java +++ b/src/main/java/ru/loginlimbo/LimboWorldManager.java @@ -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 + "."); } } diff --git a/src/main/java/ru/racked/limbo/RackedLimbo.java b/src/main/java/ru/loginlimbo/LoginLimbo.java similarity index 81% rename from src/main/java/ru/racked/limbo/RackedLimbo.java rename to src/main/java/ru/loginlimbo/LoginLimbo.java index d702a84..a55cba6 100644 --- a/src/main/java/ru/racked/limbo/RackedLimbo.java +++ b/src/main/java/ru/loginlimbo/LoginLimbo.java @@ -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 "); 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 "); + sender.sendMessage("Usage: /loginlimbo tp "); return true; } Player target = Bukkit.getPlayerExact(args[1]); diff --git a/src/main/java/ru/racked/limbo/LoginListener.java b/src/main/java/ru/loginlimbo/LoginListener.java similarity index 86% rename from src/main/java/ru/racked/limbo/LoginListener.java rename to src/main/java/ru/loginlimbo/LoginListener.java index c3dd48e..e41fff7 100644 --- a/src/main/java/ru/racked/limbo/LoginListener.java +++ b/src/main/java/ru/loginlimbo/LoginListener.java @@ -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 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); diff --git a/src/main/java/ru/racked/limbo/VoidGenerator.java b/src/main/java/ru/loginlimbo/VoidGenerator.java similarity index 98% rename from src/main/java/ru/racked/limbo/VoidGenerator.java rename to src/main/java/ru/loginlimbo/VoidGenerator.java index 1aa7227..ee7d4d9 100644 --- a/src/main/java/ru/racked/limbo/VoidGenerator.java +++ b/src/main/java/ru/loginlimbo/VoidGenerator.java @@ -1,4 +1,4 @@ -package ru.racked.limbo; +package ru.loginlimbo; import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.WorldInfo; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index df06030..cd226c4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,4 @@ -# RackedLimbo configuration +# LoginLimbo configuration # Limbo world settings — pre-auth players are kept here. limbo: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9cd89e0..0fd66e3 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -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 > + loginlimbo: + description: LoginLimbo admin commands. + aliases: [llimbo] + permission: loginlimbo.admin + usage: /loginlimbo > permissions: - rackedlimbo.admin: - description: Manage RackedLimbo at runtime. + loginlimbo.admin: + description: Manage LoginLimbo at runtime. default: op