Voxel Shop beta is live. Expect occasional bugs. Learn more
A premium-quality Random Teleport plugin, offering unparalleled safety, performance, and more
[1] The search now learns the terrain of your world and stops re-checking areas it knows are bad. Every generated chunk is scored safe or bad into a coarse per-world map; once an area (like a large ocean) has proven mostly bad, rolls that land there are re-rolled before any chunk is generated. Landing spread stays exactly as configured, avoidance is just a fresh roll of the same shape. Unlike the short-term failed-area memory this learns from successes too and is saved to terrain-memory.dat, so it keeps improving across restarts, the background cache fill teaches it the whole reachable map over time and day two is faster than day one. Areas whose rules change (a biome un-blacklisted) recover on their own. New location_cache.terrain_memory block, on by default. config-version 50.
[2] Paid teleports now always refund when they don't happen. If the cost was taken but the teleport then failed (another plugin cancelled it), the player quit mid-search, or the request was a rejected duplicate, the money was silently gone. All of those refund now.
[3] /rtp nearclaim and /rtp nearplayer go through the same path as every other RTP. nearclaim was using a weaker safety check that could drop you in a claim, in lava, or on powder snow, and both skipped the normal arrival effects; they now get the full biome/region/hazard safety and the same effects, sounds and smooth landing.
[4] Fixed two rare cache races: two players could very occasionally be sent to the exact same block, and a slow background cache-fill on a heavy world could be wrongly restarted and run twice. Also hardened the air-drop parachute against a Folia region-boundary crossing mid-glide.
[1] Cached teleports are basically instant now. The cache keeps the chunks of the next few spots per world loaded (location_cache.warm_chunks, default 3 per world), so a cache hit no longer waits on a disk read. Went from around 47ms to 0.1ms in testing. The next spot also keeps a small 3x3 ring warm (head_radius), the whole thing runs off the main thread, and it scales down to almost nothing when the server is empty. If you want to verify it yourself: /rtp benchmark <world> cache. There is also an optional serve_trust_seconds to skip the safety recheck for freshly validated spots (off by default).
[2] The location search now runs DURING the teleport delay instead of after it. With delay 3 and a search that needs 2 seconds you used to wait 5, now you wait 3. Cancelled warmups put the found spot back into the cache. performance.prefetch_during_delay, on by default. config-version 46.
[3] Blocks load much faster when you land in fresh terrain. The plugin now pre-generates the area around the next cached spots in the background (warm_chunks.pregen_radius, default 3), so on arrival the chunks stream from disk instead of being generated live while you stare into fog. Skips already-generated terrain, pauses on low TPS. config-version 47.
[4] The search stopped wasting chunks. If the picked spot in a freshly generated chunk is unsafe (ocean, lava), it now checks up to 12 other spots in the same chunk before generating a new one (location_cache.chunk_scan_columns, 0 = old behavior). Cold searches dropped from ~1300ms to ~500-600ms.
[5] The search also remembers where it failed. Bad chunks and clusters of them are avoided for 15 minutes (location_cache.failed_area_memory), the dice are just rolled again, so the landing spread stays exactly as configured. Worst-case searches over ocean-heavy areas went from 5.4s down to about 2s and keep improving while the server runs. Cleared on reload. config-version 49.
[6] New optional smooth_transition.chunk_focus: narrows the player's send view distance for a few seconds after arrival so the terrain around them pops in sooner, then restores it. Off by default, test it with your view distance first.
[7] /rtp no longer sends you to the spot you are already standing on, or to one of your last six destinations. Those spots stay available for other players. And if literally every cached spot is one you recently visited (happens when you spam /rtp), you get the oldest one instead of waiting seconds for a fresh search.
[8] Powder snow no longer counts as safe ground, players used to sink in and freeze. The slow falling from smooth_transition now ends the moment you touch the ground, so jumping right after a teleport no longer feels floaty (air drops keep their parachute). Quiet servers also keep at least 8 learned spots per world cached.
[9] All five GUIs (dashboard, performance panel, world selection, zone browser, party) moved onto the shared JustAPI menu framework. Same layouts, same config keys, same behavior, about 700 lines less duplicated GUI code, and every menu gets the full anti-dupe protection (shift-clicks, hotbar swaps, drags, double-click collects). Zones and Performance opened from the dashboard now switch in place and their bottom button becomes Back. Sounds were compared menu by menu against the old versions: nothing doubled, nothing missing.
[10] The dashboard builds its items about 10x cheaper: one item-meta pass instead of three, and text is parsed once per config load instead of on every open. Looks and behaves exactly the same.
[1] The safe-location search is a lot faster now, especially the first teleport into unexplored terrain. Every attempt used to generate a nine-chunk block and wait a couple of ticks, and its height lookup could stall the main thread loading a chunk it had already loaded. Now each attempt loads only the one chunk it checks and reads the height straight from it, so a search that took a few seconds lands in well under a second. This covers custom-radius teleports too. Ocean and lava spots are still rejected exactly as before.
[2] Custom-radius teleports use the cache now. A /rtp <min> <max> used to skip the ready-location cache and always search live. If a cached spot happens to fall inside the radius you asked for it is served instantly, otherwise it falls through to the faster live search. There is a switch for it, location_cache.serve_custom_radius, on by default.
[3] Fixed high overworld ground being thrown away. A leftover height cap rejected any spot at or above Y127 and even logged a scary "nether ceiling" error for it, so on 1.18+ terrain every hill and mountain wasted attempts and a mountainous area could fail outright. The overworld now uses the world's real build height, so you can land on a peak like anywhere else, and the false error is gone.
[4] The Nether and End use their own attempt counts again. Queued teleports read the wrong setting and always used the overworld number, so attempts_nether and attempts_end were quietly ignored on that path. They apply now, so sparse dimensions get the extra tries you configured.
[5] Pre-gen harvesting is gentler on the server. It pauses whenever TPS drops below the pre-gen floor, and the default cap is lower (the cache only needs a few dozen ready spots, not a couple hundred), so filling the cache while a pre-gen runs no longer piles chunk generation on top of chunk generation and drags TPS down. If your config still shows the old high cap you can lower pregen.harvest_max_per_world, but the TPS backoff already keeps it in check.
[6] Hardened the block blacklist. It accepts namespaced ids like minecraft:water as well as plain names, works on any server language, and quietly skips a bad entry instead of letting it get in the way.
[7] Steadier config and world handling. Merged config updates now apply on the very first start after an upgrade instead of needing a second restart, tested upgrading from 3.5.9 with your own values kept and the old file backed up. Worlds loaded after startup, for example by Multiverse, get their cache prepared without resetting everything else, and the background cache filler can no longer pile up duplicate workers or get stuck on a world.
Note on radius: /rtp <min> <max> places you that far from the centre as a straight-line distance, so a coordinate like -2641 can still be 5842 blocks out and correctly inside a 5000 to 6000 request. Only the SQUARE shape reaches into its corners past the max, which is by design.
[1] Made world permissions actually controllable, in the gui and the command alike. Before, the gui checked a node the command never used (so regular players saw an empty menu full of filler glass), while /rtp <world> let everyone through unless a node was explicitly denied, so restricting worlds per group never really worked. Both now follow one clear rule: the world you are standing in is always available, justrtp.command.rtp.world unlocks every world, and justrtp.command.rtp.world.<world> (for example justrtp.command.rtp.world.world_nether) unlocks exactly that one, which also makes it appear in the gui. An explicit denial of justrtp.command.rtp.<world> still always wins. The gui shows exactly what the player can use, nothing more, and the docs got a full section with LuckPerms examples.
[2] Closed a paid teleport loophole. If a payment confirmation was still pending, the next /rtp request (or gui click) skipped the confirmation entirely and started right away, without ever charging the player. A new paid request now always asks for its own confirmation and replaces the old one, and each confirmation keeps its own full 30 second window.
[3] Fixed zone particles turned off with /rtpzone particles <id> none coming back after a reload or restart. Choosing none was never written to rtp_zones.yml, and a zone without a saved style falls back to the default style on load, so the particles quietly returned. The choice is stored explicitly now and none stays none.