{"id":66609,"date":"2026-06-03T22:39:59","date_gmt":"2026-06-03T19:39:59","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/"},"modified":"2026-06-03T22:39:59","modified_gmt":"2026-06-03T19:39:59","slug":"exooqueue","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/","title":{"rendered":"ExooQueue"},"content":{"rendered":"<p>ExooQueue \u2013 Queue Management Plugin (Paper 1.21)<br \/>\n![Preview](https:\/\/cdn.modrinth.com\/data\/cached_images\/cdf16738ea5e84134442f24bf68b24ad0dd30d6b.png)<br \/>\nOverview<br \/>\n&#8211; ExooQueue limits players in a main world and queues overflow players in a waiting world.<br \/>\n&#8211; Players see their queue position and an ETA.<br \/>\n&#8211; VIPs (permission or \/vip command) bypass the queue.<br \/>\n&#8211; Commands and actions are configurable. Actions can run as player or console and support %player_name% and PlaceholderAPI if installed.<br \/>\n&#8211; SQLite is initialized for future persistence (not actively used yet).<\/p>\n<p>Requirements<br \/>\n&#8211; Multiverse core (for define waiting and other worlds)<br \/>\n&#8211; Server: Paper 1.21.x<br \/>\n&#8211; Java: 21 (JDK\/JRE)<br \/>\n&#8211; Optional: PlaceholderAPI (for advanced placeholders in actions)<br \/>\n&#8211; Optional: A world management plugin if you use commands like &#8220;mvtp&#8221; in actions (e.g., Multiverse-Core)<\/p>\n<p>Files<br \/>\n&#8211; src\/main\/resources\/plugin.yml               \u2192 Bukkit command\/permission declarations<br \/>\n&#8211; src\/main\/resources\/config.yml               \u2192 Plugin configuration (worlds, queue, commands + actions)<br \/>\n&#8211; src\/main\/java\/&#8230;\/ExooQueuePlugin.java      \u2192 Main plugin class<br \/>\n&#8211; build.gradle, settings.gradle               \u2192 Gradle build files<\/p>\n<p>Install (Using Built JAR)<br \/>\n1) Copy build\/libs\/ExooQueue-1.0.0.jar to your Paper server &#8220;plugins&#8221; folder.<br \/>\n2) Start the server once to generate config.yml.<br \/>\n3) Stop the server and edit plugins\/ExooQueue\/config.yml as needed.<br \/>\n4) Start the server again.<\/p>\n<p>Build (If you need to rebuild)<br \/>\n&#8211; From project root: .\/gradlew build (Linux\/macOS) or .\\gradlew.bat build (Windows)<br \/>\n&#8211; Output JAR: build\/libs\/ExooQueue-1.0.0.jar<\/p>\n<p>Core Concepts<br \/>\n&#8211; Main world: The target world players want to join (e.g., &#8220;world&#8221;).<br \/>\n&#8211; Wait world: A lobby where queued players wait.<br \/>\n&#8211; Max players: When the main world reaches this number, additional players are queued.<br \/>\n&#8211; VIP bypass: Players with permission &#8220;exooqueue.vip&#8221; or added via \/vip <player> bypass the queue. Operators (op) bypass by default.<br \/>\n&#8211; Actions: A list of commands to run when a player is allowed into the main world. You can run separate commands as the player or the console.<\/p>\n<p>Configuration (config.yml)<br \/>\nKeys<br \/>\n&#8211; author: Free-form string.<br \/>\n&#8211; max-players: Integer. Maximum player count allowed in the main world.<br \/>\n&#8211; main-world: World name for the destination world.<br \/>\n&#8211; wait-world: World name for the queue lobby.<br \/>\n&#8211; wait-time-per-player: Integer seconds per queue position to calculate ETA.<br \/>\n&#8211; commands: Map of command-name \u2192 settings (description, permission, vip-permission, actions).<\/p>\n<p>Example (default)<br \/>\nauthor: &#8220;Moin&#8221;<br \/>\nmax-players: 10<br \/>\nmain-world: &#8220;world&#8221;<br \/>\nwait-world: &#8220;wait&#8221;<br \/>\nwait-time-per-player: 10<\/p>\n<p>commands:<br \/>\n  lifesteal:<br \/>\n    description: &#8220;Join lifesteal queue&#8221;<br \/>\n    permission: &#8220;exooqueue.lifesteal&#8221;<br \/>\n    vip-permission: &#8220;exooqueue.vip&#8221;<br \/>\n    actions:<br \/>\n      player:<br \/>\n        &#8211; &#8220;say %player_name% joined lifesteal!&#8221;<br \/>\n      console:<br \/>\n        &#8211; &#8220;mvtp %player_name% world&#8221;<br \/>\n  vip:<br \/>\n    description: &#8220;Make player VIP bypass&#8221;<br \/>\n    permission: &#8220;exooqueue.vip&#8221;<br \/>\n    actions:<br \/>\n      player: []<br \/>\n      console: []<\/p>\n<p>Placeholders in actions<br \/>\n&#8211; %player_name% is always replaced with the player name.<br \/>\n&#8211; If PlaceholderAPI is installed, all PAPI placeholders are also processed.<\/p>\n<p>Commands (User-visible)<br \/>\n&#8211; \/lifesteal<br \/>\n  Description: Attempts to join the main world. If full, adds the player to the queue and teleports to the wait world.<br \/>\n  Permission: exooqueue.lifesteal (default: true via plugin.yml)<\/p>\n<p>&#8211; \/vip <player>\n  Description: Grants temporary VIP bypass to a player (persists until server restart; not saved to DB).<br \/>\n  Permission: exooqueue.vip (default: op)<\/p>\n<p>Permissions<br \/>\n&#8211; exooqueue.<command>   \u2192 Required to run that command (e.g., exooqueue.lifesteal)<br \/>\n&#8211; exooqueue.vip          \u2192 Bypass queue and use \/vip<br \/>\n&#8211; Operators also bypass the queue by default.<\/p>\n<p>How Queueing Works<br \/>\n1) Player runs a join command (e.g., \/lifesteal).<br \/>\n2) If VIP\/op or if main world has capacity, configured actions run immediately (e.g., teleport), and the player joins.<br \/>\n3) If full and not VIP, the player is added to an in-memory queue and teleported to the wait world.<br \/>\n4) A background task checks every 5 seconds: if slots are free, the next queued player is processed and their actions run.<br \/>\n5) ETA shown to players is position \u00d7 wait-time-per-player.<\/p>\n<p>Adding a Custom Join Command<br \/>\nNote: Commands must be declared in plugin.yml to be recognized by Bukkit. Then configure the behavior in config.yml.<\/p>\n<p>Steps<br \/>\n1) Edit src\/main\/resources\/plugin.yml and add a command block:<br \/>\n   commands:<br \/>\n     myworld:<br \/>\n       description: Join myworld queue<br \/>\n       permission: exooqueue.myworld<br \/>\n       permission-message: You don&#8217;t have permission to use this command.<\/p>\n<p>2) Edit src\/main\/resources\/config.yml and add matching config under commands:<br \/>\n   commands:<br \/>\n     myworld:<br \/>\n       description: &#8220;Join myworld queue&#8221;<br \/>\n       permission: &#8220;exooqueue.myworld&#8221;<br \/>\n       vip-permission: &#8220;exooqueue.vip&#8221;<br \/>\n       actions:<br \/>\n         player:<br \/>\n           &#8211; &#8220;say %player_name% is joining myworld!&#8221;<br \/>\n         console:<br \/>\n           &#8211; &#8220;mvtp %player_name% myworld&#8221;<\/p>\n<p>3) Restart the server (or fully reload the plugin) to register the new command and load config.<\/p>\n<p>Important Note About Queue Processing<br \/>\n&#8211; The default queue processing uses the actions of the &#8220;lifesteal&#8221; command when moving players from the queue.<br \/>\n&#8211; If you rely on multiple different join commands\/worlds, you should either:<br \/>\n  a) Use the same actions for all queues (point everyone to the same destination), or<br \/>\n  b) Update the code to track which command each player used and run the corresponding actions when processing the queue.<\/p>\n<p>If you need option (b), consider enhancing the code to store a map of queued player UUID \u2192 command name, and modify processQueue() to look up and run that command&#8217;s actions.<\/p>\n<p>Changing Worlds and Spawns<br \/>\n&#8211; Ensure the worlds listed in config.yml (main-world, wait-world) exist on your server.<br \/>\n&#8211; Set the wait world spawn using in-game commands (e.g., \/setworldspawn) or your world management plugin.<br \/>\n&#8211; If you use Multiverse-Core commands in actions (e.g., mvtp), install that plugin and ensure permissions for console\/player are correct.<\/p>\n<p>SQLite Database<br \/>\n&#8211; The plugin creates plugins\/ExooQueue\/queue.sqlite and a table &#8220;queue&#8221; (uuid TEXT PRIMARY KEY, position INTEGER).<br \/>\n&#8211; Current version does not persist the queue contents across restarts yet. Future updates may use this for persistence.<\/p>\n<p>Reloading Configuration<br \/>\n&#8211; This version reads configuration on startup. To apply changes:<br \/>\n  &#8211; Stop and start the server, or<br \/>\n  &#8211; Use a full server reload with caution (\/reload confirm). A restart is recommended.<\/p>\n<p>Troubleshooting<br \/>\n&#8211; Command not found: Ensure the command exists in plugin.yml and has a matching entry under commands in config.yml.<br \/>\n&#8211; Player not teleported: Verify your actions reference the correct world and that any required plugins (e.g., Multiverse-Core) are installed.<br \/>\n&#8211; Placeholder not replaced: Install PlaceholderAPI to use advanced placeholders. %player_name% always works.<br \/>\n&#8211; VIP not saved: \/vip is temporary and cleared on restart. Grant the exooqueue.vip permission via your permissions plugin for permanent VIP.<br \/>\n&#8211; Build issues: Use Java 21 and ensure the Paper repository is reachable. The provided Gradle config targets Paper 1.21.x.<\/p>\n<p>Roadmap Ideas (if you extend the plugin)<br \/>\n&#8211; Persist queue and VIP list to SQLite across restarts.<br \/>\n&#8211; Per-command queues and actions when processing queued players.<br \/>\n&#8211; Add \/queue status, \/queue leave, and admin controls.<br \/>\n&#8211; Config reload command.<br \/>\n&#8211; Per-world limits (main-world list with individual capacities).<\/p>\n<p>Quick Reference<br \/>\n&#8211; Main command: \/lifesteal<br \/>\n&#8211; VIP command: \/vip <player>\n&#8211; Config path: plugins\/ExooQueue\/config.yml<br \/>\n&#8211; Permissions: exooqueue.<command>, exooqueue.vip<br \/>\n&#8211; Worlds: main-world (destination), wait-world (queue lobby)<\/p>\n<p>Support<br \/>\n&#8211; If you need the code updated to support per-command queues or persistence, provide your desired behavior and we can extend the plugin accordingly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ExooQueue is a flexible and powerful queue plugin designed specifically for Paper Minecraft servers. It helps you manage player access to crowded worlds by implementing a fair, configurable waiting system \u2014 perfect for popular game modes or limited-capacit<\/p>\n","protected":false},"featured_media":66610,"template":"","meta":{"_minecraft_slug":"exooqueue","_minecraft_project_id":"eYiAGUQp","_minecraft_author":"q.moinulislam","_minecraft_license":"LicenseRef-All-Rights-Reserved","_minecraft_downloads":77,"_minecraft_follows":1,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"exooqueue.zip","_minecraft_size_bytes":8455,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-15T20:16:45.012720Z","_minecraft_date_created":"2025-08-12T03:05:15.711252Z","_minecraft_date_modified":"2025-08-10T23:42:38.977954Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/exooqueue","_minecraft_icon_attachment_id":66610,"_minecraft_imported_at":"2026-06-03T19:40:00+00:00","_minecraft_import_hash":"364d471713b6cf43baa195e7d99d663e","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[873,126,90,127,869,92],"mod_loader":[132],"minecraft_version":[62],"class_list":["post-66609","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-library","mod_category-management","mod_category-optimization","mod_category-paper","mod_category-transportation","mod_category-utility","mod_loader-paper","minecraft_version-1-21"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ExooQueue - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ExooQueue - Minecraft\" \/>\n<meta property=\"og:description\" content=\"ExooQueue is a flexible and powerful queue plugin designed specifically for Paper Minecraft servers. It helps you manage player access to crowded worlds by implementing a fair, configurable waiting system \u2014 perfect for popular game modes or limited-capacit\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/\",\"name\":\"ExooQueue - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp\",\"datePublished\":\"2026-06-03T19:39:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/exooqueue\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ExooQueue\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ExooQueue - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/","og_locale":"en_US","og_type":"article","og_title":"ExooQueue - Minecraft","og_description":"ExooQueue is a flexible and powerful queue plugin designed specifically for Paper Minecraft servers. It helps you manage player access to crowded worlds by implementing a fair, configurable waiting system \u2014 perfect for popular game modes or limited-capacit","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/","name":"ExooQueue - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp","datePublished":"2026-06-03T19:39:59+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/exooqueue-icon-d0bd98d8fc6c3d7841ac044479fed0b4d3aa8063_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/exooqueue\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"ExooQueue"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/66609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/66610"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=66609"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=66609"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=66609"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=66609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}