All Mods Resource Packs Data Packs Shaders Modpacks Plugins
EzRTP

EzRTP

by Shadow48402 • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Advanced Random Teleport Plugin

Production-ready random teleport plugin for modern Minecraft servers.

Documentation: https://ez-plugins.github.io/EzRTP

Installation guide: https://ez-plugins.github.io/EzRTP/overview-installation.html#installation

  • < 3.0.0 build on Java 17 (MC 1.13 - 1.21.11.*) for Bukkit/Paper/Spigot/Purpur/Folia
  • >= 3.0.0 build on Java 25 (MC 26.1.*) for Bukkit/Paper/Spigot/Purpur/Folia
  • >= 3.1.0 build on Java 17 (MC 1.13 - 1.21.11.*) for Bukkit/Paper/Spigot/Purpur/Folia

Documentation

Modrinth • SpigotMC • Hangar • Discord


Feature Summary

  • Safe random teleport with configurable unsafe-block filtering and recovery behavior.
  • Biome include/exclude filtering, pre-cache, and rare-biome optimization (weighted search + hotspot tracking).
  • Search pattern control: random, circle, square, triangle, diamond.
  • Queue controls and cooldown/usage limits per world and per group.
  • GUI destination selector with per-destination permissions.
  • Heatmap tools (/rtp heatmap, /rtp heatmap save) and simulated samples (/rtp fake).
  • Named centers (/rtp addcenter, /rtp <center-name>) and center editing (/rtp setcenter).
  • Optional network selector entries via network.yml.
  • Optional Chunky pre-generation command (/rtp pregenerate [world] [radius]).
  • Optional performance and unsafe-location monitoring exports.
  • Folia-compatible runtime behavior for modern server scheduling models.

Feature Preview

Biome Statistics Dashboard

Biome Statistics

Heatmap Visualization

RTP Heatmap

World Selector GUI

World Selector GUI


Subcommands

Main Commands

Command Description Permission
/rtp Default RTP flow (GUI or direct teleport based on setup) ezrtp.use
/forcertp <player> [world] Force RTP for a target player ezrtp.forcertp

/rtp Subcommands

Subcommand Usage Permission Notes
reload /rtp reload ezrtp.reload Reload configuration
stats /rtp stats ezrtp.stats Overall RTP metrics
stats biomes /rtp stats biomes [page] ezrtp.stats Biome activity + paging
stats rare-biomes /rtp stats rare-biomes ezrtp.stats Rare-biome optimization stats
stats performance /rtp stats performance ezrtp.stats Percentile/timing metrics
unsafe-stats /rtp unsafe-stats ezrtp.stats Unsafe rejection breakdown
heatmap /rtp heatmap [biome] ezrtp.heatmap Gives in-game heatmap map
heatmap save /rtp heatmap save ezrtp.heatmap Saves heatmap PNG to plugin folder
fake /rtp fake <amount|clear> [world] ezrtp.heatmap.fake Add/clear simulated heatmap samples
setcenter /rtp setcenter <x> <z> or /rtp setcenter <world> <x> <z> ezrtp.setcenter Updates world center and reloads
addcenter /rtp addcenter <name> ezrtp.setcenter Stores named center at player location
pregenerate /rtp pregenerate [world] [radius] ezrtp.pregenerate Starts Chunky-assisted warmup tasks

Extra RTP Routing

  • /rtp <center-name>: teleports using centers.named.<name> from rtp.yml.
  • /rtp <region-id>: WorldGuard region-based RTP when worldguard.region-command.enabled: true.

Permissions

Declared in plugin.yml

Permission Default Purpose
ezrtp.use true Use /rtp
ezrtp.reload op Use /rtp reload
ezrtp.stats op Use stats/unsafe-stats
ezrtp.heatmap op Use heatmap generation/export
ezrtp.heatmap.fake op Use /rtp fake
ezrtp.queue.bypass op Bypass queue
ezrtp.forcertp op Use /forcertp

Used by Runtime/Config

Permission Source Purpose
ezrtp.setcenter command code Access setcenter and addcenter
ezrtp.pregenerate command code Access /rtp pregenerate
ezrtp.bypass.cooldown limits.yml defaults Cooldown bypass
ezrtp.bypass.limit limits.yml defaults Daily/weekly limit bypass
ezrtp.gui.<name> gui.yml entries Per-destination GUI access

Configuration Files

EzRTP now splits configuration by concern.

