/
player.teleport() on a Folia region thread throws UnsupportedOperationException: Must use teleportAsync while in region threading. ResetManager.teleportPlayersOut now uses teleportAsync() and chains the confirmation message + completion signal onto the returned CompletableFuture, so the reset sequence resumes only after every player has actually been moved.ChamberDetailView, and the "Teleport to Exit" button in ChamberSettingsView, were calling synchronous teleport() inside GUI click handlers (which run on the player's region thread on Folia). Switched to teleportAsync().SpectatorManager uses runAtEntity for all player operations — both entering spectator mode (teleport to chamber center) and exiting it (teleport to exit location) were still using synchronous teleport() inside those callbacks. Switched to teleportAsync(). On Paper these calls are equivalent; on Folia the async variant is required.
Because Trial Chambers deserve better than being a "one and done" dungeon.