ZenRTP
ZenRTP is a straightforward random teleport plugin for Paper servers: pick a ring around your world center, find a safe surface, and send players there—with cooldowns, optional costs (hunger, XP, or Vault money), world rules you control, and messages you can tailor.
ZenRTP is built on the Paper API 1.21.x. Spigot-only setups are not supported.
At a glance
| Servers | Paper 1.21.x, Java 21+ |
| Optional hooks | Vault (money costs), PlaceholderAPI (not required for core RTP) |
| Config | config.yml + messages.yml (MiniMessage or legacy & colors), reloadable with /zenrtp reload |
Features
- Fair random spots inside a configurable distance band from
center-x/center-z, with optional per-world overrides. - Safety-first: block lists for lava, fire, cactus, and similar; checks for solid ground and room at feet/head;
min-y/max-ybounds. - Sky visibility (Overworld): optional “clear column” up to build height for open-air arrivals. Nether and End skip this (no overworld sky).
- Teleport delay with a chat countdown; optionally cancel if the player moves before they go.
- Cooldowns, optional daily limits, and costs (hunger, XP, Vault currency).
- World blacklist / whitelist, avoid spawn, avoid nearby players, and chunk preloading at the destination.
- Titles, sounds, and editable messages in
messages.yml.
Installation
- Grab the latest
ZenRTP-*.jarfrom GitHub Releases or Modrinth. - Drop it in your server’s
pluginsfolder. - Start or restart the server once so default configs generate.
- Tweak
plugins/ZenRTP/config.ymlandplugins/ZenRTP/messages.yml, then run/zenrtp reload(or restart).
Commands
| Command | What it does |
|---|---|
/rtp |
Random teleport in your current world. |
/rtp <world> |
Random teleport in <world> (you need permission for that world). |
/rtpo <player> |
RTP another player in their current world. |
/rtpo <player> <world> |
RTP another player into a random spot in <world>. |
/zenrtp reload |
Reload config.yml and messages.yml. |
Permissions
| Permission | Default | Meaning |
|---|---|---|
zenrtp.use |
true |
Use /rtp. |
zenrtp.rtp.<world> |
(unset) | Allow RTP into <world> (e.g. zenrtp.rtp.world_nether). Set per-world in your permission plugin. |
zenrtp.others |
op |
Use /rtpo. |
zenrtp.admin |
op |
/zenrtp reload. |
zenrtp.bypass.cooldown |
op |
Skip cooldown. |
zenrtp.bypass.cost |
op |
Skip hunger/XP/money costs (unless require-costs is enforced in config). |
zenrtp.bypass.daily |
op |
Skip the daily RTP cap. |
If a player lacks zenrtp.rtp.<world> for a world, they cannot RTP there—even if /rtp works elsewhere.
Optional plugins
| Plugin | Role |
|---|---|
| Vault | Money cost when currency-cost is set. |
| PlaceholderAPI | Handy elsewhere on your server; ZenRTP does not need it for basic RTP. |
Configuration (overview)
Everything lives under plugins/ZenRTP/. The bundled config.yml includes inline comments explaining each option.
| Area | What to look for |
|---|---|
| Distance & center | min-distance, max-distance, center-x, center-z |
| Height | min-y, max-y (and per-world-settings overrides) |
| Safety | safe-location-check, unsafe-blocks, require-sky-visibility (Overworld only) |
| Worlds | world-blacklist, world-whitelist (empty whitelist = all except blacklist) |
| Teleport flow | teleport-delay, cancel-on-move, max-attempts, preload-chunks, preload-radius |
| Spawn & players | spawn-radius, avoid-near-players, avoid-player-radius |
| Limits & economy | cooldown, daily-limit, hunger-cost, xp-cost, currency-cost, require-costs |
| Feedback | enable-sounds, title timings, effect durations, log-teleports |
Messages
Edit messages.yml to change prefixes, chat text, and placeholders. After /zenrtp reload, updates apply without a full server restart.
Building from source
git clone https://github.com/maybeizen/zenrtp.git
cd ZenRTP
./gradlew shadowJar
The shaded plugin jar lands in build/libs/ (the filename includes the version from plugin.yml).
Links
- Author: maybeizen
Licensed under the MIT License.

