Heuxil's Studio
Discord

RTPQueue

v1.0.0

Permanent links


01 / Overview

A random-teleport queue for duels.

RTPQueue is a small standalone plugin. Players run one command to hop in a queue, and the second a full team is waiting (2 by default, you can change it) everyone gets teleported together to a random spot in one of your arena worlds. No delay, no chat spam, no titles popping up. Just a clean drop into the map.

When players land there is a short window where they cannot take damage, so nobody gets hit before the whole group has finished teleporting. It is the same RTP queue I used inside PracCore, pulled out into its own plugin so you can run it on its own.

What it does

  • One command to join or leave the queue.
  • Teleports a full team together once enough players are waiting.
  • Picks a random safe spot inside a radius and skips lava, water, fire, cactus and other unsafe blocks.
  • Spaces players out a little so they do not land on top of each other.
  • Gives everyone a few seconds of damage immunity right after the teleport.
  • Drops you from the queue automatically if you disconnect.
i

RTPQueue does not handle kits, scoreboards or win tracking. It only does the queue and the teleport. Pair it with whatever match plugin you already run.

02 / Requirements

What you need first.

  • Java 21 at runtime. This is required even if you are on 1.20.1.
  • A Paper, Spigot or Bukkit server. Paper is recommended.
  • Minecraft 1.20.1 up to 1.21.x.
!

This is a server plugin, not a proxy plugin. Velocity and BungeeCord are proxies, not a place to load server plugins. A cross-server RTP would need a separate proxy module, which is not part of this.

03 / Installation

Drop it in, set your worlds, restart.

  1. Stop your server. Do a full stop, not a reload.
  2. Put the jar in your plugins folder. Copy RTPQueue-1.0.0.jar into plugins/.
  3. Start the server once. This creates plugins/RTPQueue/config.yml.
  4. Edit the config. Set your arena worlds and tweak the radius, team size and so on. See the config reference.
  5. Restart again so the new config loads. You are done.
!

Do not use /reload to apply changes to the jar. It can throw "zip file closed" errors. Stop and start the server fully instead. To reload just the config you can use /rtpqueue reload.

04 / Commands

Everything you can type.

The main command is /rtpqueue, with /rtpq as a shorter alias. Run it with no argument and it just toggles you in or out of the queue.

CommandAliasWhat it does
/rtpqueue/rtpqNo argument. Toggles you in or out of the queue.
/rtpqueue joinJoins the queue.
/rtpqueue leavequitLeaves the queue.
/rtpqueue statusinfoTells you whether you are currently in the queue.
/rtpqueue reloadReloads config.yml. Needs the rtpqueue.reload permission.

Tab completion works on the subcommands, and reload only shows up for people who have permission for it.

05 / Configuration

The config, line by line.

Everything lives in plugins/RTPQueue/config.yml under the rtp-queue block. Here is the default file:

config.ymlyaml
rtp-queue:
  enabled: true
  worlds:
    - world_minecraft_desert
    - world_minecraft_snowy_fields
    - world_minecraft_badlands
    - world_minecraft_mushroom
    - world_minecraft_plains
  center: "spawn"
  radius: 5000
  players-per-match: 2
  min-spacing: 3
  max-spacing: 5
  protection-seconds: 3
  announce-delay-seconds: 5
  max-attempts: 40
  unsafe-blocks: [ LAVA, WATER, FIRE, CACTUS, MAGMA_BLOCK, POWDER_SNOW ]
  sounds:
    joined: "block.note_block.bit"
    teleport: "block.note_block.chime"
    leave: "block.note_block.didgeridoo"
  messages:
    joined: "5FF49you have joined the rtpqueue"
    left: "&#FF3D3Dyou have left the rtpqueue"
    status-in: "&7you are in the rtpqueue"
    status-out: "&7you are not in the rtpqueue"
    disabled: "&7the rtpqueue is disabled"
    announce: "#FF5B<player> is waiting for an opponent in the rtpqueue!"
OptionDefaultWhat it controls
enabledtrueTurns the whole queue on or off. If off, joining tells the player it is disabled.
worlds5 listedThe worlds players can get sent to. Leave the list empty to use the player's current world instead.
center"spawn"Where the random area is measured from. Use "spawn" or coordinates like "0,0" (x,z).
radius5000How far out, in blocks, a player can be dropped from the center.
players-per-match2Exact number of players per teleport. This is both the minimum and the maximum.
min-spacing / max-spacing3 / 5How far apart players land from each other, in blocks.
protection-seconds3Seconds of damage immunity after landing. Set to 0 to turn it off.
announce-delay-seconds5If someone waits alone longer than this, the announce message is sent to chat.
max-attempts40How many times it tries to find a safe spot before giving up on that pick.
unsafe-blockslava, water, etc.Block types the plugin refuses to land on. Unknown names are just skipped, which is why it works across 1.20 and 1.21.
soundsnote blocksVanilla sound names played on join, teleport and leave.
messagessee aboveEvery message. Supports & color codes and &#RRGGBB hex.
06 / Permissions

Two nodes, that is it.

PermissionDefaultRole
rtpqueue.usetrueLets a player use the queue. On for everyone by default.
rtpqueue.reloadopLets someone run /rtpqueue reload. Ops only by default.

07 / Download

Grab the jar.

RTPQueue-1.0.0.jar
44 KiB · for Minecraft 1.20.1 to 1.21.x · needs Java 21
Get it

Heads up: swap the download link above for your real BuiltByBit or Discord link when the plugin is up.

08 / FAQ

Common questions.

Do I really need Java 21? +

Yes, even on 1.20.1. The plugin is built against Java 21, so the server has to be running on it or RTPQueue will not load.

Can it teleport players across different servers? +

No. RTPQueue runs on a single server. Velocity and BungeeCord are proxies, not plugin servers, so a cross-server RTP would need a separate proxy module that is not included here.

How do I change how many players are in a match? +

Set players-per-match in the config. It is the exact size, so 2 means it waits for 2 and sends exactly 2. Set it to 3 or 4 for small group fights.

What stops people landing in lava? +

The unsafe-blocks list. The plugin checks the landing spot and retries up to max-attempts times to find one that is not on those blocks. Add more block names if you want it to avoid others.

Can I change or translate the messages? +

Yep, everything under messages is editable. You can use & color codes and &#RRGGBB hex. There is also a <player> placeholder in the announce message.

Will /reload work? +

Do not reload the whole server to swap the jar, it can break with "zip file closed". For config changes use /rtpqueue reload. For jar changes, stop and start the server.

What happens if someone leaves mid queue? +

If they disconnect they are removed from the queue automatically, so you never end up with a match waiting on a player who already left.

09 / Support

Need a hand?

Open a ticket on Discord and I will help. When you do, please include your server software (Paper, Spigot, etc.), your Minecraft version, your Java version and any error lines from the console. It saves a lot of back and forth.

Thanks for using RTPQueue. Bug reports and ideas are always welcome.