[1.7 - 1.21.*] ⬅️ EzRTP ➡️ Highly configurable RTP plugin for Minecraft servers icon

[1.7 - 1.21.*] ⬅️ EzRTP ➡️ Highly configurable RTP plugin for Minecraft servers -----

Configurable random teleportation - Supports multiple worlds - Many extra features



EzRTP
Configurable random teleport command with GUI world selection, Vault charging & safe-location scanning
Paper/Purpur/Spigot 1.7 - 1.21+ • Java 17+ • World-border aware • MiniMessage chat output • Optional Vault economy hook • Lightweight standalone jar

Why EzRTP?
  • Player-friendly RTP – `/rtp` finds solid ground inside the configured world border, skips unsafe blocks, and reports the final coords with MiniMessage styling.
  • Multi-world teleports – Offer curated destinations for overworld, resource, or event worlds with an optional permission-gated GUI selector.
  • Join protection – Optionally teleport newcomers (or everyone) on join with delay + bypass permission toggles to prevent spawn camping.
  • Vault economy ready – Charge a configurable fee for each teleport, refund on failure, and surface friendly "insufficient funds" prompts.
  • Performance-conscious queue – Throttle heavy usage with a configurable teleport queue that spaces out searches while respecting bypass permissions.
  • Purpose-built service – Cleanly separates config, command, and teleport logic so you can drop the jar into any survival setup without conflicts.


Feature Highlights
  • Biome Selector GUI Example – The world selector GUI now supports biome selection for RTP.
    [​IMG]
  • Biome Stats Example – View detailed biome-specific statistics with `/rtp stats biomes`.
    [​IMG]
  • Heatmap Example – RTP location distribution can be visualized with a heatmap for analysis and troubleshooting.
    [​IMG]
  • Interactive world selector – Enable an inventory GUI with filler items, custom icons, and per-option permissions so players pick their landing zone.
    [​IMG]
  • 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 stats` command showing success rates, cache hit rates, per-biome metrics, and failure causes with actionable recommendations. Use `/rtp stats biomes` for detailed biome-specific analysis.
  • Heatmap visualization – Use `/rtp heatmap [gridSize] [world]` to generate in-game maps showing 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 reload` hot-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-seconds` or use the `countdown` block in `config.yml` to 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 with `debug-rejection-logging` in `config.yml` for troubleshooting safe-location logic.
  • Protection-aware search – Optionally avoid protected regions/claims by enabling `protection.avoid-claims` and listing providers like `worldguard` or `griefprevention`.
  • Per-world daily limit controls – Disable daily and weekly RTP limits per world with `disable-daily-limit: true` for unlimited usage in specific worlds while maintaining limits elsewhere.
  • Flexible GUI cooldown behavior – Configure `allow-gui-during-cooldown: true` to allow GUI opening during cooldowns, with worlds on cooldown appearing disabled rather than blocking GUI access entirely.
  • Visible cooldown indicators – Options on cooldown are now shown in the GUI with clear cooldown timers in the item lore, making remaining wait times immediately visible to players.
  • Human-readable cooldown messages – Display cooldowns in readable format like "1h 30m 45s" instead of raw seconds using `<hours>`, `<minutes>`, and `<seconds>` placeholders in messages.
  • Admin-only cache visibility – Control biome cache information display with `admin-only-cache-info: false` to show cache stats to all players by default, and `disable-cache-filtering: true` to globally disable cache-based biome filtering by default.
  • Multi-language support – Language-specific message files with automatic fallback to English, supporting MiniMessage and legacy color codes.
  • PlaceholderAPI integration – Use dynamic placeholders like `%player_name%` in GUI item names and lore for personalized teleport menus.
  • Rare biome optimization – Intelligent search strategies prioritize rare biome hotspots while maintaining randomness, with configurable weighted search algorithms.
  • ForceRTP with PlaceholderAPI – Use `/rtp forcertp <player>` to force random teleportation on specific players. Supports PlaceholderAPI placeholders like `%player_name%` for command block automation and custom portal integration. Bypasses cooldowns and limits for administrative control.

Quick Start
  • Drop `EzRTP.jar` into your Paper or Purpur `plugins/` directory and restart the server.
  • Edit `plugins/EzRTP/config.yml` to 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.yml` so the searching, success, failure, and queue prompts match your server's style.
  • Toggle `enabled` inside `gui.yml` and add world entries to present a permission-aware teleport selector menu.
  • Adjust `queue.yml` if 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 `cost` at `0` for free usage.
  • Run `/rtp reload` or restart once you finish editing to apply the new settings.

