What's in this release (1.3.0 Beta)
Performance optimizations (behavior unchanged; less main-thread work):
- Detector / apply — Rail and bulb updates spread across ticks (rails → ready center → deferred rail → title → cruise → bulbs). Cart from the event is reused through apply steps to skip entity lookup.
- Deferred rail state — No longer cancelled on every detector hit; only replaced when starting a new deferred task, so multi-rail rules and follow-up detectors are not disrupted.
- Detector scope — Logic runs only for the block that is actually a rail (at most one call per rail block); when the throttle allows, both current and previous block (to/from) are considered.
- Throttling — Detector at most every 250 ms per cart; READY velocity correction throttled (250 ms) and tuned so carts stay centered with less jitter.
- Cart chunk loading — Cart list fetched async; main thread only applies tickets. Current-dim loading skipped when a player is in the cart. Portal (other-dim) lookup unchanged; its DB work is now async. Chunk updates every 40 ticks; portal lookup every 4th run.
- Terminal polling — DB and RELEASE logic run async; main thread only does cart/block checks and applies bulb list. Immediate rail states applied in one go; only bulb updates are batched.
Compatibility — 1.21–1.21.11 (tested with 1.21.11). All 1.2.0 features (route cache, routes menu, portal linking, multi-rail rules, etc.) unchanged.