Simply Speakers 0.8.3 - Fabric 1.20.1
Curse Maven Snippet
What's new
Simply Speakers 0.8.3
Changed
- Centralized Server Playback Management: Listener tracking and range scanning moved out of
SpeakerBlockEntityandProxySpeakerBlockEntityinto a newServerPlaybackManagerdriven byServerSpeakerRegistry, closing issue #10. - Persistent Emitter Snapshots: The registry now retains
ServerEmitterdescriptors (position, network key, range, volume, dropoff, proxy flag, active intent) that survive chunk unloads, so speaker lifecycle is decoupled from chunk loading state. - Central Subscription Indexes: The manager maintains bidirectional player-to-emitter and emitter-to-player mappings and dispatches
PlayAudioPacketS2C/StopAudioPacketS2Cdirectly, with the sharedServerPlaybackPlanner(backed byListenerRangePolicy) deciding every subscription transition. - Dimension-Transition Safety: Scans iterate all online players and compare dimensions, so moving between dimensions cleanly stops subscriptions instead of leaving orphaned audio.
- Sable Compatibility Preserved: The 1.21.1 manager resolves emitter and listener positions through
SpeakerSpatialResolver.resolveLogical, so moving plot bodies with speakers keep working.
Fixed
- Unloaded Speaker Chunk Continuity: A speaker whose vanilla chunk unloads while players remain in range no longer strands listeners; the centralized scan keeps playing and, crucially, sends
StopAudioPacketS2Cwhen those listeners eventually leave range. - Orphaned Listener Lifecycle: Listener exit no longer depends on a ticking block entity, fixing stuck audio when speaker chunks unload on servers with large (128–512 block) speaker ranges.
- Natural EOF While Unloaded: Non-looping audio now ends server-side in the centralized scan even when the speaker's chunk is unloaded, instead of playing indefinitely.
- Clean Player Disconnects: Disconnecting players are purged from all subscription indexes immediately, preventing stale hysteresis state across reconnects.
Development
- Pure Decision Core: Added
ServerPlaybackPlannerandServerEmitterto version-independent common code, with unit tests covering unloaded-chunk continuity, exit hysteresis, dimension changes, disconnects, and emitter shutdown (issue #10 roadmap item 6). - Structural Wiring Tests: Added
ServerPlaybackManagerWiringTestverifying manager/registry/loader wiring across all supported versions, and updated existing BE wiring tests to enforce delegation to the central manager. - Block Entity Simplification:
SpeakerBlockEntityandProxySpeakerBlockEntityno longer holdlisteningPlayerssets or per-BE scan loops; they only publish emitter snapshots and delegate stop dispatch.
This mod has no additional files

