Tags
Creators
Details
Licensed MIT
Published 7 months ago
Updated last month
All versions
1.0.4
Release
SpatialAudioSystem 1.0.45 months ago 220
Uploaded by
Compatibility
Minecraft: Java Edition
1.21.1
Platform
NeoForge
Supported environments
Client and server
Changes
Japanese version: CHANGELOG.md
[1.0.4] - 2026-05-05
Major Change (Mod rename / ID change)
- Renamed from "Station Sound System" to "Spatial Audio System"
Repositioned as a general-purpose spatial audio playback mod rather than a railway-station-specific mod.
- Mod ID:
stationsoundsystem→spatialaudiosystem - Display name:
Station Sound System→Spatial Audio System - Java root package:
com.example.stationsoundsystem→com.spatialaudiosystem - Main class:
StationSoundSystem→SpatialAudioSystem - Resource locations (
assets/,data/) and the GitHub repository have been renamed accordingly. - Recording media, playback devices, and range boards from 1.0.3 or earlier are not recognized in worlds upgraded to 1.0.4. Either start a new world or replace the affected items / blocks.
- Mod ID:
Public API for Integration (for addon mods)
- New package
belugalab.sas.apiadded as a stable API surface that will not be repackaged across versions. Internal packagecom.spatialaudiosystem.*is subject to repackaging, so addon mods must always reference thebelugalab.sas.apipackage. belugalab.sas.api.SasApi— facade classisInstalled— whether SAS is loadedisRecordingMedium,isRangeBoard— item type checkshasAudio,getAudioFileName,getAudioFormat,getAudioId— recording medium metadatahasRange,getRangePos1,getRangePos2,getAttenuationRanges— range board metadataloadAudio,loadAudioFromMedium— server-side audio binary loadingplayAudio— server-side broadcast playbackstopAudio— stop playback at a position
belugalab.sas.api.PlaybackEndedEvent(NeoForge event)- Fired when playback finishes. Mods implementing chained / sequential playback can hook this without polling.
- The handler in
PlaybackControlPayloadalso posts this event on stop notifications, so it coversplayAudiocalls that bypassPlaybackDeviceBlockEntity(e.g. addon-driven dynamic playback).
Bug Fixes
- Fixed audio continuing to play on the title screen after leaving a world
Added a new
ClientLifecycleHandlerthat subscribes toClientPlayerNetworkEvent.LoggingOutandLevelEvent.Unload, callingAudioManager.stopAll()on either event. In-flightClientAudioChunkPayloadchunk sessions are also cleared, so leftover sessions do not bleed into a subsequent login.
Changelog
English version: CHANGELOG-EN.md
[1.0.4] - 2026-05-05
重要な変更 (Mod のリネーム / ID 変更)
- Mod 名を「Station Sound System」から「Spatial Audio System」に変更
鉄道駅専用ではなく汎用的な空間音響再生 Mod として位置づけを明確化。
- Mod ID:
stationsoundsystem→spatialaudiosystem - 表示名:
Station Sound System→Spatial Audio System - Java パッケージ root:
com.example.stationsoundsystem→com.spatialaudiosystem - メインクラス:
StationSoundSystem→SpatialAudioSystem - リソース ID (
assets/、data/)・GitHub リポジトリ名も同名に変更 - 既存ワールドから 1.0.3 以前の記録媒体・再生装置・範囲指定ボードを引き継ぐと認識されないので、新規ワールドへ移行するか、各アイテム / ブロックを置き直す必要があります
- Mod ID:
公開 API の追加 (他 Mod 連携用)
- 新パッケージ
belugalab.sas.apiを追加。バージョン間で安定した API 表面として維持されます (内部パッケージcom.spatialaudiosystem.*はリパッケージされるため、addon mod は必ずこちらを参照してください)。 belugalab.sas.api.SasApi— facade クラスisInstalled— SAS が読み込まれているかisRecordingMedium,isRangeBoard— アイテム種別判定hasAudio,getAudioFileName,getAudioFormat,getAudioId— 記録媒体メタデータhasRange,getRangePos1,getRangePos2,getAttenuationRanges— 範囲指定ボードのメタデータloadAudio,loadAudioFromMedium— サーバー側の音声バイナリ読み込みplayAudio— サーバー側からブロードキャスト再生stopAudio— 指定位置の再生停止
belugalab.sas.api.PlaybackEndedEvent(NeoForge event)- 再生完了時に発火。連鎖再生 / シーケンシャル再生を実装する mod が polling 不要で連結できる
PlaybackControlPayloadの停止通知ハンドラからも発火するため、PlaybackDeviceBlockEntityを介さないplayAudio呼び出し (= addon mod 側で動的に再生する場合) もカバー
Bug Fixes
- ワールドを抜けた後にタイトル画面で音声が鳴り続ける問題を修正
新規
ClientLifecycleHandlerでClientPlayerNetworkEvent.LoggingOutとLevelEvent.Unloadを購読し、AudioManager.stopAll()を呼ぶように変更。送受信中のClientAudioChunkPayloadチャンクセッションも一括クリアするため、再ログイン後に旧セッションの残骸が混ざる問題も併せて解消。
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:4rsUhTWv:g1ZrQBdV"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4rsUhTWv:g1ZrQBdV"
}

