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.0build on Java 17 (MC 1.13 - 1.21.11.*) for Bukkit/Paper/Spigot/Purpur/Folia>= 3.0.0build on Java 25 (MC 26.1.*) for Bukkit/Paper/Spigot/Purpur/Folia>= 3.1.0build on Java 17 (MC 1.13 - 1.21.11.*) for Bukkit/Paper/Spigot/Purpur/Folia
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

Heatmap Visualization

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 usingcenters.named.<name>fromrtp.yml./rtp <region-id>: WorldGuard region-based RTP whenworldguard.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
- Discord: https://discord.gg/yWP95XfmBS
- Project and releases: https://github.com/ez-plugins/EzRTP
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 |
[3.4.3] EzRTP 3.4.3
by Shadow48402 on Oct 15, 2026
Download
### Fixed
- Fixed
/rtpintermittently failing (observed on Purpur) withCompletionException - java.lang.IllegalArgumentException: argument type mismatchduring async location search. The Folia region/global-scheduler reflection bridges inPaperPlatformSchedulerandBukkitPlatformScheduleronly caughtReflectiveOperationExceptionaroundMethod.invoke()calls; they now also catchRuntimeExceptionand 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/executeRegionDelayednow consistently fall back to the standard Bukkit scheduler when the reflective Folia scheduler call fails, instead of silently dropping the task (matching existingPaperPlatformSchedulerbehavior).
### Added
- Regression test coverage for the scheduler reflection-fallback fix:
PaperPlatformSchedulerReflectionFallbackTestandBukkitPlatformSchedulerReflectionFallbackTestsimulate a broken region/global-scheduler reflection call and verify the submitted task still runs via the standard scheduler fallback.PlatformRuntimeCapabilities.PURPUR_REGIONIZEDconstant 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 reloadnow immediately applies GUI configuration updates fromgui.ymlby 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:
RandomTeleportGuiManagerReloadConfigTestverifies 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.2compatibility updates: - added
SULFUR_CAVESto 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-genericUser-Agentheader 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.xfor earliest supported compatibility coverage. - Dependency and tooling updates merged via Dependabot:
com.github.ez-plugins:teams-api1.8.0->2.4.0.- GitHub Actions
actions/checkoutv6->v7. - GitHub Actions
DavidAnson/markdownlint-cli2-actionv23->v24. - Kyori Adventure BOM and related versions moved to
5.2.0for 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.ymlthat produced duplicate-key warnings at startup. - Replaced deprecated
Biome.valueOf/Biome.valuesusage 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 inrtp.yml(disabled by default). EzCountdownadded as optional soft-dependency inplugin.yml.- Factions RTP (TeamsAPI)**:
- Added
/rtp factionto open a claim-selection GUI from all TeamsAPI claims available to the player's team. - Added TeamsAPI subcommand integration for
/f rtpvia 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.ymlfile** for full claim-GUI configuration. - Heatmap claim overlays** (admin insight):
- Added claim border overlay mode for
/rtp heatmapand/rtp heatmap saveviaclaims-overlayflag. - Added
rtp.ymloptions underheatmap.claims-overlay.*: enabledstyle(border)colorline-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.1to1.8.0. - TeamsAPI
/f rtpsubcommand integration rewritten: replaced the reflection-basedProxyapproach with a properAbstractTeamsSubcommandsubclass (requires TeamsAPI ≥ 1.8.0). - TeamsAPI subcommand registration now uses an explicit
isPluginEnabled("TeamsAPI")guard instead of relying onNoClassDefFoundErrorsuppression. - 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-notifierwith 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 heatmapno 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
- [CombatLogX](https://www.spigotmc.org/resources/combatlogx.31689/)** — auto-detected at startup; soft dependency.
- [PvPManager](https://modrinth.com/plugin/pvpmanager)** — auto-detected at startup; soft dependency.
- [Simple Combat Log](https://modrinth.com/plugin/simple-combatlog)** (NikeyV1/CombatLog) — auto-detected at startup; soft dependency.
- All three are added to
softdependinplugin.ymlso they load before EzRTP when
- New
pvp-tag-integrationsection inrtp.yml: cancel-countdown-on-pvp-tag(defaulttrue): cancel an active countdown the moment
cancel-queued-on-pvp-tag(defaulttrue): skip a queued teleport if the player is
- New message keys
countdown-pvp-cancelandqueue-pvp-tag-cancelinmessages/*.yml
- Modrinth release metadata now declares
pvpmanagerandsimple-combatlogas optional
[3.2.3] EzRTP 3.2.3
by Shadow48402 on Oct 15, 2026
Download
### Fixed
- Folia teleport crash** (
UnsupportedOperationException: Must use teleportAsync while in
BukkitPlatformScheduler now overrides teleportAsync and, when runningon Folia (
regionizedRuntime capability), calls player.teleportAsync(Location) viareflection instead of the forbidden synchronous
player.teleport(). The Bukkit module wasthe 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
BukkitPlatformSchedulernow handles Folia servers correctly. Previously, running EzRTP on
UnsupportedOperationException during pluginenable because the Bukkit
CraftScheduler rejects all synchronous task scheduling on Folia.The scheduler now detects
regionizedRuntime capabilities and routes all scheduling callsthrough Folia's
GlobalRegionScheduler / RegionScheduler via reflection, matching thebehaviour already present in
PaperPlatformScheduler.
[3.2.1] EzRTP 3.2.1
by Shadow48402 on Oct 15, 2026
Download
### Fixed
PerformanceSnapshot#fmtnow passesLocale.UStoString#format, ensuring decimal separators are always locale-independent (dots, not commas).
### Changed
- Dependency scope for
ezrtp-commonin theezrtp-paperandezrtp-purpurmodules changed toprovided; 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 existingworldguardandgriefpreventionproviders. - Enabled automatically when TeamsAPI (with a compatible claim provider) is installed. Silently skipped when absent, no errors, no configuration changes required.
teamsapiadded to the defaultprotection.providerslist inrtp.yml.TeamsAPIadded tosoftdependinplugin.yml.- Claim availability is evaluated dynamically per check, so a claim plugin that loads after EzRTP is picked up without a reload.
[3.1.0-nightly.20260510] EzRTP 3.1.0-nightly.20260510
by Shadow48402 on Oct 15, 2026
Download
### Added
### Changed
### Fixed
### Removed
#### Notes
> 🌙 Automated nightly beta build from
>
> Built from [
### 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: whentrue, silences all teleport-related messages to players globally (searching, countdown, queue position, success, failure, cost).messages.suppress-console: whentrue, silences the executor notification that/forcertpsends to the command sender globally.--skip-messagecommand 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.BiomeCompatutility** (ezrtp-common): reflection-basedsafeName(Biome)andsafeValueOf(String)helpers that work correctly whetherorg.bukkit.block.Biomeis an enum (Spigot/Bukkit ≤ Paper 25) or an interface (Paper 26+), preventingIncompatibleClassChangeErrorat 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(defaulttrue) — enable or disable the feature.countdown.cancel-distance(default2.0) — distance in blocks that triggers cancellation.countdown.warn-distance(default1.0) — distance in blocks that sends a one-time warning before cancellation. Set to0to disable the warning.- Two new message keys:
countdown-move-warnandcountdown-move-cancel(configurable inmessages/en.yml).
### Changed
- Minecraft version support expanded to 1.13+**:
api-versioninplugin.ymllowered from1.21to1.13; plugin will now load on any server from MC 1.13 onwards. - Java 17 output bytecode**:
maven.compiler.releasechanged from25to17so the built JARs run on Java 17+ hosts. The build toolchain still requires JDK 25 to compile againstpaper-api. - Modrinth
game-versionsbroadened to>=1.13** in release and nightly workflows (was>=26.1). RareBiomeRegistry.getDefaultRareBiomes()**: replaced a single try/catch wrapping allBiome.valueOf()calls with per-biomeBiomeCompat.safeValueOf()guards, so a biome absent on the running server version (e.g.MODIFIED_JUNGLEremoved in 1.18,DEEP_DARKadded in 1.19) no longer silently prevents the remaining biomes from being registered.- All
biome.name()call sites replaced withBiomeCompat.safeName(biome)acrossRareBiomeRegistry,GuiSettings,BiomeLocationCache,StatsSubcommand, andHeatmapSubcommand.
### Fixed
- Stale
<fork>,<executable>, and<jvm>references to deletedjava25.javac/java25.javaproperties removed from rootpom.xmlcompiler and Surefire plugin configuration.
[3.0.3] EzRTP 3.0.3
by Shadow48402 on Oct 15, 2026
Download
Fixed Folia support
[3.0.2-nightly.20260422] EzRTP 3.0.2-nightly.20260422
by Shadow48402 on Oct 15, 2026
Download
#### What changed
#### Notes
> 🌙 Automated nightly beta build from
>
> Built from [
- Ci/automatic nightly release** [#77](https://github.com/ez-plugins/EzRTP/pull/77) — @ez-plugins
- ci: fix direct push** [#76](https://github.com/ez-plugins/EzRTP/pull/76) — @ez-plugins
- ci: fix main branch to v3.x** [#75](https://github.com/ez-plugins/EzRTP/pull/75) — @ez-plugins
- Ci/automatic nightly release** [#74](https://github.com/ez-plugins/EzRTP/pull/74) — @ez-plugins
- ci: fix markdown changelog format** [#73](https://github.com/ez-plugins/EzRTP/pull/73) — @ez-plugins
- ci: added automatic nightly releases** [#72](https://github.com/ez-plugins/EzRTP/pull/72) — @ez-plugins
- chore(deps): bump actions/configure-pages from 5 to 6** [#71](https://github.com/ez-plugins/EzRTP/pull/71) — @app/dependabot
- chore(deps): bump DavidAnson/markdownlint-cli2-action from 16 to 23** [#70](https://github.com/ez-plugins/EzRTP/pull/70) — @app/dependabot
- chore(deps): bump actions/upload-pages-artifact from 3 to 5** [#69](https://github.com/ez-plugins/EzRTP/pull/69) — @app/dependabot
- chore(deps): bump actions/deploy-pages from 4 to 5** [#68](https://github.com/ez-plugins/EzRTP/pull/68) — @app/dependabot
- chore(deps): bump actions/checkout from 4 to 6** [#67](https://github.com/ez-plugins/EzRTP/pull/67) — @app/dependabot
- docs: fix SCSS syntax error in ezrtp.scss (split comment separators)** [#66](https://github.com/ez-plugins/EzRTP/pull/66) — @ez-plugins
- docs: fix YAML syntax error in _config.yml (split comment separators)** [#65](https://github.com/ez-plugins/EzRTP/pull/65) — @ez-plugins
- Docs/GitHub pages** [#64](https://github.com/ez-plugins/EzRTP/pull/64) — @ez-plugins
- Fix/module adapters** [#63](https://github.com/ez-plugins/EzRTP/pull/63) — @ez-plugins
#### 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
#### Notes
> **Please make sure to install the core EzRTP plugin and the platform dependand module, this for increased performance with multiple-platform support**
- 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
### Changed
### Fixed
### Build / CI
> 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: autosupport inrtp.yml— uses the player's current world as the RTP worldworld: autosupport in/forcertpand/rtp forcertpcommandsworld: autosupport in GUI world options (current-world button)EzRtpLoggermessage 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
applyChunkLoadingSettingscalls in teleport service - Compiler fork now uses
java.home-relativejavacpath
### Build / CI
- Bumped version to
3.0.0 - Updated Minecraft API dependencies to
26.1.2 - Updated JDK to 25
- Corrected
api-versioninplugin.ymlfiles (iterated to final value26.1.2)
[2.1.0] EzRTP 2.1.0
by Shadow48402 on Oct 15, 2026
Download
## ✨ Major Features
### New Plugin API Module
### Performance Monitoring & Observability
### Unsafe Location Monitoring
### Improved Chunk Loading
### Biome Filtering Enhancements
### Rare Biome Hotspot Persistence
## 🔧 Configuration Changes
### New Configuration Files
### rtp.yml Changes
### Network Configuration (
### Dependency Updates
## 🐛 Bug Fixes & Improvements
### GriefPrevention Compatibility
### Import/Package Reorganization
### Code Quality
### Platform Abstraction
### API Extensions
## 📊 New Statistics & Metrics
### Tracked in
### bStats Charts (New)
## 🎮 New Commands
###
###
## 📝 Configuration Validation
### New Warnings
## ♻️ Removed/Deprecated
## For Server Owners
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)
### New Plugin API Module
- Public API for third-party plugins** — New
ezrtp-apiartifact that allows other plugins to trigger random teleports programmatically - Simple helper methods in
EzRtpAPIfor common use cases, with optional callbacks for async operations - Bukkit Services Manager integration for clean dependency injection
- Minimal compile-time footprint — only
ezrtp-apineeds 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 performancesubcommand 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-statssubcommand 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-detectmode, gracefully falls back to legacy queue if needed - Configurable via**
chunk-loading.use-paper-async-apiin rtp.yml
### Biome Filtering Enhancements
- Master switch for biome system** — New
biomes.enabledsetting disables the entire biome infrastructure (search, cache, rare biome tracking) - Master switch for include/exclude filters** — New
biome-filtering.enabledseparate 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 settingsplugins/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 claritysearch.*** (legacy path still works) — Old budget location, now aliases to new pathchunk-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 flatenabled/interval-ticks/max-chunks-per-tickheatmap.enabled** — Toggle heatmap feature per world (was implicit before)safety.reject-liquid-above-nether** (new, default:true) — Reject locations with lava above in the Nethersafety.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
ConfigurationDefaultsclass 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
RandomTeleportServicenow implements the newcom.skyblockexp.ezrtp.api.TeleportServiceinterface 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 heatmapnow validates thatheatmap.enabled: truebefore proceeding - Chunky reflection fallback** — Graceful degradation if Chunky API changes or is unavailable
## ♻️ Removed/Deprecated
ChunkLoadingSettingslegacy 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:**
plugins/EzRTP/ folder2. 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
.jarto mainEzRTP.jarwith server modules (ezrtp-spigot.jar,ezrtp-purpur.jar,ezrtp-paper.jar) - Split
config.ymlinto multiple, more clear configuration files - Added new
limits.ymlconfiguration - Added new
rtp.ymlconfiguration - Added new
storage.ymlconfiguration
[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
- Added [Chunky integration](https://modrinth.com/plugin/chunky) for async pregeneration of EzRTP radius through Chunky
- Added option to disable countdown chat messages
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 500Changed max. radius from use world border to 2000`
[1.5.1] EzRTP 1.5.1
by Shadow48402 on Oct 15, 2026
Download
- Improved water/surface satety
- Added
materialoption to change the material of the spawned block - Changed setting from
place-dirt-on-surfacetoplace-block-on-surface - Changed default from
DIRTtoICE
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
trianglesearch pattern
- Added
diamondsearch pattern
- 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
/forcertpcommand to replace/rtp forcertp ... - Added new
force-rtp.ymlconfiguration 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 fileFixed issue in /rtp reload, it now reloads all configuration files againFixed 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
circlesearch pattern - Added
squaresearch 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
- 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: falseingui.yml) - Added**: Configurable cache filter info message (
cache-filter-infoinmessages.yml) - Added**: Option to allow GUI access during cooldowns (
allow-gui-during-cooldown: trueinrtp-limits) - Added**: Human-readable cooldown formatting (
human-readable-cooldown: trueinconfig.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
languageselection inconfig.yml

