EzRTP – The random teleport plugin for Minecraft servers
EzRTP is a powerful, safe, and highly configurable random teleport (RTP) plugin for Minecraft servers. Designed for Paper, Purpur, and Spigot (1.7–1.21+), EzRTP offers advanced features like biome selection, world-border awareness, Vault economy integration, and a modern GUI for world and biome selection. Perfect for survival, adventure, and networked servers seeking a reliable, lag-free RTP experience.
Key Features:
- Compatible with Paper, Purpur, and Spigot (1.7–1.21+)
- Requires Java 17+
- Safe random teleportation with world-border and biome awareness
- Modern MiniMessage chat output
- Optional Vault economy support for paid teleports
- Lightweight, standalone JAR – easy to install and update
Why Choose EzRTP for Your Minecraft Server?
Safe Random Teleport (RTP):
/rtpfinds solid ground inside the configured world border, skips unsafe blocks, and reports the final coordinates with MiniMessage styling.
Multi-World & Biome Teleports: Offer curated destinations for overworld, nether, end, resource, or event worlds with an optional permission-gated GUI selector. Biome selection lets players target their favorite environments.
Join Protection: Optionally teleport newcomers (or everyone) on join with delay and bypass permission toggles to prevent spawn camping.
Vault Economy Integration: Charge a configurable fee for each teleport, refund on failure, and display friendly "insufficient funds" prompts. Works seamlessly with Vault and popular economy plugins.
Performance-Conscious Queue: Throttle heavy usage with a configurable teleport queue that spaces out searches while respecting bypass permissions.
Purpose-Built & Modular: Cleanly separates config, command, and teleport logic so you can drop the jar into any survival or network setup without conflicts.
Feature Highlights
Biome Selector GUI Example
The world selector GUI now supports biome selection for RTP:

Biome Stats Example
View detailed biome-specific statistics with /rtp stats biomes:

Heatmap Example – RTP location distribution can be visualized with a heatmap for analysis and troubleshooting.