File Scope Example Keys
config.yml Core plugin/global options message-prefix, language, enable-bstats, worldguard.region-command.*
rtp.yml RTP behavior and safety search-pattern, radius.*, countdown.*, unsafe-blocks, biomes.*, chunky-integration.*
limits.yml Cooldowns/usage/cost profiles rtp-limits.default, rtp-limits.worlds, allow-gui-during-cooldown
storage.yml Limits storage backend rtp-limits.storage, rtp-limits.mysql.*
gui.yml GUI layout and destinations enabled, rows, worlds.*.icon, disable-cache-filtering, rare_biomes.*
queue.yml Queue throttling enabled, max-size, start-delay-ticks, interval-ticks
network.yml Proxy/server selector enabled, lobby, servers.<name>.*
force-rtp.yml /forcertp behavior default-world, bypass.cooldown, bypass.permission, bypass.safety
performance.yml Optional perf monitoring performance.monitoring.enabled, warnings.*, metrics.*, percentiles.*
unsafe-location-monitoring.yml Optional unsafe tracking unsafe-location-monitoring.monitoring.enabled, logging.*, metrics.*
messages/en.yml User-facing text templates teleport-*, queue-*, forcertp-*, heatmap-*, fake-*, stats-*

Current Core Defaults (selected)

# config.yml
message-prefix: "&7[&bEzRTP&7] &r"
language: en
enable-bstats: true
worldguard:
  region-command:
    enabled: false
    autocomplete: false
# rtp.yml
search-pattern: random
max-attempts: 16
countdown-seconds: 5
heatmap:
  enabled: false
biomes:
  enabled: true
  pre-cache:
    enabled: false
  rare-biome-optimization:
    enabled: false
chunky-integration:
  enabled: false
# limits.yml
rtp-limits:
  default:
    cooldown-seconds: 300
    daily-limit: 10
    weekly-limit: 50
  bypass-permissions:
    - ezrtp.bypass.cooldown
    - ezrtp.bypass.limit
  allow-gui-during-cooldown: true
# storage.yml
rtp-limits:
  storage: yaml # yaml or mysql

Requirements

  • Java 17 or newer.
  • Bukkit, Paper, Purpur, Spigot, or Folia 1.7+.
  • Optional: Vault/EzEconomy for pricing.
  • Optional: WorldGuard/GriefPrevention for claim-aware behavior.
  • Optional: Chunky for pre-generation workflows.

Support

Usage of the RTP plugin

Try Other EzPlugins

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.2 26.1.x 1.21.x +8
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.2 26.1.x 1.21.x +8
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.2 26.1.x 1.21.x +8
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x 1.21.x 1.20.x +7
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x
Bukkit Folia Paper Purpur Spigot
1d ago 1
26.1.x
Bukkit Folia Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Folia Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Folia Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Folia Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x 1.20.x 1.19.x +12
Bukkit Paper Purpur Spigot
1d ago 1
1.19.x 1.18.x 1.17.x +10
Bukkit Paper Purpur Spigot
1d ago 1
1.21.x
Bukkit Paper Spigot
1d ago 1
1.21.x
Bukkit Paper Spigot
1d ago 1
[3.4.3] EzRTP 3.4.3 by Shadow48402 on Oct 15, 2026
Download

### Fixed

  • Fixed /rtp intermittently failing (observed on Purpur) with CompletionException - java.lang.IllegalArgumentException: argument type mismatch during async location search. The Folia region/global-scheduler reflection bridges in PaperPlatformScheduler and BukkitPlatformScheduler only caught ReflectiveOperationException around Method.invoke() calls; they now also catch RuntimeException and fall back to the standard Bukkit scheduler instead of letting the exception propagate. This can occur even on non-Folia servers whose classpath carries the Folia regionized-runtime marker class.
  • BukkitPlatformScheduler#executeRegion/executeGlobal/executeGlobalDelayed/executeRegionDelayed now consistently fall back to the standard Bukkit scheduler when the reflective Folia scheduler call fails, instead of silently dropping the task (matching existing PaperPlatformScheduler behavior).

### Added

  • Regression test coverage for the scheduler reflection-fallback fix:
  • PaperPlatformSchedulerReflectionFallbackTest and BukkitPlatformSchedulerReflectionFallbackTest simulate a broken region/global-scheduler reflection call and verify the submitted task still runs via the standard scheduler fallback.
  • PlatformRuntimeCapabilities.PURPUR_REGIONIZED constant documenting the exact capability combination that triggered the bug.


[3.4.2] EzRTP 3.4.2 by Shadow48402 on Oct 15, 2026
Download

### Fixed

  • /rtp reload now immediately applies GUI configuration updates from gui.yml by rebuilding GUI rendering from the current in-memory configuration instead of startup-cached values.
  • Reload now closes both standard RTP GUI sessions and faction-claim GUI sessions so open inventories cannot retain stale pre-reload settings.

