
DreamVoice
Advanced spatial audio framework for Paper, Fabric & Simple Voice Chat. Featuring soundproof acoustic physics (VoiceWall), 3D visualizer, spatial speakers, covert wiretaps, radio channels, playable audio cassettes, DSP filters & speech AI.
Оцените первым
144
3
Список изменений
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.
Файлы
DreamVoice-fabric-2.0.1.jar(29.65 MiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
2.0.1+fabric
Загрузчики
Fabric
Версии игры
26.1.2
Загрузок
85
Дата публикации
30.09.2026
