### NEW FEATURES
[1] Smooth teleport transition: pre-loads destination chunks plus short blindness/slow-falling/resistance so players don't see void. Configurable viasmooth_transitionblock
### CRITICAL FIXES
[2] Nether RTP failing withUNKNOWN: 50— air check now usesMaterial.isAir()so CAVE_AIR and VOID_AIR match
[3] Shutdown crashIllegalPluginAccessException— FoliaScheduler runs one-shots inline when the plugin is disabled
[4] End RTP failing on unexplored chunks —world_the_endadded to default location_cache, andshouldGenerateChunksdefault flipped totrue
[5]/rtp worldgetting stuck on the cross-server queue when a server alias matched a local world name — parser now checks worlds first
[6] Action bar showed1m 22ss— removed trailings, formatDuration already includes the unit
[7] Empty""lines inchat_messageare no longer skipped
[8]<x><y><z><world><player>placeholders work ineffects.title,effects.action_bar,effects.chat_message
[9] PlaceholderAPI placeholders (e.g.%rp_left_click%) now expand in RTP GUI items
[10] RTP GUI close button can be removed cleanly (enabled: false, missing slot, or empty section)
[11] RTP GUI decoration items honorenchanted: true
[12]smooth_transitionandzone_titleauto-apply to existing installs — config-version bumped to 33
[13]zone_particles.ymlis now registered with ConfigUpdater so future fields migrate automatically
### IMPROVEMENTS
[14]effects.teleport_delay_bar.textfrom config.yml now beatsteleport.delay_actionbarfrom messages.yml
[15] Title and action bar effects no longer return early on whitespace-only text
[16] zone_particles.yml updated
### FROM PULL REQUEST #10
[17] Folia chunk-ticket andchunk.getEntities()calls in PlayerListener now wrapped inrunAtChunk
[18]DatabaseManager.isConnected()is non-blocking — volatile flag, async 30s validator, reconnect-storm guard
[19]JustRTP.onDisablenull-safe whenrtpLoggerfailed to init
[20] AnimationManager double-recreation removed fromreload— active animations preserved
[21]RTPMatchmakingManager.restart()called from reload, plusMath.max(1, tick_interval)clamp
[22]processMatchfallback uses the verified-safe central location instead of the unverified offset point
[23] Rich/rtp queue status— position, waited time, ready indicator, other-world queues
[24] Globalzone_titleconfig block — default countdown title for all zones
[25]<time>placeholder works in zonemain_titletoo
[26]DataManagerlazy init rewritten with volatile + DCL
### CONFIGURATION
[27] Newsmooth_transitionblock in config.yml
[28] Newzone_titleblock in config.yml (PR #10)
[29] Newmatchmaking.status_*keys in messages.yml (PR #10)
[30]world_the_endadded to defaultlocation_cache.worlds
[31]shouldGenerateChunksdefault flipped totrue
[32]zone_particles.ymlregistered with ConfigUpdater
[33] config.yml v33, messages.yml v21
### COMPATIBILITY
[34] Verified on Paper 1.21.11, Paper 26.1, Folia 1.21.x, Folia 26.1
### FOR SERVER ADMINS
- Nether
UNKNOWN: 50and "Pausing searches" — fixed- Shutdown
IllegalPluginAccessException— fixed/rtp worldstuck on queue — fixed- Smooth transition is on by default; disable with
smooth_transition.enabled: false- PAPI now works in RTP GUI items
<x><y><z>placeholders work consistently across title, action bar, and chat messages
### NEW FEATURES
[1] NEW FEATURE: Cylinder RTP zones - circular zone regions for round arenas, towers, and non-rectangular waiting areas
[2] NEW FEATURE: Block-selection RTP zones - pick individual blocks with a wand to build irregular, non-cubic arena shapes
[3] NEW FEATURE: Shape-aware zone wands - each shape gets its own wand (BLAZE_ROD for cuboid/blocks, END_ROD for cylinder) with shape-specific lore
[4] NEW FEATURE: Zone particle system - 5 premade animated styles (OUTLINE, BEAM, SWIRL, PULSE, DUST_WALL) plus NONE, all shape-aware
[5] NEW FEATURE: Live setup particle preview - while in/rtpzone setup, particles show the current selection in real time so admins can see exactly what they're building
[6] NEW FEATURE: Per-zone particle style configurable via/rtpzone particles <zone_id> <style>with tab completion
[7] NEW:/rtpzone setup <id> [cuboid|cylinder|blocks]- choose zone shape at setup time (defaults to cuboid for backward compat)
[8] NEW:/rtpzone done- finish block selection and continue setup flow
[9] NEW: Cylinder setup - left-click sets center, right-click on edge measures radius, or type radius in chat; Y-range configurable per zone orautofor full world height
[10] NEW: Block setup - left-click adds block, right-click removes, shift+left-click clears selection
[11] NEW: Newzone_particles.ymlconfig with per-style particle, color, density, and animation speed settings
### CRITICAL FIXES
[12] FIXED: respawn_rtp not working on Folia - PlayerRespawnEvent fires during a player state transition on Folia and returns stale world data, causing the respawn teleport to never trigger. Switched to PlayerPostRespawnEvent (Paper API) which fires after respawn completes, ensuring reliable respawn RTP on both Paper and Folia servers
[13] FIXED: Zone holograms not appearing after server restart, player rejoin, or world change - visibility was only pushed once at hologram creation, missed if timing did not line up with player join. Added a periodic 5-second visibility sweep over all online players plus three staggered join refreshes (1s, 3s, 6s after join). Holograms now appear without needing/rtp reload.
[14] FIXED (PR #9): Folia thread-safety violations across NearClaimRTPManager, HologramManager cleanup, JumpRTPListener, RTPService border tracking, and bundled bStats Metrics. Async block reads, off-region entity removals, parallel HashMap writes, and hardcoded Bukkit.getScheduler() calls all corrected for Folia 1.21.x and 26.1
[15] FIXED (PR #9): Matchmaking spread distance bug - per-player safety search was passing absolute coordinates as min/max radii, scattering duel partners hundreds of blocks apart on servers with non-zero spawn coords. Fixed to pass proper(0, safety_search_radius)distances
[16] FIXED: RTPCommand nearplayer was using synchronousplayer.teleport()while every other path usedteleportAsync- inconsistency causing potential hangs on Folia, now async everywhere
### COMPATIBILITY
[17] COMPATIBILITY: Minecraft 26.1 (released March 24, 2026, protocol 775, data version 4786) verified working alongside 1.21.11. Plugin compiled against Paper 1.21 API withapi-version: '1.21'so a single JAR runs on both versions. No code changes needed - new 26.1 blocks (e.g., GOLDEN_DANDELION) and data-driven villager trades do not affect teleport logic. Server-side Java 25 requirement for 26.1 does not affect the plugin (Java 21 bytecode runs on the Java 25 JVM)
### CONFIGURATION
[18] NEW:shapefield on zone config entries -CUBOID,CYLINDER, orBLOCKS
[19] NEW: Cylinder fields -center,radius,min-y,max-y
[20] NEW: Blocks field -blocks: [x,y,z, ...]list of block coordinates
[21] NEW:particle-stylefield per zone - persists chosen particle style across restarts
[22] NEW:zone_particles.yml- 5 premade styles + global tuning (update_interval,render_distance,max_particles_per_tick,setup_preview)
[23] NEW:matchmaking.safety_search_radius(default 5) - tunable safety search radius for matchmaking spread (PR #9)
[24] CONFIG: rtp_zones.yml version bumped to 13 - existing cuboid zones auto-migrate without changes
[25] CONFIG: messages.yml version bumped to 21 - new zone setup messages for cylinder/block modes and particle commands
### IMPROVEMENTS
[26] IMPROVED: Particle system uses chunk-batched dispatch on Folia (one task per chunk instead of per particle) and direct inline spawning on Paper - no scheduler overhead in either case
[27] IMPROVED: Particle Y-range automatically clamped to a window around the zone center, soautoY-range cylinders/cuboids no longer waste the per-tick particle budget on locations far below the player's view
[28] IMPROVED: Zone region logic refactored to aZoneRegioninterface - cleaner separation of cuboid/cylinder/blocks containment checks
[29] IMPROVED: Tab completion for/rtpzone setup <id> <shape>,/rtpzone done, and/rtpzone particles <zone> <style>
[30] IMPROVED: Respawn RTP scheduler delay bumped from 1 to 2 ticks for extra entity state stability
[31] IMPROVED: Early-return safety check added to respawn RTP handler when player goes offline during the delay
[32] IMPROVED: Zone setup messages carry a<shape>placeholder so admins can see which shape they started
[33] IMPROVED (PR #9): JumpRTPListener atomic via ConcurrentHashMap +compute(...)- parallel PlayerMoveEvent on Folia no longer races
[34] IMPROVED (PR #9): RTPService border-warning set is now ConcurrentHashMap.newKeySet() - prevents duplicate border warnings under parallel findSafeLocation
[35] IMPROVED (PR #9): Tab completer now exposesqueue,matchmaking,sendlocationplus their sub-args and world suggestions
[36] IMPROVED: Existing zones loaded withoutparticle-stylefield automatically pick up the global default style on next reload
### FOR SERVER ADMINS
- Existing cuboid zones continue to work unchanged (auto-detected when
shapeis missing)- Circular arenas:
/rtpzone setup my_arena cylinder- Non-cubic arenas (stairs, L-shapes, scattered platforms):
/rtpzone setup my_arena blocks- All three shapes share the same teleport, hologram, particle, and effects system
- Change zone particles live:
/rtpzone particles my_arena swirl(oroutline,beam,pulse,dust_wall,none)- If you run Folia/Canvas and respawn_rtp wasn't teleporting players on death, this update fixes it
- Holograms missing on restart/rejoin/world change? Fixed in this version - no more
/rtp reloadworkaround needed- Matchmaking duels scattered too far apart? Fixed - and tunable via
matchmaking.safety_search_radius
### NEW FEATURES
[1] NEW FEATURE: Void World RTP Support - newVOIDworld type for skyblock, oneblock, and void arena worlds
[2] NEW:void_world.spawn_yconfig option (default: 64) - configurable Y level for void world spawns when no solid ground exists
[3] NEW: Void worlds prefer solid ground when available (platforms, islands) and fall back to spawn_y only when the world is truly empty
[4] NEW: Full biome restriction and region protection support in void worlds
### CRITICAL FIXES
[5] FIXED: Inventory drag exploit affecting ALL server GUIs
[6] FIXED: Folia threading violation in onPlayerDropItem - accessing ItemEntity state from wrong region thread caused IllegalStateException on Folia/Canvas servers. Now checks setup mode first (skips entity access for 99.9% of events) with safe fallback for cross-region edge cases
### IMPROVEMENTS
[7] IMPROVED: Update checker endpoint issue fixed
[8] IMPROVED: Void world spawn Y is bounds-checked against world min/max height to prevent out-of-bounds errors
[9] IMPROVED: SafetyValidator correctly skipped for void world locations to prevent false rejections
### CONFIGURATION
[10] CONFIG: NewVOIDoption inworld_typessection - set any world to"VOID"for void world RTP support
[11] CONFIG: Newvoid_worldsection withspawn_ysetting for void world spawn height
[12] CONFIG: All changes fully backward compatible
[1] Added Paper 26.1 / Minecraft 26.1 support compatibility
[2] Updated update checker endpoint from api.kotori.ink to api.deltura.net - old domain was retired, causing update checks to silently fail
[3] Fixed some issues with 1.21.11 paper
[1] Fixed "unknown world" console errors on startup - ConfigUpdater now reads config-version via plain text instead of triggering Bukkit Location deserialization on rtp_zones.yml and cache.yml
[2] Fixed hologram text changes in holograms.yml not applying after restart or reload - FancyHologramManager was preserving old persistent data instead of reading updated config
[3] Fixed hologram templates not reloading on/rtp reload- reloadTemplates() now applies config changes to all active FancyHolograms immediately
[4] Added text-based version update for files containing serialized Bukkit objects (rtp_zones.yml, cache.yml) to prevent Location deserialization errors during config migration
[5] Improved FancyHologram lifecycle - holograms.yml is now the single source of truth for templates on create, load, and reload
[6] Fixed /rtp command showing usage message instead of working - alias enabled check defaulted to false, breaking all aliases when commands.yml was missing, empty, or failed to load
[1] SECURITY FIX: GUI Item Extraction Exploit - Players can no longer drag items from GUI during lag
[2] SECURITY: Comprehensive inventory drag event protection with multi-layer validation
[3] SECURITY: Enhanced click protection - blocks shift-click, hotbar keys (1-9), and all interaction types
[4] NEW FEATURE: Console-Initiated RTP Message - Custom message when console/portal executes RTP
[5] NEW:teleport.console_initiatedmessage key for automated RTP systems
[6] NEW: Full support for command blocks, portals, and automated teleportation
[7] FIXED: Race condition in matchmaking queue join - synchronized queue size reading
[8] FIXED: NPE prevention in async teleport chains - added player online checks
[9] IMPROVED: GUI security with InventoryDragEvent handler blocking all drag attempts
[10] IMPROVED: Click validation checks inventory type, shift-click, and hotbar button presses
[11] IMPROVED: Debug logging for security events - tracks all blocked GUI interactions
[14] MESSAGES: Added console_initiated key for portal/console RTP notifications
[15] THREAD SAFETY: NPE-safe async chains with online status validation
[16] COMPATIBILITY: Fully backward compatible - all security fixes are transparent
[1] NEW FEATURE: Economy Refund System - Players automatically refunded if RTP fails after payment
[2] NEW FEATURE: RTP Matchmaking Queue - Players can queue together for PvP duels (1v1, 2v2, etc.)
[3] NEW FEATURE: Console Send Location Command - Admins can teleport players to specific coordinates
[4] NEW:economy.refund_on_failconfig option (default: true) - enables automatic refunds on failure
[5] NEW: Complete matchmaking system with/rtp queue join/leave/statuscommands
[6] NEW:/rtp sendlocation <x> <y> <z> <world> <player>admin command for precise teleports
[7] NEW: Matchmaking configuration section with team_size, spread_distance, tick_interval, queue_timeout
[8] NEW: VaultHook.depositPlayer() method for economy refunds
[9] IMPROVED: Economy system now handles failed teleports gracefully with automatic refunds
[10] IMPROVED: Players can find dueling partners via matchmaking queue system
[11] IMPROVED: Admins have more control with direct coordinate teleportation
[12] CONFIG: Newmatchmakingsection with full queue configuration options
[13] CONFIG: Neweconomy.refund_on_failoption for failed RTP refunds
[14] MESSAGES: Added 14+ new message keys for matchmaking, refunds, and sendlocation
[15] PERMISSIONS: Newjustrtp.command.rtp.matchmakingpermission for queue access
[16] PERMISSIONS: Newjustrtp.bypass.default_worldpermission added
[17] COMPATIBILITY: Fully backward compatible - all new features are optional
[1] NEW FEATURE: Auto-open GUI option -/rtpcan now automatically open the GUI instead of direct teleport
[2] IMPROVED: Disabled by default to preserve traditional/rtpbehavior
[3] FEATURE: Hub servers can force players to choose worlds visually via auto-open GUI
[4] FEATURE: Traditional/rtp <world>commands still work for direct teleportation
[5] FEATURE: Added command alias support –/rtp basecan now be configured as an alternative command
[6] FEATURE: WorldGuard support for/rtp nearclaim– allows RTP near protected regions
