音乐播放器
JoyMart 内置了一个后台音乐播放器,通过 Minecraft 原生的音符盒声音播放 NBS(Note Block Studio)歌曲 —— 无需任何资源包。
工作原理
- 歌曲从
plugins/JoyMart/music/目录中的.nbs文件加载 NbsSong解析器提取节拍以及每个 tick 的音符- 每位玩家拥有一个独立的定时任务,按歌曲节拍一次推进一个 NBS tick
- 每个音符通过
Player#playSound使用 Minecraft 内置的音符盒声音播放(如BLOCK_NOTE_BLOCK_HARP、BLOCK_NOTE_BLOCK_BASS等) - 每位玩家拥有各自的定时任务和播放状态,因此不同玩家可以同时收听不同的歌曲
NBS 节拍与 tick 调度
- NBS 节拍以 ticks-per-second × 100 的形式存储(即
1000表示 10 tps) - 服务器以 20 ticks/秒 运行,因此一个 NBS tick 需要
2000 / tempo个服务器 tick - 该比值会四舍五入到最接近的整数 tick,并作为
runTaskTimer的周期使用 - 节拍不超过 2000(20 tps)时为精确值;更高的节拍会略微变慢(每个 NBS tick 向上取整为 1 个服务器 tick)
注意
由于服务器固定以 20 ticks/秒 运行,节拍高于 2000(即 20 tps)的歌曲无法被精确还原,实际播放速度会略低于设定值。
添加歌曲
- 获取
.nbs文件(使用 Open Note Block Studio 或类似工具创建) - 将它们放入
plugins/JoyMart/music/目录 - 重启服务器,或运行
/gba reload - 玩家可从 JoyMart 主菜单访问音乐播放器 GUI
音乐播放器 GUI
- 从 JoyMart 主菜单进入
- 显示已加载的歌曲列表
- 玩家可以独立地播放、停止和切换歌曲
- 如果 NBS 文件内没有标题,歌曲名称会回退为文件名(不含扩展名)
提示
每位玩家的播放状态相互独立,因此多名玩家可同时收听不同的曲目,互不影响。
灵感来源
音乐播放器的灵感来自 JukeBox - Music Plugin。JoyMart 的实现是完全独立从头编写的 —— NBS 解析、每玩家调度以及 GUI 均为原创代码。