A small Paper plugin for Minecraft 1.20.1 that adds a /rtp command for
everyone, with no cooldown, no warm-up delay, no cost and no other restriction.
/rtpteleports the player to a random safe location. Available to all players by default.- No cooldown, no countdown, no "don't move" rule, no economy, no cancel on combat.
- Safe landing: solid ground, 2 free blocks of headroom, never in water or lava, never on or in hazards such as magma, cactus, fire, cobweb, powder snow, sweet berries (configurable list).
- Never lags the server: chunks are loaded asynchronously, and a spot is checked on the main thread only once its chunk is ready. Keep the radius inside a pre-generated area to make it instant.
- Configurable area: center, minimum and maximum distance, enabled worlds, messages (MiniMessage).
/rtp <player>lets admins random-teleport someone else (freertp.others).
- Paper (or a Paper fork) 1.20.1, Java 17 or newer.
- Spigot/CraftBukkit are not supported (the plugin uses Paper's async teleport and chunk APIs).
- Download
FreeRTP-<version>.jarfrom the releases page (or build it yourself). - Put it in your server's
plugins/folder and restart the server. - Edit
plugins/FreeRTP/config.ymlif needed and run/freertp reload.
| Command | Permission | Default | Description |
|---|---|---|---|
/rtp (alias /randomtp) |
freertp.use |
everyone | Teleport yourself to a random safe location |
/rtp <player> |
freertp.others |
operators | Randomly teleport another player |
/freertp reload (alias /frtp) |
freertp.admin |
operators | Reload config.yml |
plugins/FreeRTP/config.yml (excerpt):
enabled-worlds:
- world # /rtp only works in these worlds (exact folder names)
center-x: 0
center-z: 0
min-radius: 100 # at least this far from the center on one axis...
max-radius: 6000 # ...and at most this far on both axes (a square area)
max-attempts: 25 # random spots tried before giving up
play-sound: true
debug: false # log why each random spot was rejectedSee the file itself for the unsafe block list and all messages.
- A random point in the square ring
min-radius <= max(|dx|, |dz|) <= max-radiusis chosen. - Its chunk is loaded asynchronously.
- The highest non-leaf block must be solid and not unsafe, with two free, non-hazardous blocks above
it, inside the world border. Otherwise another point is tried (up to
max-attempts). - The player is teleported there. If nothing safe was found, they are told to try again.
If players often get "Could not find a safe location", the area is probably mostly water or covered
by hazards: turn on debug to see the rejection reasons, or move the center/radius to land.
./gradlew buildThe jar is written to build/libs/FreeRTP-<version>.jar. Requires JDK 17 or newer.