网络音乐机(Net Music)附属模组:让大喇叭直接播放 Icecast/Shoutcast 无限直播流(幻想乡电台 Gensokyo Radio、touhou.fm、R/a/dio 等)与 .pls/.m3u 播放列表,无需自建转码服务器。
A Net Music addon that lets the Big Megaphone play Icecast/Shoutcast live streams (Gensokyo Radio, touhou.fm, R/a/dio, ...) and .pls/.m3u playlists directly — no transcoding server required.
⚠️ 本模组为社区第三方附属模组,与 Net Music 原作者无关、非官方作品。需要先安装 Net Music 才能使用。问题请提交到本仓库 issue 区,勿骚扰原模组作者。
- 大喇叭 URL 校验放宽:接受任意 http(s) 直播流直链(不再只认 .m3u8);
- 新增 Icecast/Shoutcast 流处理器(通过 NetMusic 官方扩展点
AudioStreamHandlerManager.registerHandler注册):- 自动剥离 ICY 元数据(Shoutcast 内嵌"正在播放"数据,不剥离会导致解码错乱);
- 断流自动重连(指数退避,最多 3 次;源站明确拒绝 HTTP 4xx 时不重试,避免触发源站 IP 限制);
- .pls / .m3u 播放列表自动解析出真实流地址;
- 无扩展名 URL(电台 mount 点)自动识别为直播流;
- 初次连接失败立即提示"播放失败",不静默无声;
- 内置预置电台(开箱即用:幻想乡电台、r/a/dio、SomaFM、Radio Paradise、Nightride FM 等 + 原版 CNR 台);
- 预设电台管理:在"选择预设电台"页面可添加 / 修改 / 删除自己的电台(存于
config/netmusiccanplayradio/stations.json,与内置预置同一列表一起翻页显示); - 断线重连 HUD 提示("网络不佳,正在重连…",防刷屏节流);
- 不改变 .m3u8(HLS)播放路径:AAC + MPEG-TS 无加密 m3u8 仍由 NetMusic 原生支持。
| 模组 | 版本 | 说明 |
|---|---|---|
| Minecraft | 1.20.1 | Java 17 |
| Forge | 47.x | ForgeGradle 6 |
| Net Music(网络音乐机) | 1.5.1+,必装 | 本模组无法脱离其运行(mods.toml 已声明 mandatory 依赖) |
服务端与客户端都需要安装。
- 确认已安装 Net Music 1.5.1+;
- 将本模组 jar 放入
mods/目录; - 游戏中放置大喇叭,在 URL 栏粘贴电台直链(如
https://stream.gensokyoradio.net/1/)或 .pls/.m3u 播放列表链接,命名后开始广播。
| 类型 | 示例 | 说明 |
|---|---|---|
| Icecast MP3 电台 | Gensokyo Radio、touhou.fm、R/a/dio、SomaFM | 最常用,直接可播 |
| Shoutcast 电台 | 带 ICY 元数据的流 | 自动剥离元数据 |
| .pls / .m3u 播放列表 | 各类电台页提供的播放列表链接 | 自动解析真实流地址 |
| HLS(.m3u8) | 自建转码服务器产出的 AAC+TS 无加密流 | 走 NetMusic 原生路径,不受影响 |
已知不支持:OGG/Opus 源(NetMusic 无对应解码器,请先经服务端 ffmpeg 转码为 MP3/AAC)、加密 HLS、B站直播流(FLV/加密 HLS,见项目 issue 区讨论)。
git clone <本仓库>
cd NetMusicCanPlayRadio
./gradlew build # 产物在 build/libs/需要 JDK 17。依赖 Net Music 1.5.1-forge+mc1.20.1 通过 Modrinth Maven 自动拉取,无需手动下载 jar。
- 挂接点:
AudioStreamHandlerManager.registerHandler(NetMusic 官方 wiki 开放的扩展 API,在FMLLoadCompleteEvent冻结列表前于 mod 构造函数注册); - 校验放宽:单个 Mixin 注入
BigMegaphoneUtil.isValidStreamUrl(remap=false),GUI / 服务端 / 预置电台过滤四处校验点一次性生效; - 优先级:Icecast 处理器优先级 50,介于 NetMusic 的 M3u8Handler(100) 与 DirectHttpHandler(0) 之间;
- 重连策略:HTTP 4xx(403/404 等源站明确拒绝)立即停止重试;仅网络层错误(超时/重置)指数退避重连,封顶 3 次——避免"重连风暴"触发源站按 IP 的连接限制(详见 docs/10);
- 预设电台管理:玩家自定义台存于
config/netmusiccanplayradio/stations.json([{"name":"…","url":"…"}]),由 Mixin 在 NetMusic 的BigMegaphonePresetManager加载后合并进其列表,因此作者原生的"选择预设电台"页面(含分页)直接显示合并结果;添加/修改/删除走"管理电台"界面,写配置后重调 NetMusic 的 publicloadBundledStations()刷新。
| 分支 | MC 版本 | 加载器 | 状态 |
|---|---|---|---|
main |
1.20.1 | Forge | v0.2.0(待测试) |
1.21.1-neoforge |
1.21.1 | NeoForge | 已发布 v0.1.0 |
本项目部分代码由 AI 辅助生成,并经人工审查、测试与整合。AI 仅作为开发辅助工具;项目设计、功能决策、测试与维护均由作者(JiltCruiy)负责。特此如实披露。
Some code in this project was generated with the assistance of AI and has been reviewed, tested, and integrated by a human. AI was used solely as a development aid; design, testing, and maintenance are the responsibility of the author (JiltCruiy). This disclosure is provided to comply with platform AI-content policies.
MIT License - 可自由使用、修改、分发,需保留版权声明。
- Net Music - 网络音乐机,由 TartaricAcid 开发(代码 BSD-3-Clause,资源 CC BY-NC-SA 4.0)
本模组不包含也不分发 Net Music 的任何代码或资源文件。