# 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`.