# Bookshelf - v2.1.54 ## Legacy Formatting Everywhere + Folia Teleport Fix ### API UPDATES - **Legacy formatting through MiniMessageHelper** — `MiniMessageHelper.deserialize(...)`, `deserializeIntoList`, `center`, and the chat-message processor now translate legacy `&` / `§` color and style codes (including legacy hex like `&#RRGGBB` and `$#RRGGBB`) into MiniMessage before parsing. Any string passed through Bookshelf's standard deserialize entry points keeps working whether it's authored as MiniMessage or pasted from older `&`-coded configs. - **`MiniMessageHelper.convertAmpersandToMiniMessage`** — Now delegates to `LegacyHelper.convertAmpersandToMiniMessage` and picks up legacy-hex support that the old implementation lacked. Source-compatible — existing call sites get the new behavior with no changes. ### PLUGIN FIXES - **Folia teleport regressions across `/spawn`, `/back`, `/top`, `/center`, `/world`, `/tp`, `/tphere`, `/tpall`, `/tpoffline`, kit teleport, and queued teleports** — Every `Player#teleport`/`Entity#teleport` call in the plugin (delayed and immediate) was firing `UnsupportedOperationException: Must use teleportAsync while in region threading` under Folia 1.21.x. Switched all of them to `teleportAsync(...)`; success messages now chain off the returned `CompletableFuture` so they fire after the move completes. - **Cross-server chat formatting** — The Redis chat-channel listener was bypassing `MiniMessageHelper` and called MiniMessage directly, so legacy codes coming from servers running other versions weren't translated. Routed through the helper so legacy codes render the same regardless of source server. ### INTERNAL UPDATES - Bumped **Bookshelf-API** to `1.2.5`. - Bumped **Bookshelf-Paper** to `2.1.54`.