### Added

  • Focused regression test coverage for GUI reload behavior:
  • RandomTeleportGuiManagerReloadConfigTest verifies that opening the GUI after configuration replacement uses the updated title and row count immediately.


[3.4.1] EzRTP 3.4.1 by Shadow48402 on Oct 15, 2026
Download

### Added

  • Minecraft 26.2 compatibility updates:
  • added SULFUR_CAVES to rare-biome defaults/search paths,
  • updated biome compatibility handling for modern registry-based lookup paths.

### Changed

  • CI server download resolution migrated to PaperMC Fill API (fill.papermc.io) and now sends an explicit non-generic User-Agent header as required by the service.
  • Smoke testing workflow expanded from a single Folia target to a matrix that validates:
  • latest Folia build, and
  • Paper 1.13.x for earliest supported compatibility coverage.
  • Dependency and tooling updates merged via Dependabot:
  • com.github.ez-plugins:teams-api 1.8.0 -> 2.4.0.
  • GitHub Actions actions/checkout v6 -> v7.
  • GitHub Actions DavidAnson/markdownlint-cli2-action v23 -> v24.
  • Kyori Adventure BOM and related versions moved to 5.2.0 for current Paper API compatibility.

### Fixed

  • GitHub Actions workflow resolver for smoke-test target versions:
  • fixed YAML parsing issues in embedded resolver scripting,
  • fixed selector propagation into Python resolver invocation,
  • fixed mixed-type version sort key handling that could fail on Paper version token comparisons.
  • Removed a duplicate stale block in messages/en.yml that produced duplicate-key warnings at startup.
  • Replaced deprecated Biome.valueOf/Biome.values usage with compatibility-safe registry-backed resolution paths used across biome-related logic.


[3.4.0] EzRTP 3.4.0 by Shadow48402 on Oct 15, 2026
Download

### Added

  • EzCountdown integration** (optional soft-dependency):
  • RTP countdown display can now be delegated to [EzCountdown](https://modrinth.com/plugin/ezcountdown) for richer, configurable display channels.
  • Configurable display types per RTP world: ACTION_BAR, BOSS_BAR, TITLE, CHAT, SCOREBOARD, DIALOG.
  • Configurable MiniMessage format string with {formatted} placeholder for remaining time.
  • Each teleporting player receives an ephemeral, per-player countdown with permission-scoped visibility.
  • Falls back to the built-in bossbar/chat countdown automatically when EzCountdown is absent or ezcountdown.enabled: false.
  • New countdown.ezcountdown.* config section in rtp.yml (disabled by default).
  • EzCountdown added as optional soft-dependency in plugin.yml.
  • Factions RTP (TeamsAPI)**:
  • Added /rtp faction to open a claim-selection GUI from all TeamsAPI claims available to the player's team.
  • Added TeamsAPI subcommand integration for /f rtp via the TeamsAPI subcommand API (when provided by the installed TeamsAPI version).
  • Claim selection now sets the selected claim chunk as RTP center and then applies normal per-world RTP behavior/settings.
  • New faction-gui.yml file** for full claim-GUI configuration.
  • Heatmap claim overlays** (admin insight):
  • Added claim border overlay mode for /rtp heatmap and /rtp heatmap save via claims-overlay flag.
  • Added rtp.yml options under heatmap.claims-overlay.*:
  • enabled
  • style (border)
  • color
  • line-width
  • Claim-constrained fake RTP simulation**:
  • Added /rtp fake <amount> claims [world] to generate simulated points on faction claims owned by the executor’s team.

### Changed

  • TeamsAPI** dependency bumped from 1.4.1 to 1.8.0.
  • TeamsAPI /f rtp subcommand integration rewritten: replaced the reflection-based Proxy approach with a proper AbstractTeamsSubcommand subclass (requires TeamsAPI ≥ 1.8.0).
  • TeamsAPI subcommand registration now uses an explicit isPluginEnabled("TeamsAPI") guard instead of relying on NoClassDefFoundError suppression.
  • Faction claim GUI icons now attempt to use player skulls when claimant/owner identity is available, with configurable fallback material when unavailable.
  • Added configurable title, size, claim item format/lore, skull toggle, and navigation slot/name settings for faction GUI pages.
  • Update checker refactored to use mc-plugin-update-notifier with Modrinth as primary source and GitHub Releases as fallback source.

### Fixed

  • Heatmap enablement now resolves correctly for inherited/fallback world settings (heatmap.enabled) and no longer reads as disabled unexpectedly in world/GUI override paths.
  • /rtp heatmap no longer hard-requires biome cache for non-biome heatmaps. Biome cache is only required for biome-filtered heatmap requests.
  • Spigot startup compatibility fixed in update checking (JavaPlugin#getDescription().getVersion() used instead of Paper-only metadata calls).
  • Message loading now supports both top-level keys and nested messages.* language-file layouts.
  • Language file handling is now non-destructive: startup repair only targets clearly corrupted message files, with automatic backfill of missing message keys while preserving existing translations/customizations.


[3.3.0] EzRTP 3.3.0 by Shadow48402 on Oct 15, 2026
Download

### Added

  • PvP tag integration**: EzRTP now detects when a player enters combat and cancels their
pending teleport or active countdown. Three plugins are supported out of the box:
present. No configuration change is required on servers that do not use any of them.
  • New pvp-tag-integration section in rtp.yml:
  • cancel-countdown-on-pvp-tag (default true): cancel an active countdown the moment
the player is tagged.
  • cancel-queued-on-pvp-tag (default true): skip a queued teleport if the player is
already in combat when their slot is dispatched.
  • New message keys countdown-pvp-cancel and queue-pvp-tag-cancel in messages/*.yml
for the cancellation notifications.
  • Modrinth release metadata now declares pvpmanager and simple-combatlog as optional
dependencies.


[3.2.3] EzRTP 3.2.3 by Shadow48402 on Oct 15, 2026
Download

### Fixed

  • Folia teleport crash** (UnsupportedOperationException: Must use teleportAsync while in
region threading): BukkitPlatformScheduler now overrides teleportAsync and, when running
on Folia (regionizedRuntime capability), calls player.teleportAsync(Location) via
reflection instead of the forbidden synchronous player.teleport(). The Bukkit module was
the only scheduler that still used the synchronous fallback from the interface default;
PaperPlatformScheduler already called teleportAsync directly.


[3.2.2] EzRTP 3.2.2 by Shadow48402 on Oct 15, 2026
Download

### Fixed

  • BukkitPlatformScheduler now handles Folia servers correctly. Previously, running EzRTP on
Folia without the Paper runtime module caused an UnsupportedOperationException during plugin
enable because the Bukkit CraftScheduler rejects all synchronous task scheduling on Folia.
The scheduler now detects regionizedRuntime capabilities and routes all scheduling calls
through Folia's GlobalRegionScheduler / RegionScheduler via reflection, matching the
behaviour already present in PaperPlatformScheduler.


[3.2.1] EzRTP 3.2.1 by Shadow48402 on Oct 15, 2026
Download

### Fixed

  • PerformanceSnapshot#fmt now passes Locale.US to String#format, ensuring decimal separators are always locale-independent (dots, not commas).

### Changed

  • Dependency scope for ezrtp-common in the ezrtp-paper and ezrtp-purpur modules changed to provided; the common module is bundled by the main plugin JAR and must not be re-included by platform modules.


[3.2.0] EzRTP 3.2.0 by Shadow48402 on Oct 15, 2026
Download

### Added

  • TeamsAPI claim avoidance**: EzRTP now integrates with [TeamsAPI](https://modrinth.com/plugin/teams-api) to skip chunk-claimed areas during RTP destination search.
  • New protection provider id: teamsapi. Works alongside the existing worldguard and griefprevention providers.
  • Enabled automatically when TeamsAPI (with a compatible claim provider) is installed. Silently skipped when absent, no errors, no configuration changes required.
  • teamsapi added to the default protection.providers list in rtp.yml.
  • TeamsAPI added to softdepend in plugin.yml.
  • Claim availability is evaluated dynamically per check, so a claim plugin that loads after EzRTP is picked up without a reload.


### Added
### Changed
### Fixed
### Removed

#### Notes

> 🌙 Automated nightly beta build from v3.x (May 10, 2026).
>
> Built from [a335e34](https://github.com/ez-plugins/EzRTP/commit/a335e3437e138f29a8ae5f6f7aa86825d5aa892f)

[3.1.0] EzRTP 3.1.0 by Shadow48402 on Oct 15, 2026
Download

### Added

  • Message suppression via config** (config.yml):
  • messages.suppress-player: when true, silences all teleport-related messages to players globally (searching, countdown, queue position, success, failure, cost).
  • messages.suppress-console: when true, silences the executor notification that /forcertp sends to the command sender globally.
  • --skip-message command flag**: can be appended to /rtp, /rtp <center|region>, /forcertp <player> [world], and /rtp forcertp <player> [world] to suppress both player-facing and executor messages for that single invocation. Tab-completion suggests the flag.
  • BiomeCompat utility** (ezrtp-common): reflection-based safeName(Biome) and safeValueOf(String) helpers that work correctly whether org.bukkit.block.Biome is an enum (Spigot/Bukkit ≤ Paper 25) or an interface (Paper 26+), preventing IncompatibleClassChangeError at runtime.
  • Movement-cancel during countdown**: if a player moves too far from their starting position while a countdown is running, the teleport is cancelled.
  • countdown.cancel-on-move (default true) — enable or disable the feature.
  • countdown.cancel-distance (default 2.0) — distance in blocks that triggers cancellation.
  • countdown.warn-distance (default 1.0) — distance in blocks that sends a one-time warning before cancellation. Set to 0 to disable the warning.
  • Two new message keys: countdown-move-warn and countdown-move-cancel (configurable in messages/en.yml).

### Changed

  • Minecraft version support expanded to 1.13+**: api-version in plugin.yml lowered from 1.21 to 1.13; plugin will now load on any server from MC 1.13 onwards.
  • Java 17 output bytecode**: maven.compiler.release changed from 25 to 17 so the built JARs run on Java 17+ hosts. The build toolchain still requires JDK 25 to compile against paper-api.
  • Modrinth game-versions broadened to >=1.13** in release and nightly workflows (was >=26.1).
  • RareBiomeRegistry.getDefaultRareBiomes()**: replaced a single try/catch wrapping all Biome.valueOf() calls with per-biome BiomeCompat.safeValueOf() guards, so a biome absent on the running server version (e.g. MODIFIED_JUNGLE removed in 1.18, DEEP_DARK added in 1.19) no longer silently prevents the remaining biomes from being registered.
  • All biome.name() call sites replaced with BiomeCompat.safeName(biome) across RareBiomeRegistry, GuiSettings, BiomeLocationCache, StatsSubcommand, and HeatmapSubcommand.

### Fixed

  • Stale <fork>, <executable>, and <jvm> references to deleted java25.javac / java25.java properties removed from root pom.xml compiler and Surefire plugin configuration.


[3.0.3] EzRTP 3.0.3 by Shadow48402 on Oct 15, 2026
Download
Fixed Folia support
#### What changed


#### Notes

> 🌙 Automated nightly beta build from v3.x (April 22, 2026).
>
> Built from [7901de6](https://github.com/ez-plugins/EzRTP/commit/7901de65359e7273219b28968e4fc8f7f5b32283)

[3.0.1] EzRTP 3.0.1 by Shadow48402 on Oct 15, 2026
Download
#### What changed

  • Fixed issue in registering the module providers

#### Notes

> **Please make sure to install the core EzRTP plugin and the platform dependand module, this for increased performance with multiple-platform support**
[3.0.0] EzRTP 3.0.0 by Shadow48402 on Oct 15, 2026
Download
We have worked hard to make it happen, EzRTP has been updated to **Minecraft 26.1.2**, what does this mean for you?

> So far we have only tested EzRTP on Minecraft 26.1.*, we think it should stay functional for previous versions. Please report any issues in our Discord for a better EzRTP 🚀

> **Please make sure to install the core EzRTP plugin and the platform dependand module, this for increased performance with multiple-platform support**

### Added
  • world: auto support in rtp.yml — uses the player's current world as the RTP world
  • world: auto support in /forcertp and /rtp forcertp commands
  • world: auto support in GUI world options (current-world button)
  • EzRtpLogger message catalogue for structured console logging

### Changed
  • Console output: stripped [EzRTP] prefix and condensed log messages
  • API jar is now shaded into the Bukkit module

### Fixed
  • Adapted to Paper 26.1 API changes
  • Removed redundant applyChunkLoadingSettings calls in teleport service
  • Compiler fork now uses java.home-relative javac path

### Build / CI
  • Bumped version to 3.0.0
  • Updated Minecraft API dependencies to 26.1.2
  • Updated JDK to 25
  • Corrected api-version in plugin.yml files (iterated to final value 26.1.2)
[2.1.0] EzRTP 2.1.0 by Shadow48402 on Oct 15, 2026
Download
## ✨ Major Features

### New Plugin API Module
  • Public API for third-party plugins** — New ezrtp-api artifact that allows other plugins to trigger random teleports programmatically
  • Simple helper methods in EzRtpAPI for common use cases, with optional callbacks for async operations
  • Bukkit Services Manager integration for clean dependency injection
  • Minimal compile-time footprint — only ezrtp-api needs to be in the classpath of dependent plugins

### Performance Monitoring & Observability
  • Performance metrics collection** — Track RTP operation timings, cache efficiency, chunk loads, and biome filter performance
  • Slow RTP warnings** — Automatically detect and log RTPs that exceed a configurable threshold (default 100ms)
  • Percentile tracking** — Snapshot P50, P75, P90, P95, P99 response times using a ring-buffer sample
  • Periodic JSON export** — Export metrics to JSON for integration with monitoring systems or manual analysis
  • New /rtp stats performance subcommand to view current metrics in-game
  • Configurable via** plugins/EzRTP/performance.yml

### Unsafe Location Monitoring
  • Track rejection causes** — Understand why locations are unsafe (void, liquid, lava, unsafe blocks, etc.)
  • Per-cause statistics** — Breakdown of all-time rejection counts by cause
  • Optional warning system** — Log or warn when unsafe rejection rate exceeds a threshold
  • Periodic metrics export** — Export rejection statistics to JSON
  • New /rtp unsafe-stats subcommand to view unsafe location statistics in-game
  • Configurable via** plugins/EzRTP/unsafe-location-monitoring.yml

### Improved Chunk Loading
  • Paper 1.21+ async API detection** — Automatically use World.getChunkAtAsync() on qualifying servers, bypassing the legacy tick-based throttle queue entirely
  • Async/non-blocking chunks** — When running on Paper/Folia 1.21+, chunk loads no longer compete for tick time
  • Backward compatible** — Legacy throttle queue is still available for older servers or when explicitly configured
  • Smart auto-detection** — Defaults to auto-detect mode, gracefully falls back to legacy queue if needed
  • Configurable via** chunk-loading.use-paper-async-api in rtp.yml

### Biome Filtering Enhancements
  • Master switch for biome system** — New biomes.enabled setting disables the entire biome infrastructure (search, cache, rare biome tracking)
  • Master switch for include/exclude filters** — New biome-filtering.enabled separate from the overall biome system
  • Automatic filter-aware performance budgets** — When include/exclude biome filters are active but no explicit budget is configured, tighter limits are applied automatically (100ms wall-clock, 10 chunk-loads)
  • New performance-budget section** — Cleaner configuration path for search budgets (biome-filtering.performance-budget)
  • Better timeout tracking** — Biome filter timeouts are now monitored and reported in performance stats
  • Async-mode toggle** — Serialize biome searches through a dedicated executor thread instead of the common fork-join pool when async-mode: false

### Rare Biome Hotspot Persistence
  • MySQL-backed hotspot storage** — Persist discovered rare-biome hotspots across restarts and share them between network nodes
  • HikariCP connection pool** — Efficient, non-blocking database operations
  • Background loading** — Hotspots are loaded asynchronously on startup
  • Configurable persistence backend** — Switch between in-memory only (none) or MySQL (mysql)
  • Automatic table creation** — Database schema is initialized automatically

## 🔧 Configuration Changes

### New Configuration Files
  • plugins/EzRTP/performance.yml — Performance monitoring and warning settings
  • plugins/EzRTP/unsafe-location-monitoring.yml — Unsafe location rejection tracking and warnings

### rtp.yml Changes
  • biomes.enabled** (new) — Master switch for the entire biome system (default: true)
  • biome-filtering.enabled** (new) — Separate toggle for include/exclude biome filters (default: true)
  • biome-filtering.performance-budget** (new, preferred) — Search budget configuration moved here for clarity
  • search.*** (legacy path still works) — Old budget location, now aliases to new path
  • chunk-loading.use-paper-async-api** (new) — Auto-detect or explicitly enable/disable Paper async chunk loading (default: auto-detect)
  • chunk-loading.legacy-throttle** (new) — Nested section for old throttle settings, replaces flat enabled/interval-ticks/max-chunks-per-tick
  • heatmap.enabled** — Toggle heatmap feature per world (was implicit before)
  • safety.reject-liquid-above-nether** (new, default: true) — Reject locations with lava above in the Nether
  • safety.reject-liquid-above-overworld** (new, default: true) — Reject locations with water above in the Overworld

### Network Configuration (network.yml)
  • Moved to plugins/EzRTP/network/ namespace for better organization

### Dependency Updates
  • Bukkit/Paper actions** — Updated from v4 to v6
  • Java compiler** — Updated to 3.15.0
  • bstats** — Updated from 3.0.2 to 3.2.1
  • WorldGuard** — Updated from 7.0.9 to 7.0.16
  • PlaceholderAPI** — Updated from 2.11.7 to 2.12.2
  • Adventure** — Multiple library versions updated to 4.26.1
  • HikariCP 7.0.2** — New dependency for MySQL hotspot storage
  • JUnit & Mockito** — Updated test dependencies

## 🐛 Bug Fixes & Improvements

### GriefPrevention Compatibility
  • Fixed reflection fallback to handle multiple getClaimAt() method signatures across GriefPrevention versions

### Import/Package Reorganization
  • Configuration classes reorganized into semantic packages: biome.*, effects.*, network.*, safety.*, teleport.*, gui.*, performance.*
  • Old import paths still work through backwards-compatible re-exports (zero breaking changes)

### Code Quality
  • Introduced ConfigurationDefaults class to centralize all default numeric constants
  • Improved documentation and JavaDoc throughout
  • Better error handling and logging in reflection-based code (ChunkyAPI, GriefPrevention, PlaceholderAPI)

### Platform Abstraction
  • Enhanced PlatformScheduler** — New methods executeGlobal(), executeGlobalDelayed(), executeRegionDelayed() for cleaner code
  • Folia compatibility** — All scheduler calls now route correctly on Folia's regionalized threads
  • Centralized capability detection** — New PlatformRuntimeCapabilitiesDetector.isPaper121PlusAsync() for version-aware optimization

### API Extensions
  • RandomTeleportService now implements the new com.skyblockexp.ezrtp.api.TeleportService interface for type-safe service registration

## 📊 New Statistics & Metrics

### Tracked in RtpStatistics
  • Timing percentiles** — P50, P75, P90, P95, P99 milliseconds
  • Min/max operation times** — Absolute bounds across the ring buffer
  • Slow operation count** — Number of RTPs exceeding the slow-threshold
  • Chunk loads breakdown** — Total, async, and sync counts
  • Biome rejection counts** — Total rejections and per-RTP max
  • Biome filter timeouts** — Number of times a search was terminated due to biome rejection limit

### bStats Charts (New)
  • unsafe_location_cause — Top rejection cause (pie chart)

## 🎮 New Commands

### /rtp stats performance
  • Shows real-time performance metrics including response times, cache hit rate, chunk loading breakdown, and recommendations

### /rtp unsafe-stats
  • Shows all-time unsafe location rejection statistics broken down by cause

## 📝 Configuration Validation

### New Warnings
  • Missing protection providers** — Single consolidated warning when all configured protection plugins are unavailable
  • Heatmap disabled check** — /rtp heatmap now validates that heatmap.enabled: true before proceeding
  • Chunky reflection fallback** — Graceful degradation if Chunky API changes or is unavailable

## ♻️ Removed/Deprecated

  • ChunkLoadingSettings legacy flat-format constructors are deprecated (but still work)
  • No breaking changes to public APIs** — All existing plugin code continues to function


## For Server Owners

  • Update Guide:**
1. Back up your plugins/EzRTP/ folder
2. Replace the EzRTP .jar file
3. Restart the server (config files will be auto-generated)
4. Optionally enable performance or unsafe-location monitoring in the new .yml files
5. For Paper 1.21+ users, chunk-loading will automatically switch to async mode (no config needed)

  • Recommendations:**
  • Enable performance monitoring** if you want insight into RTP responsiveness and cache efficiency
  • Enable unsafe-location monitoring** if you're debugging biome filter issues or want to understand rejection patterns
  • Upgrade to Paper 1.21+** to get true non-blocking chunk loading (no configuration required; auto-detected)
[2.0.1] EzRTP 2.0.1 by Shadow48402 on Oct 15, 2026
Download
  • Fixed cached fallback when avoiding claims fails
  • Upgraded version to 2.0.1
[2.0.0] EzRTP 2.0.0 by Shadow48402 on Oct 15, 2026
Download
  • Added opt-in /rtp <worldguardRegionName>
  • Added configuration override options per WorldGuard region
  • Added /rtp addcenter <name>
  • Added /rtp <name> besides /rtp <worldName>
  • Improved performance, refactored server software fallback logic
  • Moved from single .jar to main EzRTP.jar with server modules (ezrtp-spigot.jar, ezrtp-purpur.jar, ezrtp-paper.jar)
  • Split config.yml into multiple, more clear configuration files
  • Added new limits.yml configuration
  • Added new rtp.yml configuration
  • Added new storage.yml configuration
[1.6.1] EzRTP 1.6.1 by Shadow48402 on Oct 15, 2026
Download
  • Added HEX color support for the configurable messages
  • Fixed issue async chunk loading for Paper servers
[1.6.0] EzRTP 1.6.0 by Shadow48402 on Oct 15, 2026
Download
``yaml
countdown:
# Enable or disable countdown chat messages. When disabled, only bossbar and particles will be shown.
chat-messages: false
`
  • Added RAM memory safety checks, disabling the pre-cache for preventing RAM overload
  • Improved default radius to a bigger radius
  • Improved min. radius from 256 to 500
  • Changed max. radius from use world border to 2000`
  • Fixed issue issue in false positives
  • Fixed bug in showing bossbar countdown
[1.5.1] EzRTP 1.5.1 by Shadow48402 on Oct 15, 2026
Download
  • Improved water/surface satety
  • Added material option to change the material of the spawned block
  • Changed setting from place-dirt-on-surface to place-block-on-surface
  • Changed default from DIRT to ICE

Settings in the config.yml

``yaml
safety:
water:
# When enabled, RTP will solidify shallow water by placing a block before teleporting.
# NOTE: the old key 'place-dirt-on-surface' is deprecated; use 'place-block-on-surface'.
place-block-on-surface: true
# Material to place on the surface when solidifying shallow water. Defaults to ICE.
# Valid values are Bukkit Material names (e.g., DIRT, GRASS_BLOCK, ICE).
material: ICE
``
[1.5.0] EzRTP 1.5.0 by Shadow48402 on Oct 15, 2026
Download
  • Added triangle search pattern
![Triangle RTP search pattern](https://i.ibb.co/hJ9L4qfD/image.png)
  • Added diamond search pattern
![Diamond RTP Search Pattern](https://i.ibb.co/LDjFF3F4/image.png)
  • Fixed MiniMessage translating issue in /rtp stats
  • Improved backwords compatiblity for new features for Minecraft 1.7
[1.4.2] EzRTP 1.4.2 by Shadow48402 on Oct 15, 2026
Download
  • Added fallback for new glass panes for older Minecraft servers
  • Changed default config materials to older materials to by default support the older versions without needing the fallback
[1.4.1] EzRTP 1.4.1 by Shadow48402 on Oct 15, 2026
Download
  • Added new /forcertp command to replace /rtp forcertp ...
  • Added new force-rtp.yml configuration file:
``yml
# Force RTP configuration
# This file controls the behavior of the /forcertp command

# Default world to use when no world is specified
default-world: world

# Bypass settings for the /forcertp command
bypass:
# Whether to bypass cooldown restrictions
cooldown: true
# Whether to bypass permission checks (except for the forcertp permission itself)
permission: true
# Whether to bypass safety checks (teleport even to unsafe locations)
safety: false
`
  • Added a lot of new configurable messages in the messages/en.yml configuration file
  • Fixed issue in /rtp reload, it now reloads all configuration files again
  • Fixed issue preventing /forcertp` to be used from console
[1.4.0] EzRTP 1.4.0 by Shadow48402 on Oct 15, 2026
Download
  • Added configuration option to change search pattern
  • Added circle search pattern
  • Added square search pattern
  • Named existing search pattern to random
  • Improved heatmaps
  • Added /rtp fake <amount> subcommand to generate locations with configured search pattern
  • Added legend and coloring to the heatmaps
![RTP heatmap with legend](https://i.ibb.co/wZWfpn7B/image.png)

  • Improved default configuration settings
  • Added new configurable messages
  • Improved default search pattern for faster default found locations

  • For updating the plugin it's recommended to reset the configuration files.**
[1.3.6] EzRTP 1.3.6 by Shadow48402 on Oct 15, 2026
Download
  • Fixed issue in showing cooldown when player is bypassed from cooldown
  • Improved bStats stats tracking
  • Fixed avg wait time
  • Fixed success rate
  • Added total RTPs
  • Added total wait time
[1.3.5] EzRTP 1.3.5 by Shadow48402 on Oct 15, 2026
Download
  • Fixed**: Shift-clicking in GUI now shows "no permission" error instead of allowing item theft
  • Added**: Option to show cache filter info only to admins (admin-only-cache-info: false in gui.yml)
  • Added**: Configurable cache filter info message (cache-filter-info in messages.yml)
  • Added**: Option to allow GUI access during cooldowns (allow-gui-during-cooldown: true in rtp-limits)
  • Added**: Human-readable cooldown formatting (human-readable-cooldown: true in config.yml)
  • Added**: Extensive placeholder system for messages:
  • Core Teleport: <world>, <x>, <z>, <target-biome>, <cached-locations>
  • Economy: <cost>
  • Queue: <position>
  • Cooldown/Time: <hours>, <minutes>, <seconds>
  • Countdown: <seconds>
  • Network: <server>, <status>, <ping>
  • Fixed**: Spigot server compatibility by including MiniMessage API in JAR (increased size to ~936KB)
  • Improved**: Time formatting displays as "1h 30m 45s" instead of raw seconds when enabled
[1.3.4] EzRTP 1.3.4 by Shadow48402 on Oct 15, 2026
Download
  • Fixed issue in cooldowns
[1.3.3] EzRTP 1.3.3 by Shadow48402 on Oct 15, 2026
Download
  • Added new /rtp forcertp <player> command to bypass queue, cooldown, GUI for portals and such
[1.3.2] EzRTP 1.3.2 by Shadow48402 on Oct 15, 2026
Download
  • Preperation for multi-language support
  • MiniMessage support for configurable messages
  • Added language selection in config.yml
EzRTP Icon
Download EzRTP
Select game version
Select platform