
LeafRTP | Random Teleport
Fast Random Teleportation for everyone, configurable and extensible
- Загрузки
- 2K
- Подписчики
- 6
- Обновлён
- 22 июня 2026 г.
- Лицензия
- MIT
Опубликован 11 мая 2026 г.
LeafRTP - Random Teleport for Paper, Spigot, Folia, Fabric, NeoForge & Velocity
Once upon a time, I wanted to explore a minecraft world. I asked for /rtp in servers I played on. They told me "no, that's laggy", and I took that personally.
Random teleport that's easy to set up, easy to tune, and fast. Drop the jar in and /rtp works with zero config, tune it in-game with /rtp menu, or build on the public rtp-api.
At a glance:
- 🚀 Plug-and-play: drop the jar in, type
/rtp, done. Zero config. - 🛠️ No YAML required: tune regions, safety, and effects in-game with
/rtp menu. - 🧩 One jar, every platform: build on the public
rtp-apiand ship a single addon for all of them. - ⚡ No "Finding a safe location..." wait: destinations are pre-verified off-tick, never on the main thread.
- 📈 Measured on a public harness: 19.8 TP/s on Paper, 4 ms worst tick (next-best: 70 ms).
- 🛡️ Audited safety: no unsafe blocks, no force-loaded chunks, no claim bypass, no silent failures.
Minecraft 1.20.x / 1.21.x / 26.x. Legacy Forge isn't native; run this jar under Arclight / Mohist.
Trusted since 2021: 4.6 stars over 30+ reviews, 430k+ downloads.
Why operators pick LeafRTP
Everything below ships in the free build, no add-ons:
- 12 claim integrations bundled (GriefDefender, GriefPrevention, WorldGuard, Towny, Lands, +7 more). No teleport into protected land.
- Vault economy: optional charge per teleport, per-region pricing, auto-refund on cancel.
- Effects engine: particles, sounds, fireworks, potions on every teleport phase.
- Per-player cooldowns & usage limits out of the box.
- PvP/combat-tag gate, PlaceholderAPI, live map heatmaps, multi-world overrides.
- Extend it without a fork: the
rtp-apihooks take one-line suppliers to veto destinations, charge economy, add placeholders, override the world border, gate combat, replace the bare/rtpaction, or build custom arrival platforms. The bundled rtp menu addon does exactly this, swapping bare/rtpfor its own picker.
(How each feature stays cheap: Architecture.)