Configuring EzRTP in a Server Network
  • Install EzRTP on each backend world that should provide random teleports as well as on your lobby if you want the selector GUI to offer server transfers.
  • Enable the proxy integration by setting `enabled: true` inside `network.yml` everywhere EzRTP is installed. Leave `lobby` at `false` on gameplay servers so `/rtp` behaves normally.
  • On your lobby server, set `lobby: true`. Any configured servers will then fill open slots in the RTP GUI alongside world entries, complete with ping/online status.
  • Define each destination under `servers` using the proxy-registered `bungee-server` name, the host/port to ping, desired GUI slot, optional permission, and icon text. Toggle `hide-when-offline` or `allow-when-offline` per server to control visibility and connection attempts.
  • Keep your proxy (BungeeCord/Velocity) listing in sync with the `servers` block so EzRTP can connect players using the standard `BungeeCord` plugin message channel. After editing, run `/rtp reload` on each node to pick up the changes.
  • Use MiniMessage in `connect-message`, `offline-message`, and icon lore to brand the selector and give players clear network feedback.

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 RTP statistics and performance 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)
/rtp forcertp <player> Force random teleportation for a specified player. Supports PlaceholderAPI placeholders like %player_name%. Bypasses cooldowns and limits. ezrtp.forcertp (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
Code (yml (Unknown Language)):

# 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:
  # seconds: 5
  bossbar:
    enabled: false
    title: "<yellow>Teleporting in <white><seconds></white> seconds...</yellow>"
    color: YELLOW
    style: SOLID
  particles:
    enabled: true
    type: ENCHANTMENT_TABLE
    points: 12
    radius: 1.2
    height-offset: 0.8
    extra: 0.0
    force: false
    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
  # Rare biome optimization for improved search efficiency
  # When enabled, uses intelligent strategies to prioritize rare biome hotspots
  rare-biome-optimization:
    # Toggle rare biome optimization on/off
    enabled: true
    # Custom list of biomes considered "rare" (leave empty for built-in list)
    rare-biomes: []
    # Enable weighted search that favors hotspots for rare biomes
    use-weighted-search: true
    # Track and maintain hotspots for rare biomes
    enable-hotspot-tracking: true
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:
  # Allow opening the GUI even if the current world has an active cooldown
  # When true, GUI opens but worlds with active cooldowns are disabled in the GUI
  # When false, GUI won't open if any world has an active cooldown (current behavior)
  allow-gui-during-cooldown: true
  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:
      # Disable daily limit for this world (overrides daily-limit and weekly-limit)
      disable-daily-limit: false
      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:
      disable-daily-limit: false
      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: ""
 
Code (yml (Unknown Language)):

# 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><hours></white> <white><minutes></white> <white><seconds></white> 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>"
 
Code (yml (Unknown Language)):

# EzRTP teleport queue configuration
enabled: false
max-size: 0
bypass-permission: "ezrtp.queue.bypass"
start-delay-ticks: 20
interval-ticks: 40
 
Code (yml (Unknown Language)):

# EzRTP GUI configuration
enabled: false
title: "<gradient:#00b4db:#0083b0><bold>Random Teleport</bold></gradient>"
rows: 3
no-permission-message: "<red>You do not have permission to travel there.</red>"
# Only show cache info (biome counts) to players with ezrtp.admin permission
admin-only-cache-info: false
# Disable cache filtering entirely (show all biomes regardless of cache status)
disable-cache-filtering: true
# Supports PlaceholderAPI placeholders in item names and lore (e.g., %player_name%)
filler:
  enabled: true
  material: BLACK_STAINED_GLASS_PANE
  name: "<dark_gray> </dark_gray>"
worlds:
  overworld:
    slot: 13
    permission: ""
    icon:
      material: GRASS_BLOCK
      name: "<gradient:#7ed957:#2ecc71><bold>Overworld</bold></gradient>"
      lore:
        - "<gray>Balanced biomes, safe landings, and</gray>"
        - "<gray>plenty of room to explore.</gray>"
        - "<dark_gray>Click to begin your adventure.</dark_gray>"
    settings:
      world: world
      radius:
        min: 256
        use-world-border: true
  nether:
    slot: 11
    permission: "ezrtp.gui.nether"
    icon:
      material: NETHERRACK
      name: "<gradient:#ff512f:#dd2476><bold>Nether</bold></gradient>"
      lore:
        - "<gray>Warp into the Nether to hunt</gray>"
        - "<gray>for ancient debris and rare loot.</gray>"
        - "<dark_gray>Requires Nether access.</dark_gray>"
    settings:
      world: world_nether
  end:
    slot: 15
    permission: "ezrtp.gui.end"
    icon:
      material: END_STONE
      name: "<gradient:#a8edea:#fed6e3><bold>The End</bold></gradient>"
      lore:
        - "<gray>Teleport to distant End islands</gray>"
        - "<gray>for chorus fruit and gateways.</gray>"
        - "<dark_gray>Requires End access.</dark_gray>"
    settings:
      world: world_the_end
  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
 
Code (yml (Unknown Language)):

# 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

[​IMG]
Resource Information
Author:
----------
Total Downloads: 211
First Release: Oct 29, 2025
Last Update: Today at 1:39 PM
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings