# Fairy Lights 8.0.11 - Stability, Colors, Placement
## Critical Fixes
### Server Watchdog Hang on Chunk Unload
- Guarded `HangingLightsConnection.removeLight()` with `world.isLoaded(pos)` so unload no longer triggers blocking chunk loads / deadlocks.
- Soft-teardown on fastener remove (`noDrop()` before connection teardown) to avoid item rain and world mutation during unload.
### Placement Tether / Player Fling
- Aborting a place (e.g. hotbar switch) now fully tears down the connection instead of only stripping the player’s incoming map entry.
- `PlayerFastener` is ticked from `ServerEventHandler` and stored via NeoForge data attachments (replacing the fragile `WeakHashMap`).
## Visual / Item Fixes
### Invisible Black / Gray (and EMI icons)
- Normalize dye/string/item tints to opaque ARGB for Minecraft 1.21 ItemColor.
- Sync `COLOR` from connection logic on pickup; restore `fl_backup_color` for pennant patterns; opaque seasonal/ClientProxy fallbacks.
### Light Block Toggle
- Migrated dead `LightBlock.use()` to `useItemOn` / `useWithoutItem` and sync BE `on` with `LIT`.
## Recipes / Data
- Restored `color_changing_light` recipe (was a width-0 stub) and wire `"colors"` through crafting + `ColorChangingBehavior`.
- Fixed `light_twinkle` crafting to persist the `twinkle` component; tooltip/name helpers read components correctly.
- Fixed malformed NeoForge tag JSON for `#c:ingots/iron` and `#c:nuggets/gold`.
## Performance
- Stop per-tick `sendBlockUpdated` for dynamic catenaries (only sync when explicitly dirty).
- Strip hot-path info logging (letter/pennant/tinsel/JEI).
## Other
- Pick-block (`getCloneItemStack`) updated for NeoForge 1.21.1.
- Fastener renderer provides infinite render bounds so long connections cull correctly.
- `settings.gradle` NeoForge plugin repo URL uses `/releases`.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }