
ZenRTP
A lightweight random teleport plugin for Paper servers. Pick a ring around a center point, find a safe surface, and teleport players there—with cooldowns, costs, optional per-world rules, and messages you can edit.
Requirements: Paper 1.21.x (API 1.21), Java 21.
ZenRTP is built for Paper servers; Spigot-only servers are not supported.
Features
- Random location in a configurable distance band from
center-x/center-z, with per-world overrides. - Safety checks: configurable “unsafe” blocks (lava, fire, cactus, etc.), air at feet/head, solid ground, and Y bounds (
min-y/max-y). - Sky visibility (Overworld only): optional clear column to build height. Nether and End ignore this—there is no sky there.
- Teleport delay with a chat countdown (e.g. 3, 2, 1); movement can cancel the pending RTP if enabled.
- Cooldowns, optional daily limits, and costs (hunger, XP, money via Vault).
- World blacklist / whitelist, spawn avoidance, avoid nearby players, chunk preloading around the destination.
- Titles and sounds (configurable); messages in
messages.yml(MiniMessage or legacy&codes).
Installation
- Download the latest ZenRTP jar file from the "Versions" page.
- Place it in your server’s
pluginsfolder. - Start or restart the server.
- Edit
plugins/ZenRTP/config.ymlandplugins/ZenRTP/messages.ymlas needed, then run/zenrtp reload(or restart).
Commands
| Command | Description |
|---|---|
/rtp | Random teleport in the world you are currently in. |
/rtp <world> | Random teleport in the named world (you must be allowed in that world). |
/rtpo <player> | Teleport another player in their current world. |
/rtpo <player> <world> | Teleport another player to a random spot in the given world. |
/zenrtp reload | Reload config.yml and messages.yml. |
Permissions
| Permission | Default | Purpose |
|---|---|---|
zenrtp.use | true | Use /rtp. |
zenrtp.rtp.<world> | (not set) | Allow RTP into the world named <world> (e.g. zenrtp.rtp.world_nether). Grant per world via your permissions plugin. |
zenrtp.others | op | Use /rtpo. |
zenrtp.admin | op | Use /zenrtp reload. |
zenrtp.bypass.cooldown | op | Ignore cooldown. |
zenrtp.bypass.cost | op | Ignore hunger/XP/money costs (unless require-costs is true in config). |
zenrtp.bypass.daily | op | Ignore the daily RTP limit. |
If a player lacks zenrtp.rtp.<world> for a world, they cannot RTP there, even if /rtp is allowed.
Optional plugins
| Plugin | Role |
|---|---|
| Vault | Money cost (currency-cost) when configured. |
| PlaceholderAPI | Present if you use placeholders elsewhere; ZenRTP does not require it for core RTP. |
Configuration (overview)
Main file: plugins/ZenRTP/config.yml.
- Distance & area:
min-distance,max-distance,center-x,center-z. - Height:
min-y,max-y(per-world underper-world-settingsif needed). - Safety:
safe-location-check,unsafe-blocks(Bukkit material names),require-sky-visibility(Overworld only). - Worlds:
world-blacklist,world-whitelist(empty whitelist = all worlds except blacklist). - Flow:
teleport-delay,cancel-on-move,max-attempts,preload-chunks,preload-radius. - Spawn / players:
spawn-radius,avoid-near-players,avoid-player-radius. - Limits & costs:
cooldown,daily-limit,hunger-cost,xp-cost,currency-cost,require-costs. - Feedback:
enable-sounds, title timings, effect durations,log-teleports.
All options are documented with comments in the default config.yml shipped with the jar.
Messages
Edit plugins/ZenRTP/messages.yml to change chat text, prefixes, and placeholders. After a reload, changes apply without a full restart.
Building from source
git clone https://github.com/maybeizen/zenrtp.git
cd ZenRTP
./gradlew shadowJar
The plugin jar is produced under build/libs/ (name includes the version from plugin.yml).