The clickable /rtp menu: players pick a world or region by clicking, no commands to memorize.
Install (30 seconds)
- Drop
LeafRTP-x.y.z.jarintoplugins/. - Start the server. A
defaultregion is generated for you. - Type /rtp.
- Run /rtp menu to browse regions, worlds, and configuration in-game (book on Paper / Folia, chat-paginated elsewhere).
Tune plugins/RTP/config.yml and plugins/RTP/regions/*.yml later. Full guide: admin guide.
Bundled addons unpack themselves on first run. Four addon jars ride inside the LeafRTP jar and self-extract into plugins/RTP/addons/ the first time the plugin starts - no second download. Delete one from that folder to turn it off (the folder then exists, so it is never re-extracted):
- LeafRTPGuiAddon (GUI demo) - a clickable chest destination-picker. It binds the bare
/rtproot action, so with a GUI renderer present typing/rtpopens the picker instead of teleporting immediately (instant teleport stays reachable from the menu and as a fallback), and adds/rtp gui(rtp.gui). - LeafRTPClaimAddon (claim integrations) - the 12 claim/protection checkers, so claim-aware teleport works out of the box on the Bukkit family.
- LeafRTPRiftAddon (effect demo) - registers a "Virtual Rift" teleport effect that tears the terrain open into a void during warmup (presentation-only client-side blocks, so it can never compromise safety), usable by name in
effects/*.yml. - LeafRTPCountdownAddon (addon-system reference demo) - live teleport and queue-position countdowns, and the canonical copy-paste reference addon.
For those interested in writing their own: every one of these is shipped as a worked coding example. Their full source lives under addons/ in the repo, and the Rift and Countdown demos are pure rtp-api / effects-api (zero platform imports), so they double as copy-paste starting points for your own addon.
Verification & sources
Every number on this page is anchored in the repo:
- Reproducible benchmarks with raw CSVs and per-run analyses:
helpers/StressTestRTP/ - Requirements traced to tests: every requirement, including the safety prohibitions, has an implementing class and regression test:
TRACEABILITY.md - Every design decision is documented: dated, linkable notes on why teleports are queued, how the Anvil pre-filter skips chunk loads, and more:
docs/adr/ - bStats enabled. Anonymous usage stats help prioritize platform work.
See the engine work, and watch it live
LeafRTP isn't a black box. /rtp scan paints region safety onto a real in-game map (green safe, red unsafe) as it verifies it. /rtp info reports live TPS/MSPT, heap, latency percentiles, and rejection causes, no metrics add-on needed.
Watch the scan paint a region live (video). Details: Scan & spatial memory, Diagnostics.
Requirements
Hard requirements. If any are a no, EssentialsX /rtp or HuskHomes are fine alternatives.
- ✅ Java 21+ (REQ-RTP-SYS-001, non-negotiable).
- ✅ Paper, Spigot, or a Bukkit-family fork, or Fabric / NeoForge (1.21.x / 26.1.x). Arclight / Mohist for Forge bridges.
- ✅ Vault (optional) for the economy charge; dormant when not installed.
Full feature list (full reference on the wiki)
Deterministic spiral selection, persistent spatial memory, pre-generated location queue, full safety pipeline, per-region/per-world config and shapes, arrival schematics, the effects engine, Vault economy, 12 claim integrations, PvP/combat-tag gate, the public rtp-api, platform-agnostic addons, live heatmaps, /rtp info diagnostics, and 12 parity-enforced locales. Full reference: Home | Commands | Economy | Effects | Integrations | API.
Platform support
| Platform | Status | Notes |
|---|---|---|
| Paper (+ forks: Purpur, Pufferfish, Leaf, Leaves, DivineMC) | ✅ Recommended | Fully async via native getChunkAtAsync. |
| Spigot (+ Spigot forks) | ✅ Supported | Off-tick .mca Anvil pre-filter -> Paper-class throughput on plain Spigot. |
| Arclight / Mohist (Forge bridges) | ✅ Officially supported | Use the Spigot/Paper jar. Recommended way to run on Forge. |
| Folia | ✅ Supported (free) | Regionized scheduling + async teleport, zero config. Out-teleports every other Folia /rtp I tested (latest run: 12.5 TP/s, 100% success, 4.15 ms main-thread/teleport) with zero region-watchdog stalls. |
| Multi-server / proxy (Velocity) | ✅ proxy-direct | proxy-direct transport ships in the free build: cross-server /rtp over a lightweight TCP socket, no Redis/SQL. |
| Fabric | ✅ Supported | First-class, stable, in-scope platform; tested regularly, at feature parity with the Bukkit family in the latest builds. |
| Native NeoForge | ✅ Supported | First-class adapter on Minecraft 1.21.x / 26.1.x. |
| Native Forge | 🔁 Use Arclight / Mohist | No native adapter planned. |
Full benchmark vs. alternative random teleport plugins on Paper, Spigot, and Folia
Paper rows: 2 OPed clients spamming /rtp back-to-back, queues enabled where the plugin offers them, cooldowns/delays zeroed. Folia run: 3 OPed clients, radius equalized to 4096 blocks, ~600 s per plugin.
Confidence legend: 🧪 = measured locally · 📖 = read from plugin docs · ❓ = inferred from architecture.
Metrics: Throughput (TP/s, higher better) · MSPT p99 (worst 1-in-100 main-thread tick in ms, lower better) · Min TPS (lowest TPS observed; 20.00 = no hiccup) · CPU / TP (main-thread CPU per successful teleport).
Paper 1.20.1 / 1.21.11 is the reference dataset. Eight plugins, same harness, same world, same two OPed clients.
| Plugin | TP/s | MSPT p99 (ms) | Min TPS | CPU / TP (ms) | Success |
|---|---|---|---|---|---|
| 🧪 LeafRTP | 19.8 | 4 | 20.00 | 16.9 | 100 % |
| 🧪 JakesRTP | 20.0 | 70 | 20.00 | 26.0 | 100 % |
| 🧪 BetterRTP | 7.3 | 852 | 20.00 | 53.6 | 100 % |
| 🧪 HuskHomes | 6.2 | 372 | 20.00 | 52.2 | 100 % |
| 🧪 AdvancedRTP | 2.16 | 2 100 | 19.95 | 92.1 | 96.3 % |
| 🧪 EzRTP | 1.76 | 2 903 | 19.95 | 139.6 | 100 % |
| 🧪 AsyRTP | 1.67 | 4 534 | 19.95 | 38.8 | 100 % |
🧪 EssentialsX /tpr |
0.96 | 4 504 | 19.95 | 88.9 | 75.9 % § |
§ EssentialsX /tpr is a teleport-request command (handshake + accept), not a teleport-do command; the harness's 5 s per-attempt deadline times out a fraction of the request-accept latencies. Numbers are dispatch-shaped, not plugin-broken.
Spigot 1.20.1: Spigot's platform-wide chunk-gen ceiling caps everyone in the 1-1.5 TP/s range during the burst; the latency tail is what matters.
| Plugin | TP/s | MSPT p99 (ms) | Min TPS |
|---|---|---|---|
| 🧪 LeafRTP | 1.52 | 3 | 6.4 |
| 🧪 JakesRTP | 1.04 | 2 252 | 7.5* |
| 🧪 BetterRTP | 1.33 | 3 790 | 2.18 |
| 🧪 HuskHomes | 0.93 | 4 939 | 2.59 |
Folia 26.1: the free build alone, no Pro adapter; on Folia, throughput plus the server-emitted region watchdog are the discriminators (global MSPT is a single-region sample and not meaningful).
| Plugin | TP/s | CPU / TP (ms) | Watchdog stalls | Success |
|---|---|---|---|---|
| 🧪 LeafRTP | 12.5 | 4.15 | 0 | 100 % |
| 🧪 EzRTP | 5.3 | 6.34 | 7 (one region 20.4 s) | 96.2 % |
EzRTP's 7 watchdog stalls (one region unresponsive 20.4 s) are the server's own record of synchronous World.loadChunk calls on region threads; LeafRTP issued none. For reference, the Pro Folia adapter cleared the same run at 13.5 TP/s. The shared rtp-core engine, not a Pro-only adapter, carries the free build's Folia result.
Architecture support matrix (Spigot / Paper-and-forks / Folia)
- LeafRTP - ✅🧪 Off-tick Anvil pre-filter · ✅🧪 Fully async via
getChunkAtAsync· ✅🧪 Region Scheduler + off-tick pre-filter, no 1-tick stalls - BetterRTP - ⚠️📖 Sync chunk load on miss · ⚠️📖 No off-tick safety pre-filter · ✅🧪 Folia 1.21.11 functional, p99 ~1.2 s
- EzRTP - ❌🧪
NoSuchMethodErroron Spigot 1.20.1 (Paper-only API) · ✅🧪 Works on Paper, no off-tick pre-filter · ⚠️🧪 Folia: syncWorld.loadChunkon region threads, 7 watchdog stalls, 20.4 s freeze - AsyRTP - ❌🧪 Fails to enable on Spigot 1.20.1 (Paper-only API in
onEnable) · ✅📖 Paper · ✅📖 Folia - SorekillRTP - ⚠️❓ Designed for Redis cross-server, not single-server perf · ⚠️❓ Same · ❓📖
- AdvancedRTP - ⚠️📖 Safety-first, sync chunk load · ⚠️📖 Same · ❌📖
- JakesRTP - ⚠️📖 Async via flag; 10-slot cache · ✅📖 Same · ❌📖 No Folia
- EssentialsX /rtp - ✅📖 Main-thread chunk load per candidate · ✅📖 Same · ❌📖
- HuskHomes RTP - ✅📖 Bundled with homes suite · ⚠️📖 Same · ✅🧪 Folia functional, p99 ~900 ms
Caveats. Small client counts only (2 on Paper, 3 on Folia; the number is a floor, not a ceiling); hardware, view distance, world state, and other plugins will move them. Paper rows are 2-client runs (LeafRTP reproduced n=2; others n=1 on a single rig); the Folia run used 3 clients and its EzRTP failure is corroborated by the server's own watchdog log, independent of the harness. Competitor plugins update frequently; corrections welcome via GitHub issue with a contradicting repro or doc link. This table measures performance only; feature breadth is not benchmarked here. LeafRTP ships the clickable GUI menu, Vault economy, the lifecycle effects engine, and twelve bundled claim integrations alongside these numbers. It does not trade features for speed.
Full methodology, raw CSVs, per-run analyses: helpers/StressTestRTP/. Video benchmark of /rtp on a custom world generator: youtu.be/V0NyNK9JydM.
Commands, placeholders, soft-deps
Commands (full reference: admin guide)
- /rtp: teleport to the default region for your current world.
- /rtp [parameter]:[value]: specify
region:,world:,player:, or temporary overrides. - /rtp reload: reload all configuration from disk.
- /rtp scan start|pause|resume|reset|cancel: pre-warm spatial memory by walking a region (renamed from
/rtp fillin 2.x). Demo: youtu.be/Ftjy1zw_S04. - /rtp menu: interactive admin menu; book on Paper / Folia, chat-paginated fallback elsewhere. Hardened in
3.0.0-beta.3.
PlaceholderAPI
- %rtp_player_status%: idle, waiting, teleporting, ...
- %rtp_total_queue_length%, %rtp_public_queue_length%, %rtp_personal_queue_length%
- %rtp_teleport_world%, %rtp_teleport_x%, %rtp_teleport_y%, %rtp_teleport_z%
Soft dependencies (all optional): Vault (for the optional economy charge), PlaceholderAPI, ProtocolLib. PaperLib is no longer required.
FAQ
Q: How do I stop /rtp from lagging my server, and why is LeafRTP faster?
A: Destinations are pre-verified and chunk-loaded into a queue before you type the command, so /rtp serves instantly without loading chunks on the main thread. Persistent spatial memory skips known-bad ground, and an off-tick Anvil pre-filter rejects unsafe spots before any chunk loads.
Q: Is it hard to set up, and does it have economy, a menu, and effects? A: No, and yes. It works zero-config out of the box; regions, safety, and effects are optional to tune later. The clickable menu, Vault economy, effects engine, heatmaps, and twelve claim integrations all ship in the free build.
Q: Why is it called "LeafRTP" now instead of just "RTP"?
A: "RTP" is the generic term for random teleport, so the old name was nearly impossible to find. It collided with every other random-teleport plugin, command, and forum thread in search and marketplace indexes. "LeafRTP" is a distinct, indexable name that points unambiguously at this plugin while keeping the /rtp command, rtp-api, config paths, and data files exactly as they were. Nothing changes for existing installs, only the public name.
Q: Does it work with Iris / Terra / custom datapack generators?
A: Yes. Region files are read directly, so modded and namespaced biome and block IDs are preserved, no configuration needed. /rtp biome:<x> stays correct even on pregenerated or version-migrated worlds, since biome data comes from the .mca files rather than a seed lookup.
Q: Do you support triangle / diamond region shapes?
A: Use the Polygon shape. A triangle is a 3-vertex polygon and a diamond is a rotated square, so both are already expressible without a separate shape type.
Q: Do I need Chunky or another pre-generator?
A: No. /rtp scan is a built-in, off-tick generator that walks a region and builds persistent spatial memory. Rather than loading every chunk up front, LeafRTP pre-verifies and remembers which sectors are unsafe so it avoids loading bad ground at all. Run Chunky alongside it if you still want a fully pre-generated map.
Q: I'm on NeoForge. A: NeoForge is a first-class supported platform on Minecraft 1.21.x / 26.1.x. Just drop the mod in.
Q: I'm on Forge. A: Run Arclight or Mohist (officially supported) and use this jar. A native Forge adapter is not planned.
Q: Memory and MSPT: should I worry?
A: LeafRTP trades a bounded amount of RAM (the queue, bounded by cacheCap) for speed. TPS should not drop below ~19 from LeafRTP alone on a healthy server; MSPT spikes during new-area generation are expected. That's the cost of generating chunks, not RTP.
Q: How do I report a bug? A: GitHub issue with server version, LeafRTP version, platform, relevant config files, and the error log section. See the admin guide for the full reproduction template.
Community Support Policy (read before filing an issue)
Support for the free build is community-tier and best-effort. I ship fixes when properly-reported issues land. Respecting this is how the plugin stays fast and current.
- Support covers bugs and configuration questions, after you've read the admin guide.
- Bug reports need a reproduction: server version, LeafRTP version, platform (Spigot / Paper / fork),
config.yml,regions/,safety.yml, and the relevantserver.logsection. Reports without these are asked for them once, then closed. - "It doesn't work" is not a bug report. Tell me what you did, what you expected, and what actually happened.
- Unsupported on the free tier: native Forge (use Arclight / Mohist), plugin conflicts I can't reproduce, general MC-server admin questions.
- Response time: no SLA on the free build. Critical safety issues jump the queue regardless.
- Feature requests via GitHub issues. Priority follows the published roadmap, not ticket volume.
Lite build boundaries & known issues
safety.ymlaccepts flat material names (LAVA,MAGMA_BLOCK,CACTUS,FIRE). Block tag / state-predicate grammar (#minecraft:leaves,OAK_SLAB[waterlogged=true], wildcards) and SQL/Redis shared-state backends are not part of this build.- Edits to
safety.ymland biome filters do not yet invalidate the persisted shape cache. Workaround:/rtp scan reset <region>. - Emergency landing platform default is now
platformRadius: -1(disabled). Set to0or higher to restore legacy 2.x behavior.
Live list: CHANGELOG.
Links
- LeafRTP admin & configuration guide: install, configure, command reference
- LeafRTP addon / API developer guide:
rtp-apiand examples - LeafRTP changelog & roadmap
- LeafRTP source on GitHub: star, watch, contribute, file issues
If block tag / state-predicate safety rules or SQL/Redis shared-state backends matter to your setup, a higher-tier build is available separately on BuiltByBit. Same engine, same config, same data files, drop-in compatible.
Центр версий
5 из 7Ченджлог
3.2.0Релиз26.1.1, 26.1.2, 26.2 · 22 июня 2026 г.
RTP 3.2.0
Big change: RTP now comes with a menu built in. Type /rtp and you get a clickable picker instead of instant teleport. Don't like it? Delete addons/LeafRTPGuiAddon.jar to go back to instant. (The menu has an instant option too, and it falls back to instant when no menu is available.)
New
- Countdowns now show as a boss bar instead of spamming chat.
/rtpnow sends you to open-sky spots by default - no more spawning in caves.- Now ships the full safety config (more block options out of the box).
- The plugin quietly learns biomes from chunks players load, for better results.
Fixed
requireSkyLightno longer drops players in caves.- The
/rtpmenu now opens on Fabric and NeoForge too. - Low-memory servers no longer get stuck pausing forever - RTP now frees memory.
- Per-world setups now actually work.
- Lots of Fabric and NeoForge 1.26 fixes: no more crashes on teleport effects, chunks generate properly, and the server no longer freezes loading them.
3.1.3-hotfixРелиз26.1.1, 26.1.2, 26.2 · 19 июня 2026 г.
the server backends for fabric and neoforge were left off for no reason. Fixed
3.1.3Релиз26.1.1, 26.1.2, 26.2 · 18 июня 2026 г.
LeafRTP 3.1.3
MiniMessage color/gradient support everywhere (even on plain Spigot), six new claim integrations, a world picker in the menu, and a heap-pressure safety brake.
Added
- MiniMessage markup anywhere color codes work - named/hex colors, gradients, decorations. Gradients now render even on pure Spigot (no Adventure). Chat, titles, action bar, console, Fabric & NeoForge all honor it.
- Six new claim integrations: SaberFactions, FactionsBridge, Residence, CrashClaim, HuskClaims, KingdomsX - now twelve bundled.
- World picker row in the
/rtpmenu. - Drop-in
plugins/RTP/addons/folder for addon jars (noplugin.ymlneeded).
Fixed
- WorldGuard protection now actually enforced - a flag-logic inversion let RTP land players inside protected regions.
- Gradients mixed with legacy/hex codes no longer break.
- A throwing claim/region verifier now fails safe (rejects instead of silently accepting).
/rtp region:<r> world:<w>now teleports into that world, with a dimension-correct vert for nether/end.- Heap-pressure backoff - background cache fill pauses over
maxHeapPercent(default 85), preventing small-heap GC-thrash hangs.
Changed
- MC 26.2 Fabric adapter re-pinned to the 26.2 final release.
- Bundled claim deps refreshed; dropped the unmaintained legacy Factions (1.6.9.x) and pre-2.x HuskTowns integrations.
100% free, MIT-licensed. Also on Modrinth.
3.1.2Релиз26.1, 26.1.1, 26.1.2 · 13 июня 2026 г.
This release fixes the last blockers for Folia and cross-server networking in the free build. Folia support required adjusting a handful of scheduler call sites so work lands on the correct region thread; networking required a new proxy-direct transport that uses the proxy itself as the shared store, so the average server owner doesn't need to set up Redis or SQL to get cross-server /rtp.
Added
Basic Folia support. The lite build now runs on Folia:
folia-supported: trueis set inplugin.yml, a newFoliaAwareSchedulerroutes work through Paper API's regionized and per-entity schedulers, and teleports go throughEntity#teleportAsync. The throughput-optimizedrtp-foliaadapter remains Pro-only.Cross-server
/rtpon the DB-freeproxy-directtier, as a drop-in alternative to Redis/SQL. A cross-server/rtp <server>:<region>issued on a lobby now moves the player and runs/rtpon the destination backend with no Redis/SQL required.proxy-directuses the proxy's own in-memory transport as the shared store, reached over an outbound TCP connection via a thin RPC, HMAC-signed whenRTP_NET_SECRETis set.proxy-directnetwork transport: player-independent cross-server region discovery.transport.type: proxy-directlets a backend publish its real region list at startup with no player online, so cross-server tab-completion converges with zero players on any backend. No Redis/SQL required.Per-server
/rtppermission gate for networked backends. Cross-server/rtp <server>:<region>is now gated byrtp.servers.<server>in addition tortp.regions.<region>, so operators can allow/deny teleport per backend.rtp.servers.*defaults to op and is a child ofrtp.*./rtp info biomesbiome-occupancy leaderboard. Reports which biomes online players actually spend their time in, ranked by share - useful for gauging where players congregate. Counts are in-memory only and reset on restart/reload. Gated by the existingrtp.infopermission.spark profiler is now an optional source for
/rtp infoTPS/MSPT metrics. When spark is installed, RTP merges spark's richer per-window TPS (1m/5m/15m) and mean MSPT over the native binding. Pure soft-dependency via reflection; no compile dependency added.performance.yml#biomeWeightsships the full vanilla biome set pre-listed at weight1.0. Every vanilla overworld/nether/end biome is now enumerated as a ready-to-edit reference. Behaviour is unchanged: an all-1.0map is identical to the prior default.Biome-probability weighting (ADR-062). New
performance.ymlknobsbiomeWeighted(defaultfalse) andbiomeWeights(biome id -> relative weight) let operators bias or suppress specific biomes in the teleport draw. When enabled, the location selector draws a target biome proportionally to its configured weight, then explores via the bounded spiral until that biome is confirmed.Registry-aware gray-space steering for biome weighting. A requested biome the world can produce but that recall memory has not yet recorded stays reachable via bounded-spiral exploration rather than being treated as weight
0. Each recorded biome defers a run-count-proportional share of its weight to exploration, so a high weight on a thinly-recorded biome can never amplify single-run clustering./rtp version(alias/rtp about) subcommand. Reports the running plugin version, platform brand, and host server version. Gated by a newrtp.versionpermission (defaulttrue, child ofrtp.*).
Fixed
Map charts and metrics work correctly on Folia (new in this release alongside Folia support). Map chart delivery is dispatched to the region thread owning the viewer's chunk via
RTP.scheduler.runTask(viewerLocation, ...)rather than the global region thread, avoiding aNullPointerExceptionon delivery. Metrics install falls through Folia -> Paper -> raw Bukkit sampler so bStats and/rtp inforeport live data from first boot.Relative coordinate tokens (
/rtp centerx=~ centerz=~) now resolve to the player's position. A~value previously fell through toBoolean.valueOf("~") == false, silently setting the center to0. A newresolveRelativeCoordinatehelper resolves~,~<n>,-~, and-~<n>against the player's current X/Z.Fabric and NeoForge no longer suggest
/rtpsubcommands or parameters the caller lacks permission for. The Brigadier bridge's suggestion provider now gates suggestions throughBrigadierBridgeContext.permissionCheck(), closing a tab-completion leak on Brigadier-dispatched platforms.
Changed
Released jars trimmed of dead weight. Both Pro and lite jars now exclude compile-only IntelliJ annotation classes and orphan Maven metadata that leaked in from shaded dependencies. No code or API change.
/rtp infostays compact before any metrics are sampled. TPS, MSPT, pipeline latency, percentile, and database-latency rows are suppressed until their underlying values exist. Always-available rows (JVM heap, queue depth, pending teleports, generation outcomes) are unchanged.Per-batch
[TRACE] ScanTask diagline demoted from INFO to FINE. No longer spams the console during a world scan; still available at elevated log levels.
3.1.1Релиз26.1, 26.1.1, 26.1.2 · 10 июня 2026 г.
NEW
- Vault economy support now ships in lite: optional per-
/rtpcharging (price, priceOther, surcharges, balance floor, refund-on-cancel) works out of the box. Dormant at zero cost when Vault isn't installed. - German (
de) locale translation expanded (the locale already existed; this pass translates more of it). - Region-specific schematic paste, with a shared translator across platforms.
- Optional PvP / combat-tag gate (off by default) with bundled integrations for PvPManager, CombatLogX and Simple Combat Log, plus a native combat tracker.
/rtp clearcacheadmin command and a newrtp.adminpermission node./rtp infonow surfaces generation success/failure rates and per-cause breakdowns; live-updating bad-locations map during a scan.uniquePlacementsis now an integer chunk radius (legacy true/false still accepted); config getters tolerate boolean<->int cross-typing.- Optional emergency-platform block-restoration timeout (
safety.yml:platformRestoreSeconds).
CHANGED
- RTP is now MIT-licensed (open-core dual licensing). The jar bundles the MIT license text.
- Region biome visualization now sources pixels from saved scan biome data only.
3.1.0Релиз26.1, 26.1.1, 26.1.2 · 31 мая 2026 г.
[3.1.0] - 2026-05-31
Added
- German (
de) locale shipped across all config/message files; full locale parity maintained. - Region-specific schematic paste platforms (ADR-058) with new
PasteOptionsAPI andRegionVerifierRegistryfootprint claim checks (S-003). New prefabs updated to use it (skyblock,oneblock,high-performance,multi-world). - Pluggable bare-
/rtproot action (ADR-056, REQ-API-F-006). NewRootActionRegistrySPI (RTPAPI.hooks().rootAction()) lets an addon take over a bare/rtp(e.g. open a GUI menu) instead of teleporting; subcommands are never routed through it. Shipped with an example menu addon. - Platform-agnostic addon SPI (ADR-057). New
RTPAddonlifecycle interface +AddonRegistry(RTP.addons, ServiceLoader-based) so an addon jar runs unchanged on Bukkit/Paper/Folia, Fabric, and proxy JVMs.RTP_ExampleAddonported with zeroorg.bukkit.*imports. - Optional PvP / combat-tag gate (ADR-055). Off by default (
safety.yml#pvpCheckEnabled=false). When enabled,/rtpis refused for a player currently in combat, using either a boundPvPCombatStateRegistryprovider (combat-tag plugins such as PvPManager / SimpleCombatLog / CombatLogX) or RTP's built-in native damage tracker. The native tracker is now fed on every supported platform: Bukkit/Paper/Folia via anEntityDamageByEntityEventlistener and Fabric viaServerLivingEntityEvents.AFTER_DAMAGE(both resolve the projectile shooter / primed-TNT igniter as the aggressor and stamp victim/aggressor perpvpTagVictim/pvpTagAggressor). The gate is consulted at the/rtppre-dispatch surface before the player is enrolled, fails open (a broken external provider never blocks a teleport), audits every refusal at WARNING (REQ-RTP-S-004), and uses the new configurablemessages.yml#pvpInCombatstring (REQ-RTP-F-013). Sixsafety.ymlknobs:pvpCheckEnabled,pvpCombatTagSeconds,pvpOnCombat,pvpSource,pvpTagVictim,pvpTagAggressor. - Bundled combat-tag plugin integrations for the PvP gate (ADR-055). New reflection-based soft-depend adapters for PvPManager, CombatLogX, and Simple Combat Log (
rtp-plugin/.../softdepends/pvp/);PvPIntegrations.setupbinds the first enabled plugin (priority PvPManager, then CombatLogX, then Simple Combat Log) toPvPCombatStateRegistryviaRTPAPI.hooks().pvpCombatState(), gated onisPluginEnabled(...)like the claim integrations. When none is installed (orpvpSource: NATIVE), the native combat tracker answers; a reflective/API-version failure disables the adapter for the session and treats the player as not-in-combat (REQ-RTP-S-004). Wired in both the full and rtp-lite bootstraps. Covered byPvPCombatAdapterTest. uniquePlacementsis now an integer chunk radius (was boolean; defaults to0= off).N >= 1clears a(2N-1)x(2N-1)chunk square around each used spot so placements spread out; legacytrue/falsestill coerce to1/0. Retired spots tagged with a dedicateduniquePlacementfail cause.- Config getters tolerate boolean<->int cross-typing, so a legacy
true/falseon a now-numeric knob (or0/1on a boolean knob) resolves instead of throwing. - Optional emergency-platform block-restoration timeout (ADR-060). New
safety.ymlknobplatformRestoreSeconds(-1= disabled default;0= restore on first loaded pulse;> 0= after that many seconds). Restores are chunk-load-aware (never force-loads, S-005), Folia-safe, and persisted across restarts. /rtp infonow surfaces generation outcomes (REQ-RTP-OBS-007, ADR-052): success/failure rate and a per-cause rejection breakdown, via six new placeholders and threemessages.ymllines.- Live-updating bad-locations map during a world scan: the admin "Region shape" chart now re-renders ~1 Hz from the in-memory bad-keys cache so scan progress is visible without re-issuing the command.
- New bStats charts:
language_selection, MSPT-p99 by platform/game-version/plugin-version, and aggregate generation-outcome (success rate + top failure cause). All privacy-safe (bucketised / whitelisted categories). /rtp clearcacheadmin command (permissionrtp.admin). Clears the L1 (kept), L2 (unkept), and L3 (backlog) location caches for every region across the board in one shot, releasing any held chunk reservations and dropping the associated persisted rows; the scan/queue machinery refills the caches afterwards. Backed by a newRegionQueueManager.clearCaches().rtp.adminpermission node declared inplugin.yml(both full and lite), gating/rtp clearcacheand grouping the existing admin tooling permissions (rtp.reload,rtp.config,rtp.scan,rtp.info) as children so a single grant covers all admin commands.- (Pro) Numeric range predicates in the safety-list grammar (ADR-017 amendment).
safety.yml::unsafeBlocks/airBlocksnow accept block-state comparisons (LAVA[level<=3],FIRE[age>=10],*[level>=8]); multiple bounds AND together. rtp-lite ignores tag/predicate tokens.
Changed
- Region biome visualization now sources its pixels from saved region biome data only.
RegionBiomesResolverno longer reads on-disk.mcapalettes viaRTPWorld.readBiomesInRegionFile; it classifies each in-disk pixel through the newMemoryShape.biomeAt(int, int)/biomeAt(long), a floor-search over the persistedbiomeKeysCache/biomePrefixSumsCacheaccumulated by the scan pipeline (no chunk I/O, S-005-clean). Pixels with no recorded biome render as unsampled (BLACK), so the chart reflects what the scan has actually saved for the region.
3.0.0Релиз26.1, 26.1.1, 26.1.2 · 27 мая 2026 г.
transferring from spigotmc resource https://www.spigotmc.org/resources/rtp.94812/
runs on paper and fabric, a few things left to implement on the fabric side of things but the core functionality works.
Комментарии
Загружаем…