Tags
Creators
Details
Licensed GPL-3.0-only
Published 6 days ago
Updated 2 days ago
All versions
1.1.0
Release
DreamVoice 1.1.0last month 1
Uploaded by
Compatibility
Minecraft: Java Edition
26.1.2
Platforms
Paper
Purpur
Spigot
Required content
Changes
Changelog 1.1.0
🔊 3D Spatial Audio & Speaker/Projection Enhancements
- Native 3D Positional Audio for In-Game Speakers:
- Migrated speaker audio playback from flat
StaticAudioChannelwith manual gain curves toLocationalAudioChannel. - Speakers now feature full 3D spatialization (OpenAL / HRTF, stereo panning, pitch, and distance roll-off) centered directly on the speaker's in-game block location.
- Migrated speaker audio playback from flat
- Native 3D Positional Audio for Voice Projections (Body Anchors):
- Upgraded voice projections (
routeOwnerVoiceToAnchorListeners) toLocationalAudioChannelpositioned at the projection's anchor location. - Players standing around an active projection/anchor (e.g. security cameras, drones, intercoms) now hear the projected voice with accurate 3D spatialization and attenuation.
- Upgraded voice projections (
- Elimination of Multi-Channel Audio Crackling & Popping:
- Resolved Opus filter corruption occurring when multiple speakers or projections transmit concurrently.
- Replaced shared/global
OpusEncoderinstances with discrete, stateful stream encoders keyed per(Source : Sender : Listener)pipeline. - Deterministic channel UUIDs (
UUID.nameUUIDFromBytes) ensure each unique audio stream retains its own independent Opus prediction state without inter-channel bleed. - Added automatic encoder lifecycle cleanup on player disconnect and inactivity timeouts (30 seconds).
⚙️ Configuration & Live Reload Synchronization
- Fixed Live Config Reload (
/dreamvoice reload config):- Fixed an issue where reloading the configuration reloaded
Codexin memory but failed to notify or update the activeVoiceWallService. /dreamvoice reload confignow dynamically applies changes toVoiceWallactive state (enabled), modes (STRICT_BLOCK,REALISTIC, etc.) andairDampinglive without requiring a server reboot.- Updated
Codex.VoiceWall.getEffectiveMode()so disabling VoiceWall ("enabled": false) properly forcesVoiceWallMode.OFFeven if an explicit mode string is present in the configuration.
- Fixed an issue where reloading the configuration reloaded
- Modernized Default
config.jsonTemplate:- Aligned default
config.jsonwith the full modernCodexobject graph (includingdiffraction,categories,overrides,reverb, andairDamping). - Strict JSON handling in
CodexServiceImpl: eliminates stale fallback behaviors and ensures consistency between file configuration and in-game diagnostic commands (/voicewall info).
- Aligned default
🧱 VoiceWall & Acoustic Physics
- Fixed Wall Attenuation Gain Inversion & Clipping Elimination:
- Fixed a critical DSP bug where wall attenuation formula
Math.pow(10.0, totalDbLoss / 20.0)amplified audio signals (e.g. +15 dB to +40 dB boost, up to 100x magnification) instead of attenuating them (-totalDbLoss / 20.0). - Added sample clamping
Math.clamp(..., Short.MIN_VALUE, Short.MAX_VALUE)and soft-knee anti-clipping limiting (AudioLimiter) to prevent digital saturation crackling/popping when voice passes through walls. - Full 3D Spatialization Intact: Retained native Simple Voice Chat
EntitySoundPackettransmission, preserving client-side OpenAL HRTF, angle, distance, and 3D spatial panning.
- Fixed a critical DSP bug where wall attenuation formula
- Dedicated Stream Codecs for VoiceWall Audio:
- Replaced shared receiver codecs with isolated
OpusDecoderandOpusEncoderpipelines keyed per(senderUuid : receiverUUID)stream. - Prevents Opus Linear Predictive Coding (LPC) state desynchronization when multiple speakers talk simultaneously or within wall attenuation fields.
- Added automatic cleanup of inactive stream codecs upon player quit and inactivity timeouts (30s).
- Replaced shared receiver codecs with isolated
- Acoustic Raycast Partial Attenuation:
- Updated speaker and projection wall occlusion checks from binary block checks (
ray.isBlocked()) to line-of-sight analysis (!ray.lineOfSight()). - Allows material-based sound dampening and wall absorption through blocks instead of completely cutting off audio prematurely.
- Updated speaker and projection wall occlusion checks from binary block checks (
- Codex Data Mutability:
- Removed
finalfromCodex.distanceand added@Setter/@AllArgsConstructorannotations to support runtime updates and proper deserialization.
- Removed
🎙️ Global Audio Codec Isolation & Crackling Elimination
- Wiretaps & Hidden Bugs (
VoiceWiretapService):- Isolated Opus encoders per
(wiretapUuid : senderUuid)stream to eliminate multi-speaker corruption around listening bugs. - Deterministic channel UUIDs (
UUID.nameUUIDFromBytes) ensure channel stability across player reconnections. - Automatic stream encoder disposal on player quit and inactivity.
- Isolated Opus encoders per
- Walkie-Talkie Radio (
VoiceRadioService):- Isolated radio Opus encoders per sender to prevent frame predictor corruption between radio broadcasts and other audio features.
- Fixed Roger Beep audio injection: temporary tone generator encoder is cleanly closed without colliding with ongoing player voice streams.
- Deterministic channel UUIDs for static radio channels.
- Point-to-Point Transmitters (
VoiceTransmitterService):- Dedicated transmitter encoders per speaker and deterministic static channel IDs.
- Complete lifecycle tracking with automatic inactivity cleanup.
- Voice Cassette Recording (
VoiceRecordingService):- Dedicated recording encoders per speaker protected by
AudioLimiter. - Guaranteed safe native Opus decoder closure in
finallyblocks during cassette playback frame stitching.
- Dedicated recording encoders per speaker protected by
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:WRYhkDTs:wnOtyWSX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:WRYhkDTs:wnOtyWSX"
}

