Appearance
广播板
文档版本:基于 2026-06-01 代码分析
概述
广播板(BroadcastPad)是扩展模组的一个 2×1 面板方块,支持管理员配置广播时长、冷却时长和音量,通过 Simple Voice Chat API 将管理员的语音实时广播到全服玩家。具有 READY → BROADCASTING → COOLDOWN 三状态机。
核心概念
三状态机
mermaid
stateDiagram-v2
[*] --> READY : 初始状态
READY --> BROADCASTING : 右键激活
BROADCASTING --> COOLDOWN : 广播结束
COOLDOWN --> READY : 冷却结束| 状态 | 行为 |
|---|---|
| READY | 等待激活,方块正常显示 |
| BROADCASTING | 语音广播中,播放开始音效 |
| COOLDOWN | 冷却中,不可使用,显示剩余冷却时间 |
可配置参数
| 参数 | 说明 |
|---|---|
| 广播时长 | 一次广播的最大持续时间 |
| 冷却时长 | 广播结束后需要等待的冷却时间 |
| 音量百分比 | 广播音量(0-100%) |
架构设计
mermaid
sequenceDiagram
participant Admin as 管理员
participant BE as BroadcastPadBlockEntity
participant Voice as BroadcastPadVoiceManager
participant API as SimpleVoiceChatAPI
participant All as 全服玩家
Admin->>BE: 右键方块
BE->>BE: 从READY切换为BROADCASTING
BE->>Voice: 开始语音广播
Voice->>API: 创建广播音频通道
API->>All: 广播管理员语音
Note over BE: tick监听广播时长
BE->>BE: 广播结束→COOLDOWN
BE->>Voice: 停止语音广播
Voice->>API: 关闭广播通道
Note over BE: tick监听冷却时长
BE->>BE: 冷却结束→READY关键文件
| 文件 | 说明 |
|---|---|
com/chenxi/chenxi_rfm_addition/common/block/BroadcastPadBlock.java | 2×1 面板方块 |
com/chenxi/chenxi_rfm_addition/common/block/BroadcastPadBlockEntity.java | 状态机+语音桥接 |
com/chenxi/chenxi_rfm_addition/server/voice/BroadcastPadVoiceManager.java | 语音广播管理器 |
com/chenxi/chenxi_rfm_addition/client/screen/BroadcastPadConfigScreen.java | 配置 GUI |
com/chenxi/chenxi_rfm_addition/client/render/BroadcastPadBlockEntityRenderer.java | 两行文本渲染器 |
com/chenxi/chenxi_rfm_addition/client/voice/BroadcastPadVoiceClientHooks.java | OpenAL 增益控制 |
com/chenxi/chenxi_rfm_addition/common/network/payload/broadcast/ | 4 个 Payload |
关键流程
配置管理
- 右键方块(手持核心模组的
config_tool)→ 打开配置 GUI - GUI 提供三个滑块:广播时长、冷却时长、音量百分比
- 配置通过
UpdateBroadcastPadConfigPayload同步到服务端 - 服务端
BroadcastPadPayloadHandler更新 BlockEntity 并标记 dirty
语音广播
BroadcastPadBlockEntity通过VoiceBridge接口与BroadcastPadVoiceManager通信- 广播开始/停止时发送
SyncBroadcastPadVoiceStartPayload/SyncBroadcastPadVoiceStopPayload给全服 - 播放
broadcast_start/broadcast_end音效
注意事项
- 需要 Simple Voice Chat 模组支持
- 使用核心模组的
config_tool物品右键打开配置 GUI - 广播期间方块显示"广播中"文字,冷却期间显示剩余时间
- 内部通过
VoiceBridge接口解耦,方块实体不直接依赖语音 API