Tags
Creators
Details
Licensed GPL-3.0-only
Published 6 days ago
Updated 2 days ago
All versions
๐ Unified
๐ก Fabric Network Packet System & Inter-Mod Protocols (
๐๏ธ Real-Time 3D Acoustic Visualizer Mode (
๐ Public Hearing & Attenuation API (
๐ข Physical Broadcast System (
๐ ๏ธ Interactive Configuration Mode & Tool (
๐ Complete Localization & Translation System (
2.0.1+fabric
Release
DreamVoice Fabric 2.0.12 days ago 9
Uploaded by
Compatibility
Minecraft: Java Edition
26.1.2
Platform
Fabric
Supported environments
Dedicated servers only
Required content
Changes
Changelog 2.0.1
๐ Dual-Platform Engine: Paper & Fabric First-Class Support
- Multi-Module Gradle Architecture:
- Restructured the entire codebase into a clean, modern multi-module architecture:
:api: Platform-independent public interfaces, models, and events (DreamVoiceAPI,VoiceLocation,Speaker,VoiceWiretap,VoiceEvent, etc.).:common: Platform-agnostic core acoustic engine (DreamVoiceCommon), DSP audio pipelines, raycasting logic, persistence, and service implementations.:paper: Paper / Purpur 26.1.2+ server plugin (DreamVoice-paper-2.0.1.jar) utilizing Paperweight and shadow jar packaging.:fabric: Fabric 26.1.2+ server mod (DreamVoice-fabric-2.0.1.jar) built with Fabric Loom 1.17, Fabric API, and Cloud Fabric commands.
- Restructured the entire codebase into a clean, modern multi-module architecture:
- Platform Abstraction Layer (
VoicePlatform):- Implemented
PaperVoicePlatformandFabricVoicePlatformbridging server scheduling (sync/async/timer), entity tracking, block occlusion raycasts, particle dispatches, and loggers. - Native multiplatform coordinates via
VoiceLocation, allowing services to operate identically regardless of whether Bukkit or Minecraft ServerLevel is running underneath.
- Implemented
- Dual Configuration Directories:
- Automatically loads and saves data in standard platform locations:
- Paper:
plugins/DreamVoice/ - Fabric:
config/dreamvoice/
- Paper:
- Automatically loads and saves data in standard platform locations:
๐ Unified DreamVoiceAPI Service Locator
- Universal API Entrypoint:
- Unified entry point
DreamVoiceAPI.get()accessible from both Paper plugins and Fabric mods without platform-specific boilerplate. - Direct accessor methods for all acoustic services:
api.speakerService(): 3D spatial speakers, dual-channel audio, entity tracking.api.wallService(): VoiceWall raycast occlusion, material decibel loss, diffraction.api.roomService(): Soundproof Cuboid zones and reverberation presets.api.recordingService(): Zero-CPU Opus capture, timeline slicing, interactive cassettes.api.radioService(): Frequency channels, analog band-pass filters, push-to-talk clicks.api.wiretapService(): Covert listening bugs, mobile entity bugs, live eavesdropping.api.projectionService(): Decoupled voice anchors, CCTV feeds, bilateral audio.api.transmitterService(): Point-to-point directional voice transmitters.api.broadcastService(): Server-wide and localized podium/intercom broadcasts.api.filterService(): File-first DSP filters, hot-compilation, and stack management.api.speechService(): Offline Vosk keyword spotting and transcription stations.api.playerService(): Voice player wrappers (VPlayer) and connection metadata.api.persistenceService(): Asynchronous disk flushes and auto-save coordination.api.voiceService(): Direct Simple Voice Chat bridge and raw packet dispatch.
- Unified entry point
๐ก Fabric Network Packet System & Inter-Mod Protocols (@DreamPacket)
- Annotation-Driven Networking Pipeline:
- Introduced
@DreamPacketand@DreamServerReceiverwith automatic classpath scanning viaPacketAnnotationProcessorandServerPacketAnnotationProcessor. - Registered all packet codecs with Fabric's
PayloadTypeRegistryunder thedreamvoice:*namespace.
- Introduced
- Preshot Server-Bound & Client-Bound Packet Catalog (40+ Packets):
- Configuration & Visualizer:
ServerBoundRequestConfigSyncPacket,ClientBoundConfigSyncPacket,ServerBoundVisualizerTogglePacket,ClientBoundVisualizerSyncPacket. - 3D Spatial Speakers:
ServerBoundSpeakerCreatePacket,ServerBoundSpeakerDeletePacket,ServerBoundSpeakerLinkPacket,ServerBoundSpeakerUnlinkPacket,ServerBoundSpeakerPlaySoundPacket,ServerBoundSpeakerStopSoundPacket,ServerBoundSpeakerUpdatePacket,ClientBoundSpeakerSyncPacket. - Wiretaps & Surveillance:
ServerBoundWiretapCreatePacket,ServerBoundWiretapDeletePacket,ServerBoundWiretapSubscribePacket,ServerBoundWiretapUnsubscribePacket,ClientBoundWiretapSyncPacket. - Radios & Walkie-Talkies:
ServerBoundRadioCreatePacket,ServerBoundRadioJoinPacket,ServerBoundRadioLeavePacket,ClientBoundRadioSyncPacket. - Audio Recordings & Cassettes:
ServerBoundRecordingStartPacket,ServerBoundRecordingStopPacket,ServerBoundCassetteCreatePacket,ServerBoundRecordingPlayPacket,ServerBoundRecordingStopPlayPacket,ClientBoundRecordingSyncPacket. - DSP Voice Filters:
ServerBoundFilterApplyPacket,ServerBoundFilterRemovePacket,ServerBoundFilterClearPacket,ServerBoundFilterTogglePacket,ClientBoundFilterSyncPacket. - Acoustic Rooms:
ServerBoundRoomCreatePacket,ServerBoundRoomDeletePacket,ServerBoundRoomUpdatePacket,ClientBoundRoomSyncPacket. - Transmitters & Projections:
ServerBoundTransmitterCreatePacket,ServerBoundTransmitterDeletePacket,ServerBoundTransmitterTogglePacket,ClientBoundTransmitterSyncPacket,ServerBoundProjectionCreatePacket,ServerBoundProjectionDeletePacket,ClientBoundProjectionSyncPacket.
- Configuration & Visualizer:
- Zero-Dependency Inter-Mod Integration:
- Allows external survival mods (craftable megaphones, spy bugs, walkie-talkies, tape recorders) and client HUD mods to control DreamVoice subsystems via JSON custom payloads without hard compile-time dependencies.
โก Dual-Platform Event Bus (Bukkit & Fabric)
- Unified Voice Events:
- All event classes extend
VoiceEventand feature self-dispatching via.callEvent().
- All event classes extend
- Platform Event Dispatching:
- Paper: Dispatched natively through Bukkit's
PluginManagerfor@EventHandlerlisteners. - Fabric: Dispatched through
DreamVoiceEvents.VOICE_EVENT.register(...)callback hook.
- Paper: Dispatched natively through Bukkit's
- Event Coverage:
- Cancellable hooks across all lifecycle actions:
SpeakerLinkPlayerEvent,SpeakerPlaySoundEvent,RadioChannelJoinEvent,CassetteCreateEvent,CassettePlayEvent,VoiceRecordingStartEvent,VoiceFilterApplyEvent,VoiceWallOcclusionEvent,VoiceKeywordSpokenEvent,WiretapSubscribeEvent, etc.
- Cancellable hooks across all lifecycle actions:
๐๏ธ Real-Time 3D Acoustic Visualizer Mode (/voice visualizer)
- Interactive Acoustic Raycasting:
- Added
/voice visualizer [toggle|on|off](permission:dreamvoice.visualizer). - Renders 3D particle rays illustrating line-of-sight paths, wall collision impacts, aperture diffraction bypasses around doors/openings, and speaker audible coverage spheres.
- Added
- Performance-Conscious Hand-Held Requirement:
- Particle streams are rendered only when the inspecting player has the visualizer tool (default:
COMPASS) equipped in their main hand, preventing client lag and visual clutter during normal gameplay.
- Particle streams are rendered only when the inspecting player has the visualizer tool (default:
- Synchronized Visualizer State:
- State is automatically synced to Fabric clients via
ServerBoundVisualizerTogglePacketandClientBoundVisualizerSyncPacket.
- State is automatically synced to Fabric clients via
๐๏ธ VoiceWiretap x VoiceProjection Integration
- Cross-Module Audio Propagation:
- Covert wiretap microphones (
VoiceWiretap) now dynamically support and intercept voices emitted through active voice projections (VoiceProjection).
- Covert wiretap microphones (
- Dual-Origin Spatial Audio:
- Physical Emission (
isEmitVoiceAtPlayer): Microphones in proximity to the player's physical body capture the direct voice as normal. - Anchor Emission (
isEmitVoiceAtAnchor): Microphones in proximity to the projection's anchor location (projection.getAnchorLocation()) intercept the projected voice in real time. - Acoustic Occlusion & Wall Physics: Line-of-sight raycasting (
VoiceRayCast) and material attenuation (VoiceWall) are accurately simulated between the anchor coordinates and the wiretap. - Filter Inheritance: Voice projections configured with custom filters (e.g., megaphone, radio, disguise) pass their processed audio downstream to wiretap listeners.
- Physical Emission (
๐ Public Hearing & Attenuation API (VoiceService & VoiceWallService)
- Unified Audibility Check (
canHear):- Introduced
voiceService.canHear(speaker, listener)(withPlayerandUUIDoverloads). - Evaluates whether a listener can hear a speaker across all communication channels:
- Direct point-to-point audio transmitters (
VoiceTransmitterService). - Shared radio frequency channels (
VoiceRadioService). - Proximity spatial voice chat (
canHearProximity).
- Direct point-to-point audio transmitters (
- Introduced
- Full-Condition Proximity Audibility (
canHearProximity):- Introduced
voiceService.canHearProximity(speaker, listener)(withPlayerandUUIDoverloads). - Validates active Simple Voice Chat connections for both players.
- Enforces life states (
ALIVE,DEAD,SPECTATE). - Evaluates voice projection constraints (
emitVoiceAtPlayer,emitVoiceAtAnchor,hearPlayerEnvironment). - Respects configured distance limits (
Codex.getEffectiveDistance()). - Computes total dB attenuation across
VoiceWallmaterials and isolatedVoiceRoomcuboids; returnsfalseif sound is blocked ($\ge 99.0\text{ dB}$).
- Introduced
- Direct Decibel Attenuation Metrics:
- Added
voiceService.getEffectiveAttenuationDb(speaker, listener)to measure total acoustic dB loss between two players. - Added
voiceWallService.getAttenuationDb(speaker, listener)for querying raw wall and room isolation losses.
- Added
๐ข Physical Broadcast System (VoiceBroadcastService)
- Podium & Intercom Broadcast Points:
- Introduced
VoiceBroadcastServiceand/voice broadcastcommand suite. - Players speaking within a configured capture radius around a location or entity automatically have their voice routed to connected speakers.
- Introduced
- Flexible Audio Routing:
- All Speakers Routing (
allSpeakers = true): Broadcasts to every registered speaker across the server. - Selective Target Speakers: Link specific speakers to a broadcast point (
/voice broadcast link <name> <speaker>).
- All Speakers Routing (
- On/Off Toggle & Filter Chaining:
- Broadcast points can be toggled on/off on demand (
/voice broadcast toggle <name>). - Optional custom audio filters can be chained to the broadcast (e.g. intercom distortion, PA megaphone filter).
- Broadcast points can be toggled on/off on demand (
- Modular Persistence:
- Stored under
modules/broadcast/with automatic saving on server shutdown.
- Stored under
๐ ๏ธ Interactive Configuration Mode & Tool (/voice config)
- Interactive Configuration Tool (
/voice tool):- Added
/voice configand/voice toolcommands (usingECHO_SHARDas the physical tool to prevent conflicts with WorldEdit wands). - Config tool supports interactive targeting: entities, blocks, or air/gaze fallback.
- Added
- Full InvUI Management GUIs Across All Audio Subsystems:
- Dashboard (
VoiceConfigMainGUI): Visual dashboard covering all audio subsystems with target coordinates/entity indicators. - Speakers Manager (
SpeakerListGUI,SpeakerEditGUI): Browse speakers, adjust distance/range with +/- buttons, toggle mode (GLOBAL / RESTRICTED), teleport, or create new speakers at current target. - Broadcast Manager (
BroadcastListGUI,BroadcastEditGUI,BroadcastLinkSpeakersGUI): Browse broadcast points, toggle active state (ON/OFF), adjust radius, toggle all-speakers routing, visually link/unlink individual speakers, cycle filters, or create new points. - Wiretaps Manager (
WiretapListGUI,WiretapEditGUI): Inspect covert bugs, toggle live eavesdropping, teleport, or deploy new bugs. - Acoustic Rooms Inspector (
RoomListGUI): View room dimensions, reverberation presets, and acoustic isolation percentages. - Radio Channels Manager (
RadioListGUI): Browse frequencies, view active listener counts, and tune in/disconnect directly. - Transmitters Manager (
TransmitterListGUI): Toggle transmitter mode, view linked receiver players, unlink or configure receivers. - Projections Inspector (
ProjectionListGUI): Inspect active player projections, emission modes (anchor/player), and teleport to anchor coordinates. - Acoustic & Wall Engine (
AcousticInspectGUI): Live toggle for VoiceWall, cycle occlusion modes (Realistic/Strict/Off), toggle air damping, particle raycast debug, and inspect acoustic properties of targeted blocks/materials.
- Dashboard (
๐ Complete Localization & Translation System (LangService)
- Adventure Component.translatable Integration:
- All command messages, items (Cassette, Config Tool), and InvUI configuration menus now use
Component.translatable(...)backed by MiniMessage translation stores. - Eliminated all hardcoded
TextDecoration(<!italic>,<b>) andNamedTextColorcalls across UI classes; all styling is defined directly within language files.
- All command messages, items (Cassette, Config Tool), and InvUI configuration menus now use
- Bilingual English (Default) & French Support:
- Populated
lang-dreamvoice.jsonwith comprehensive translation keys, gradients, formatting tags, and arguments. - Configured default plugin language to English (
EN) with full client-side French (FR) fallback.
- Populated
๐ฆ Build System & Dependency Centralization
- Centralized
gradle.properties:- Consolidated all plugin, toolchain, and dependency versions into
gradle.properties:minecraft_version = 26.1.2paper_api_version = 26.1.2.build.+fabric_api_version = 0.155.0+26.1.2loader_version = 0.19.3loom_version = 1.17-SNAPSHOTshadow_version = 9.4.1voicechat_api_version = 2.6.20vosk_version = 0.3.45cloud_fabric_version = 2.0.0-beta.16java_version = 25
- Streamlined
settings.gradleand all subproject build files (api,common,paper,fabric) to reference properties exclusively.
- Consolidated all plugin, toolchain, and dependency versions into
- CI/CD Workflow Modernization:
- Updated GitHub Actions workflows (
publish.yml,javadoc.yml,discord-announce.yml) for dual-platform publishing to GitHub Packages and Modrinth.
- Updated GitHub Actions workflows (
๐ Bug Fixes & Stability
- Projection Audio Crackling & Transcoding Artifacts:
- Eliminated audio crackling and high-frequency buzzing occurring when speaking while in voice projection:
- Removed discontinuous chunk-level 1-pole lowpass smoothing filter that injected 50 Hz boundary discontinuities into audio packets.
- Prevented multi-decoding of incoming microphone Opus packets on shared decoders across listeners.
- Implemented
encoder.resetState()on speech pauses (> 400ms) to prevent Opus predictor state corruption upon resuming speech. - Bypassed PCM decoding and lossy Opus transcoding completely when no wall occlusion or voice filters are present, routing raw Opus packets directly to 3D locational audio channels.
- Eliminated audio crackling and high-frequency buzzing occurring when speaking while in voice projection:
- Speech Recognizer Crash on Reload:
- Resolved
kaldi::KaldiFatalError(Can't add speaker model to already running recognizer) triggered during/voice speech reloadby safely closing and cycling active Vosk recognizer instances before applying updated keyword grammars.
- Resolved
- CI / Discord Webhook Release Workflow:
- Fixed Python variable scope (
brand_color) in.github/workflows/discord-announce.yml. - Added role mention
<@&1546913649308995738>to automated Discord release broadcasts.
- Fixed Python variable scope (
๐งน Code Quality & Conventions
- Removed redundant control-flow braces on single statements (
if,else,for) acrossfabric,paper,common, andapi. - Cleaned up inline fully-qualified class names in favor of clean header imports.
- Standardized
final vardeclaration across all local variable scopes.
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:lAmVqIgF"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:WRYhkDTs:lAmVqIgF"
}

