### Added
- **Optimized World Storage Scanner:** Complete rewrite with intelligent chunk caching and dirty tracking.
- Chunk-level caching with configurable expiry (default: 600 seconds).
- Event-driven dirty tracking — only re-scans chunks where containers were modified.
- Disk persistence for cache data across server restarts.
- Empty inventory skip optimization for faster scanning.
- Material set-based O(1) container type filtering.
### Fixed
- **GUI Click Handling (MC 1.21+):** Fixed critical bug where market GUI items could be taken and clicks weren't registering on Minecraft 1.21+ servers.
- Root cause: MC 1.21 changed `InventoryView` from a class to an interface, breaking reflection-based title extraction.
- Solution: Implemented UUID-based GUI state tracking with `GuiType` enum instead of unreliable title matching.
- All GUI types (Market, Details, Deliveries, Holdings) now properly track player state.
### Configuration
New cache settings under `price-world-storage`:
```yaml
price-world-storage:
cache:
enabled: true
chunk-expiry-seconds: 600
full-refresh-cycles: 5
persist-to-disk: true
```
### Technical
- `GuiType` enum: `MARKET`, `DETAILS`, `DELIVERIES`, `HOLDINGS`, `NONE`
- `openGuis: MutableMap<UUID, GuiType>` tracks which GUI each player has open
- `ChunkScanCache` data class for per-chunk scan results
- Event listeners for `InventoryCloseEvent`, `BlockPlaceEvent`, `BlockBreakEvent`, `ChunkUnloadEvent`
- Cache file: `plugins/TheEndex/scanner-cache.json`
### Performance
- Reduced redundant container scanning by 80-90% on stable servers
- Chunk caching eliminates repeated full scans of unchanged areas
- Dirty tracking ensures only modified chunks are re-scanned
- Memory-efficient with automatic cache cleanup on chunk unload