Interactive world selector – Enable an inventory GUI with filler items, custom icons, and per-option permissions so players pick their landing zone.
Safe block filtering – Maintain a denylist of unsafe floor blocks (lava, water, magma, powder snow, etc.) and expand it per biome or gamemode needs.
Chunk readiness checks – Skips ungenerated chunks, ensures the destination chunk is loaded, and applies configurable retry limits. Automatically unloads temporarily loaded chunks to optimize memory usage.
MiniMessage messaging – Customize searching, success, failure, queue, and missing-world alerts with Adventure MiniMessage placeholders
<x>,<z>,<world>, and more.Teleport flair – Trigger configurable particle effects at the landing spot so players know the teleport completed.
Economy feedback – Configure the teleport cost, enable Vault integration automatically, and localise insufficient balance messaging.
Biome inclusion/exclusion – Restrict teleports to approved biome lists or skip unwanted regions like oceans and deserts.
Smart biome pre-caching – Automatically cache pre-validated safe locations per biome to dramatically improve success rates and reduce lag when biome filters are active. Failed teleport attempts (player offline, insufficient funds) are now also cached to prevent wasting valid locations. Configure cache size, warmup, and expiration in
biomes.pre-cache.RTP statistics & monitoring – Track RTP performance with
/rtp statscommand showing success rates, cache hit rates, per-biome metrics, and failure causes with actionable recommendations. Use/rtp stats biomesfor detailed biome-specific analysis.Heatmap visualization – Use
/rtp heatmap [gridSize] [world]to analyze cached RTP location distribution with grid-based statistical analysis. Verify randomness, detect clustering, and troubleshoot imbalances with configurable grid resolution (16-4096 blocks).Performance-conscious queue – Throttle heavy usage with a configurable teleport queue that spaces out searches while respecting bypass permissions.
Join-delay scheduler – Wait a configurable number of ticks after login before teleporting so players load resource packs or tutorials first.
Reload subcommand –
/rtp reloadhot-swaps config changes without kicking players or restarting the server.Per-player cooldowns, limits, & costs – Configure per-world, per-group cooldowns, daily/weekly usage limits, and optional cost overrides for
/rtp, with permission-based bypass and persistent tracking (YAML or MySQL).Configurable teleport countdown – Add an optional, per-player countdown before teleportation with optional bossbar and particle rings. Set
countdown-secondsor use thecountdownblock inconfig.ymlto control visuals and timing.Y-level and debug controls – Restrict random teleports to a min/max Y-level range (
min-y,max-y), and enable detailed debug logging for rejected locations withdebug-rejection-logginginconfig.ymlfor troubleshooting safe-location logic.Protection-aware search – Optionally avoid protected regions/claims by enabling
protection.avoid-claimsand listing providers likeworldguardorgriefprevention.
Quick Start
- Drop
EzRTP.jarinto your Paper or Purpurplugins/directory and restart the server. - Edit
plugins/EzRTP/config.ymlto set the target world, teleport center, radius bounds, teleport cost, unsafe block list, particles, and on-join behaviour. - Localise the MiniMessage output in
plugins/EzRTP/messages.ymlso the searching, success, failure, and queue prompts match your server's style. - Toggle
enabledinsidegui.ymland add world entries to present a permission-aware teleport selector menu. - Adjust
queue.ymlif you need to throttle teleport requests during peak hours or grant bypass permissions to staff. - Hook Vault + your economy plugin if you want to charge for teleports; leave
costat0for free usage. - Run
/rtp reloador restart once you finish editing to apply the new settings.
Commands & Permissions
| Command | Description | Permission |
|---|---|---|
/rtp |
Teleport the executing player to a random safe location. | ezrtp.use (default: true) |
/rtp reload |
Reload EzRTP configuration from disk. | ezrtp.reload (default: op) |
/rtp stats |
View comprehensive RTP statistics including cache performance, success rates, and per-biome metrics. | ezrtp.stats (default: op) |
/rtp stats biomes |
View detailed biome-specific statistics showing top biomes by activity, success rates, and average teleport times. | ezrtp.stats (default: op) |
/rtp heatmap [gridSize] [world] |
Visualize cached RTP location distribution with grid-based heatmap analysis. Verify randomness, detect clustering, and troubleshoot imbalances with configurable grid resolution (16-4096 blocks). | ezrtp.heatmap (default: op) |
Grant ezrtp.queue.bypass to let trusted players skip the queue, and assign per-option GUI permissions directly in gui.yml.
Configuration Overview
config.yml
# EzRTP teleport configuration
# Set to true to enable debug logging for rejected random teleport locations (for troubleshooting safe location logic).
debug-rejection-logging: false
# Enable or disable bStats metrics (https://bstats.org/plugin/bukkit/EzRTP/27735)
# These anonymous metrics help track plugin usage and performance across servers.
enable-bstats: true
# Optional: restrict random teleport Y-levels (inclusive). If omitted, world min/max height is used.
# min-y: 64
# max-y: 120
world: world
center:
x: 0
z: 0
radius:
min: 256
# max: 2048
use-world-border: true
max-attempts: 32
cost: 0.0
countdown-seconds: 0 # Optional countdown before teleport (0 = disabled)
countdown:
# Optional: override countdown seconds here instead of countdown-seconds.
# seconds: 5
bossbar:
enabled: false
title: "<yellow>Teleporting in <white><seconds></white> seconds...</yellow>"
color: YELLOW
style: SOLID
particles:
enabled: true
# Primary Bukkit particle to use for the countdown ring.
type: ENCHANTMENT_TABLE
# Number of points in the ring around the player.
points: 12
# Ring radius in blocks.
radius: 1.2
# Height offset from the player's feet.
height-offset: 0.8
# Additional speed/extra parameter passed to the particle effect.
extra: 0.0
# Force the particles to render for players at long distances (1.13+ servers).
force: false
# Optional secondary sparkle particle.
secondary-particle: PORTAL
secondary-count: 6
secondary-offset: 0.35
unsafe-blocks:
- WATER
- LAVA
- MAGMA_BLOCK
- POWDER_SNOW
- FIRE
- CAMPFIRE
- SOUL_FIRE
biomes:
# Optional: list of allowed biomes. Leave empty to allow all.
include: []
# Optional: list of biomes to avoid.
exclude: []
# Pre-caching configuration for biome-filtered RTPs
# When enabled, the server will pre-generate and cache safe locations for biome filters,
# significantly improving RTP success rates and reducing failed attempts.
pre-cache:
# Toggle pre-caching on/off. Enabled by default for better RTP performance with biome filters.
enabled: true
# Maximum number of locations to cache per biome (higher = better hit rate but more memory)
max-per-biome: 50
# Number of locations to pre-generate during server startup/reload for each configured biome
warmup-size: 20
# How long (in minutes) cached locations remain valid before expiring
expiration-minutes: 10
protection:
avoid-claims: false
providers:
- worldguard
- griefprevention
particles:
enabled: false
type: PORTAL
count: 40
offset:
x: 0.5
y: 1.0
z: 0.5
extra: 0.0
force: false
on-join:
enabled: false
only-first-join: false
bypass-permission: ""
delay-ticks: 40
# RTP cooldowns and usage limits
rtp-limits:
default:
cooldown-seconds: 300 # Cooldown in seconds between /rtp uses
daily-limit: 10 # Max uses per day
weekly-limit: 50 # Max uses per week
cost: 0.0 # Optional cost override for this group
worlds:
world:
default:
cooldown-seconds: 300
daily-limit: 10
weekly-limit: 50
cost: 0.0
group.vip:
cooldown-seconds: 60
daily-limit: 50
weekly-limit: 200
cost: 0.0
world_nether:
default:
cooldown-seconds: 600
daily-limit: 5
weekly-limit: 20
cost: 0.0
group.staff:
cooldown-seconds: 0
daily-limit: -1 # -1 = unlimited
weekly-limit: -1
cost: 0.0
bypass-permissions:
- ezrtp.bypass.cooldown
- ezrtp.bypass.limit
storage: yaml # or mysql
mysql:
url: jdbc:mysql://localhost:3306/mc
user: root
password: ""
messages.yml
# EzRTP MiniMessage templates
# Placeholders: <world>, <x>, <z>, <position>, <server>, <cost>, <target-biome>, <cached-locations>
teleporting: "<gray>Searching for a safe location...</gray>"
teleport-success: "<green>Teleported to <white><x></white>, <white><z></white> in <white><world></white>.</green>"
teleport-failed: "<red>Unable to find a safe location. Please try again.</red>"
teleport-failed-biome: "<red>No valid biome was found. Please try again or try a different biome filter.</red>"
world-missing: "<red>The configured world '<white><world></white>' is not available.</red>"
join-searching: "<gray>Finding you a safe place to explore...</gray>"
insufficient-funds: "<red>You need <white><cost></white> to use random teleport.</red>"
queue-queued: "<gray>You joined the random teleport queue. Position: <white><position></white>.</gray>"
queue-full: "<red>The random teleport queue is currently full. Please try again soon.</red>"
# Cooldown and usage limit messages
cooldown: "<red>You must wait <white><seconds></white> seconds before using /rtp again.</red>"
limit-daily: "<red>You have reached your daily /rtp limit for this world.</red>"
limit-weekly: "<red>You have reached your weekly /rtp limit for this world.</red>"
# Countdown messages
countdown-start: "<yellow>Teleporting in <white><seconds></white> seconds...</yellow>"
countdown-tick: "<gray><seconds>...</gray>"
queue.yml
# EzRTP teleport queue configuration
enabled: false
max-size: 0
bypass-permission: "ezrtp.queue.bypass"
start-delay-ticks: 20
interval-ticks: 40
gui.yml
# EzRTP GUI configuration
enabled: false
title: "<gold>Select a destination</gold>"
rows: 1
no-permission-message: "<red>You do not have permission to teleport there.</red>"
filler:
enabled: true
material: GRAY_STAINED_GLASS_PANE
name: "<gray> </gray>"
worlds:
overworld:
# slot: 0
permission: ""
icon:
material: GRASS_BLOCK
name: "<green>Overworld</green>"
lore:
- "<gray>Teleport to a random location in the overworld.</gray>"
settings:
world: world
radius:
min: 256
use-world-border: true
resource:
slot: 1
permission: "ezrtp.gui.resource"
icon:
material: IRON_PICKAXE
name: "<gold>Resource World</gold>"
lore:
- "<gray>Gather materials without ruining the main world.</gray>"
settings:
world: resource
radius:
min: 512
max: 4096
use-world-border: false
network.yml
# EzRTP proxy / network configuration
enabled: false
lobby: false
ping-interval-ticks: 200
ping-timeout-millis: 1500
servers:
skyblock:
bungee-server: "skyblock"
host: "127.0.0.1"
port: 25566
slot: 4
permission: ""
display-name: "Skyblock"
hide-when-offline: false
allow-when-offline: false
connect-message: "<gray>Connecting you to <white><server></white>...</gray>"
offline-message: "<red><server></red> is currently unavailable."
icon:
material: ENDER_PEARL
name: "<gold><server></gold>"
lore:
- "<gray>Status: <status></gray>"
- "<gray>Ping: <white><ping></white>ms</gray>"
Requirements
- Java 17 or newer
- Paper, Purpur, or SpigotMC 1.21+ server build
- Optional: Vault + an economy plugin if you want to charge for teleports
- Optional: A permissions plugin (LuckPerms, etc.) if you want granular control over
/rtp reload, queue bypass, GUI option access, or cost bypasses
Support & Links
- Need help? Join our Discord and open a ticket under the EzRTP category.
- Share seeds, biome rules, or config presets on the discussion tab so other admins can jumpstart their setup.
- Pair EzRTP with EzSpawners, EzAuction, and the rest of the Ez-series utilities for a cohesive network toolkit.
- Get EzEconomy – Modern Vault Economy Plugin
Ready to launch players into adventure?
Install EzRTP and give explorers a safe, stylish way to discover your world, across every dimension!
Information
| Category | Gameplay |
|---|---|
| Published on | December 24, 2025 |
| License | Unspecified |
| Downloads | 50 |
| Stars | 1 |
| Watchers | 1 |
