跳到正文

AllMusic_Lyrics

作者:B_shanmao

Addon mod for AllMusic Client3 by color_yr.Automatically fetches synced lyrics from NetEase Cloud Music / LRCLIB and displays them on screen when songs play.

收藏

截图

介绍

中文介绍正在准备中,下面暂时显示原文。

Addon mod for AllMusic Client3 by color_yr(https://github.com/Coloryr/AllMusic) .
Automatically fetches synced lyrics from NetEase Cloud Music / LRCLIB and displays them on screen when songs play.

The current lyrics fetching has the following log chains:

Normal Path (with Song ID)

[AllMusic3]正在解析歌曲[123456]     ← Caught by ClientReceiveMessageEvents.GAME

  ↓ LyricsDisplay.onSongParsing()
  ↓ LyricsFetcher.fetchById(123456)  → Direct LRC fetch
  ↓ Log: "后台获取歌词 ID=123456"
  ↓ Log: "歌词已缓存: 35 行 (等待播放)"
[AllMusic3]正在播放:歌名 | 歌手     ← Caught by ClientReceiveMessageEvents.GAME

  ↓ LyricsDisplay.onNowPlaying()
  ↓ pendingLines has cache → use directly
  ↓ Log: "正在播放: 歌名 | 歌手"
  ↓ Log: "歌词显示已激活: 歌名 | 歌手"

Fallback Path (No Cache, Search by Name)

If the “parsing song” message never appeared, and “now playing” arrives directly:

[AllMusic3]正在播放:歌名 | 歌手

  ↓ LyricsDisplay.onNowPlaying()
  ↓ pendingLines == null → fallback to search
  ↓ Log: "无缓存,用歌名搜索..."
  ↓ LyricsFetcher.fetch(message)
    ├─ Match NOW_PLAYING regex → extract "歌名 | 歌手"
    ├─ Split: name="歌名", artist="歌手"
    ├─ neteaseSearch("歌名", "歌手")  → search API
    ├─ neteaseSearch("歌名", "")       → name only (fallback)
    └─ lrclib("歌名", "歌手")          → LRCLIB (final fallback)

Third Path (packDo Fallback)

AllMusicCore.packDo(INFO, "歌名 | 歌手")   ← Mixin TAIL interception

  ↓ LyricsDisplay.onNowPlaying(data)
  ↓ Same search flow as above

Key Regex (LyricsFetcher)

| Regex | Matches | Action |
|——-|———|——–|
| 正在解析歌曲[::]?\s*(\d+) | 正在解析歌曲[123456] | Direct ID fetch |
| music\.163\.com.*[/#]song\?id=(\d+) | NetEase URL | Direct ID fetch |
| 正在播放[::]\s*(.+?)(?:\s+by:.*)?$ | 正在播放:Song Name | Search by name |
|Search log keywords: |搜索歌词:, 网易云搜索, LRCLIB, ✘ 未找到歌词.| |

Currently, this module does not generate English log files.


中文用户:

AllMusic Client 歌词附属模组。
自动获取网易云/LRCLIB同步歌词并显示在HUD

当前歌词获取有以下日志链路:

正常路径(有歌曲ID)

[AllMusic3]正在解析歌曲[123456]     ← ClientReceiveMessageEvents.GAME 捕获

  ↓ LyricsDisplay.onSongParsing()
  
  ↓ LyricsFetcher.fetchById(123456)  → 直接获取 LRC
  
  ↓ 日志: "后台获取歌词 ID=123456"
  
  ↓ 日志: "歌词已缓存: 35 行 (等待播放)"
[AllMusic3]正在播放:歌名 | 歌手     ← ClientReceiveMessageEvents.GAME 捕获

  ↓ LyricsDisplay.onNowPlaying()
  
  ↓ pendingLines 有缓存 → 直接使用

  ↓ 日志: "正在播放: 歌名 | 歌手"
  
  ↓ 日志: "歌词显示已激活: 歌名 | 歌手"

后备路径(无缓存,歌名搜索)
如果”正在解析歌曲”消息没出现,直接来了”正在播放”:

[AllMusic3]正在播放:歌名 | 歌手

  ↓ LyricsDisplay.onNowPlaying()
  
  ↓ pendingLines == null → 走搜索
  
  ↓ 日志: "无缓存,用歌名搜索..."
  
  ↓ LyricsFetcher.fetch(message)
  
    ├─ 匹配 NOW_PLAYING 正则 → 提取 "歌名 | 歌手"    
    ├─ 拆分: name="歌名", artist="歌手"    
    ├─ neteaseSearch("歌名", "歌手")  → 搜索API    
    ├─ neteaseSearch("歌名", "")       → 仅歌名(后备)    
    └─ lrclib("歌名", "歌手")          → LRCLIB(最终后备)

第三路径(packDo 后备)

AllMusicCore.packDo(INFO, "歌名 | 歌手")   ← Mixin TAIL 拦截

  ↓ LyricsDisplay.onNowPlaying(data)
  
  ↓ 同上搜索流程

关键正则(LyricsFetcher)

|正则 |匹配内容 |动作|
|——-|———|——–|
|正在解析歌曲[::]?\s*(\d+)|正在解析歌曲[123456]|直接ID获取|
|music\.163\.com.*[/#]song\?id=(\d+)|网易云URL|直接ID获取|
|正在播放[::]\s*(.+?)(?:\s+by:.*)?$|正在播放:歌名|歌名搜索|
|搜索的日志关键词:|搜索歌词:、网易云搜索、LRCLIB、✘ 未找到歌词。| |

常见问题

AllMusic_Lyrics 支持哪些 Minecraft 版本?

AllMusic_Lyrics 支持 Minecraft Java 版 26.1–26.3,共 5 个版本,可用的加载器:Fabric。下载时注意选择和你游戏版本一致的文件。

AllMusic_Lyrics 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:仅客户端。

评论

登录后评论和评分