Verity

更新日志

Verity-cn 的版本更新记录。

v3.5.3

2026-11-01最新

背包像素播放器 · 检测更新 · 网页读正文 · DeepSeek 搜索

新增

  • 背包左侧多了竖排页签(背包 / 音乐):用的是背包左上角配方书按钮的原版贴图,紧贴面板左缘竖排,里面是像素风的背包与音符小图标;点音符页签,背包界面就地换成像素风迷你播放器(不新开窗口),再点背包页签切回。播放器按原始像素 1:1 绘制,随背包一起缩放,带播放 / 评论 / 歌词三页,歌名、歌手、专辑过长会跑马灯,歌词点哪一行就跳到哪一句,底栏有歌时显示平台官方图标与平台名。
  • 配置 → 账户页加上平台图标:左上角账户选择按钮和展开的账户列表都换成对应平台的官方图标(网易云 / 酷狗概念版 / QQ音乐),一眼就能分清当前选的是哪个平台。
  • 网易云账户卡显示村龄与会员等级:账户名下方多显示「村龄 N 年 / N 天」(按注册天数折算);右侧会员标签区分 VIP 与 SVIP(SVIP 为金色),昵称颜色也随等级变化——非会员白色、VIP 珊瑚红、SVIP 金色。
  • 关于页可以检测更新了:版本号右侧新增「检测更新」按钮,检测期间显示「检测中…」且不可重复点击;发现新版本会在当前界面弹出提示(背景是模糊的原界面),可直接点「去更新」打开官网下载页,点「取消」或提示框外则保持原样。另在「配置 → 关于」顶部新增「启动自动检测更新」开关(默认开启),开着时每次进入主菜单会静默检查一次。
  • 首次启动会显示用户协议:不再要求配置任何东西,读完协议点「同意」即可进入主菜单,点「不同意并退出」会直接关闭游戏。协议要点:本模组不收集任何隐私信息,配置与登录凭据都只存本地;唯一外发的只有音乐接口调用统计(平台 / 接口、成功失败、耗时),不含账号、Cookie、Token、歌单或播放记录。
  • Verity 会打开网页读正文了:搜索结果摘要不够用(具体数字、日期、表格、文档),或你直接把网址发给它时,它会打开那一页读正文再回答。该功能独立于联网搜索,不需要填 Key,联网搜索关着也能用;出于安全考虑,本机与内网地址不会被打开。
  • 联网搜索新增 DeepSeek 通道:在「配置 → AI 设置 → 联网搜索」填入 DeepSeek API Key 即可启用,留空则不启用;未填 Key 或调用失败时会在游戏内提示原因。

修改

  • 首次启动的「初始化配置」界面已移除:进入主菜单后不再弹出配置引导,开场视频看完或跳过后也直接回到主菜单,所有设置仍可在「配置」界面里修改。
  • 酷狗概念版账户卡不再显示会员状态:该平台的会员状态接口取不到,登录后只显示昵称与等级,不再显示「VIP 会员 / 非会员」;账户本身仍可在账户选择器里正常使用。

修复

  • 修复首次启动用户协议页「不同意并退出」点击无反应的问题,现在会正常关闭游戏。
  • 自检页 TTS / STT 卡的两个按钮现在会一起进入「检测中」:点「检测」时「播放测试」「录音检测」同样置灰不可点,避免检测与播放 / 录音同时跑。
  • 多平台点歌不再「串台」:每次搜索 / 歌单 / 专辑 / 红心 / 推荐都会生成自己的结果编号,之前搜过的平台仍可按原编号点歌(每位玩家保留最近 5 份),不会再点到别的歌或提示编号越界。
  • 酷狗 / QQ 的歌曲 ID 能直接点了:不再把这些 ID 当成网易云数字 ID 处理;用 song_id 点歌时可带上 platform,漏传时也会按 ID 形态自动识别平台。
  • 能播的歌不再被误报「无法播放」:预检会沿标准 → 较高 → 极高逐档确认,只有真的拿不到地址才报错;起流慢时改为提示「还在缓冲」。
  • 一个平台放不了会自动换一家:原平台因 VIP / 版权拿不到地址时,会用歌名 + 歌手去另外两家找同一首(同名且歌手匹配才切换),并在回复里说明换过平台。

v3.5.2

2026-10-25

Fish Audio 语音 · 分平台搜歌 · TTS 播放测试 · Shiftcore Recalling v2

新增

  • 语音合成内置服务商新增 Fish Audio:Key、模型名与声音 ID 可分别填写,模型名旁有「模型文档」按钮,声音 ID 旁有「搜索声音ID」可按关键词搜索并分页、点一条自动填入;直连不通时可打开「启用代理」,开启后 Fish Audio 的请求都走代理、关掉即直连
  • 角色改为按平台分别搜歌:网易云、酷狗概念版、QQ 音乐拆成三个独立搜索,说「去网易云找…」就按指定平台搜,没指定时用你登录着或开启着的那个,实在不确定会问一句;结果仍带平台标识,播放照旧用结果序号
  • 「播放最喜欢的歌」明确标注为网易云音乐的歌曲 ID,不会再让人误以为是酷狗或 QQ 音乐的 ID
  • 自检页 TTS 新增「播放测试」:点一下就用当前配置真播一句「你好,我是 Verity。这是一段语音播放测试。」,听到声音即配置成功;播放期间「播放测试」与「检测」都会置灰显示「播放中…」,播完自动恢复
  • 大模型内置服务商新增 Shiftcore Recalling v2:填上 Key、用「获取模型列表」挑一个模型即可,走标准 OpenAI 兼容接口

修复

  • Fish Audio「检测通过却听不到声音」:播放与检测改用同一种方式取完整段音频,不再只拿到被截断的一小段
  • 播放测试失败会写明具体原因:直接显示 HTTP 状态、返回内容为空、音频设备不可用等,不再只有「30 秒内未开始播放」
  • Fish Audio 开启代理后不再报 403:合成、自检与声音搜索都带上正常的浏览器标识,代理开或关都能正常走
  • 「播放测试」不再只有第一次出声:首次合成成功后记住这段示例音频,同样配置再点直接重播,改了 Key、端点或参考音色后自动重新合成
  • 播放测试会同步检测状态:听到声音后 TTS 卡片从「未检测」变成「✓ 播放测试通过」,30 秒没出声则显示「✗ 播放测试没有出声」
  • 音色克隆模式下播放测试不出声:参考音频改为带 `data:audio/mpeg;base64,` 前缀的正确格式,播放测试也挪到后台执行,界面不再卡住
  • MiMo 音色克隆恢复正常:发给小米的请求模型与参考音频格式按官方接口改对,音色克隆重新可用
  • 克隆失败不再「悄悄不出声」:没填 Key、参考音频太大、网络返回错误、返回里没有音频等情况都会用提示条告知具体原因
  • 参考音频不可用时的提示改对了:由「已切换为 Base URL 模式」改为「已切换为默认音色」
  • 移除从未生效的音色克隆「语速」选项:存档里的旧值会在下次保存时自动清除

v3.5.1

2026-10-19

Cloudflare Workers AI · 网易云扫码登录 · 免 Key 联网搜索 · 游玩模式按世界保存

新增

  • 网易云音乐支持扫码登录:账户页的网易云卡片点一下出码,用手机上的网易云 App 扫码并在手机上确认授权,登录后自动同步昵称、头像、VIP 状态和等级;原来的 Cookies 登录方式仍然保留
  • 联网搜索新增 Bing 通道,内置、免 Key、开箱即用,那一行只有说明文字、没有输入框
  • 语音识别内置服务商新增 AssemblyAI / Gladia / Speechmatics,各只需填一个 Key,界面不显示 Model 行,自检页会按各家协议真跑一次识别
  • 内置语音识别的小米模型固定为 `mimo-v2.5-asr`,界面不显示 Model 行,请求不再带空模型
  • 自检页 STT 新增「录音检测」:录下你说的话再送进 STT,结果区直接显示识别出的文字,麦克风或语种设置有问题一眼能看出来
  • 语音合成内置服务商新增 Deepgram:填 Key 与音色 ID(可点「获取音色ID」拉取),不显示 Model 行,走官方流式接口
  • 语音合成内置服务商新增 ElevenLabs:Model 固定 `eleven_multilingual_v2`,音色 ID 可点选,走官方流式接口
  • 语音合成内置服务商新增 Cartesia:Model 固定 `sonic-3.6`,音色 ID 可点选,走官方流式接口
  • MiMo 音色可以点着选了:新增「选择音色」按钮,冰糖、茉莉、苏打、白桦、Mia、Chloe、Milo、Dean 一键填入
  • 内置服务商新增 Cloudflare Workers AI:填 Account ID 与 API Token 即可,可点「获取模型列表」,回复逐字流式输出
  • 游玩模式改为按世界保存:创建世界界面的模式按钮只作用于即将创建的世界,选择世界列表会标出每个世界自己的模式,老存档首次进入时按当时的默认模式记录一次

修改

  • 个人账户页整页重做:改成卡片式布局,账户选择下拉收进左上角,账户信息集中在一张资料卡,网易云的「服务地址」单独成卡,新增「我喜欢的音乐」「我的歌单」数量卡,改动改完即生效
  • 音乐账号登录体验补齐:扫码登录补齐完整状态流转(出码 → 等待扫码 → 已扫码等待授权 → 正在登录中),登录失败立刻停掉二维码,手机号验证码登录拿到验证码后倒计时
  • 音乐播放与查询更顺手:各平台播放统一使用标准音质,点到 VIP / 付费歌曲会弹提示,AI 查歌会带上来自哪个平台,停止播放等提示显示歌名,新增歌曲信息 / 我的歌单 / 我喜欢的音乐查询,歌词优先逐字显示
  • 模型下载更稳:直连 HuggingFace 经常超时、下不动,现在下载统一走更稳的中转通道,模型详情卡片不再显示多余的中转前缀
  • 音色克隆改成小米自己的开关:内置服务商选 MiMo 后面板里出现「音色克隆」开关,老配置会自动迁移,别的服务商不出现这个开关
  • 「自检」页改版:每个检测项各自独立成卡,检测失败会展开完整报错(含原因链)并可点击复制,结果逐行展开,检测中显示已等待秒数
  • 小窗口下的配置页排版:854×480 这类窗口里标题与副标题、标签与灰色说明、输入框高度、左侧导航与关于页卡片一并修正
  • 所有 AI 请求统一走流式:上下文压缩和自检也走同一条通道,不会再出现「对话能用、压缩或自检却失败」
  • 语音合成去掉「启用流式响应」开关,始终走流式,配置文件里对应的 `ttsStream` 一项也已删除
  • 日志页的长日志不再被截断:自动换行完整显示,滚动按像素计算不会点错行、不会滚过头,点某一行仍复制整条原文

修复

  • 「自定义」语音配好了却不出声:现在会按你填的地址以 OpenAI 兼容格式(`/audio/speech`)发请求
  • Cartesia 语音自检通过、游戏里却不出声:流式长度未知的 WAV 改按实际到手字节数播放,解析或播放失败会在日志页留下明确错误
  • 酷狗概念版扫码授权完成后界面没反应:授权完成后会正常拉取并显示账号信息
  • 酷狗扫码出现「假登录」(闪一下又变回未登录):只有手机端真正确认授权后才判定登录成功
  • 网易云扫码登录后提示「登录态无效 / 已过期」:登录状态只保留真正需要的凭据字段,重进游戏不再失效
  • QQ 音乐走微信登录后头像一直是企鹅:微信渠道改用对应的渠道占位头像与名称,账号类型标签按实际渠道显示
  • 退出存档后聊天面板(CLI)不刷新:退出世界 / 断开连接 / 进入新世界都会清掉面板内容、滚动位置与上下文计数,并在新内容到达前保持收起
  • 「接管聊天栏 = 关闭」时消息会被多弹一次提示:关闭模式完全不接管,只走原版聊天栏;「混合」模式只在面板真正显示时转发提示
  • 「获取模型列表」一直转圈、面板永远弹不出来(Our Free Model):改为先立刻列出清单,再在后台逐个实测并显示「实测中 5/12」进度,不可用的模型会被移出或标注「地区受限」
  • 内置服务商「Our Free Model」全部请求失败:上游调整了接入方式,本模组已同步,恢复可用
  • Cloudflare 填好凭据却提示 `HTTP 401 · api key 无效`:请求被错误地发往别家服务商,已修正
  • 模型下载卡片打开后,下层的「保存 / 重置」还能点、而且盖在卡片上面:卡片打开时整层界面被真正遮住
  • 「HuggingFace 实时数据」经常 `request timed out`:超时放宽到 20 秒、最多自动重试 3 次,下载同样带重试并继续支持断点续传
  • 存档该是 CN 版、回复却是恐怖风格、极限黑暗也照常生效:根因是模式没有跟着存档走,已随「游玩模式按世界保存」修复
  • 在配置页点「重置」或「不保存退出」会把游玩模式改回原版:已修复,这两项现在不会碰游玩模式
  • 主菜单「黑屏」选项选了没效果:已修复,现在真的会黑
  • 创建世界界面还挂着「(新建)」字样、说明文字里露出 `**` 星号:按钮简化为「Verity 模式:CN版」,悬浮说明只讲两个模式的区别

已知问题

  • 已创建的世界暂时不能在游戏内改模式,只能删掉 `saves/<世界名>/verity/mode.txt` 让它重新按默认值记录;后续会补一个游戏内入口
  • Cloudflare 免费套餐不是所有模型都能用,部分模型会返回 `403 not available on the Workers Free plan`,换一个模型即可

v3.5

2026-09-13

自绘配置界面 · 零前置依赖 · 感知升级 · 内置凑企鹅 TTS

新增

  • `mods.toml` 的 `[[mods]]` `updateJSONURL`,指向仓库根目录 `update.json` 的 raw 链接
  • `update.json`,含 `homepage` 与 `promos`(`1.20.1-latest` / `1.20.1-recommended` 均为 `3.5`)
  • `VerityLog` `warn(String, Throwable)` / `warn(Throwable)` 重载
  • jar 根目录新增 `logo.png` 与 `icon.png`(由 `smiley_icon_transparent.png` 缩到 512²)
  • 模型「使用声明」弹窗新增约 170ms 出场动画(复用 `mdlModalP`),播完才执行动作
  • 确认弹窗新增入场/出场动画(`openConfirm` / `closeConfirm` / `confirmP`,入场 220ms、出场 170ms)
  • 重置成功提示:`resetAllConfig()` 落盘后显示 toast「已重置为默认配置」
  • 右上角「保存」左侧新增「重置」按钮 `resetBtnBox`,点击弹自绘确认(`confirmKind = 3`,取消 / 重置,重置用危险红 `C_DESTR`)
  • 重置语义:非即时项还原为 `ConfigValue.getDefault()` 后直接 `SPEC.save()` 并刷新快照
  • 声明正文新增滚动条,支持滚轮与拖拽(复用 `drawBar`,几何统一走 `mdlDiscGeom`)
  • `不同意`(描边)/ `同意并下载`(主色)两个按钮
  • 保存成功 toast「配置已保存」,`doSaveAll()` 的「保存并退出」「保存并进入编辑器」路径同样生效
  • 有未保存改动时点「歌词效果编辑」新增三选一确认框:取消 / 保存并进入编辑器 / 不保存进入编辑器
  • 头部带最右端新增「保存」按钮,无改动时置灰不可用
  • 未保存退出的自绘确认弹窗:取消 / 保存并退出 / 退出(丢弃改动)
  • `PersonaEditorScreen` Ctrl+A/C/V/X 与 Shift + 方向键 / Home / End 扩选(带选区高亮)
  • `VerityConfig.Mem`,暴露与 `ConfigValue` 同名的 `get()` / `set()` 承载运行时内存值
  • 通用页新增「功能性提示」开关(配置键 `functionalHint`,默认开),统一控制功能未启用与规则未命中的 toast
  • `VerityEntity.bounceOffEntities` 支持撞生物水平反射(弹性 0.6)与被投掷物命中时叠加飞行方向冲量
  • 5 tick 冷却与水平速度上限 2.0,避免重叠期间反复触发或越弹越快
  • `VerityLlmSession` `actualContextChars`、`setActualContextChars()` 与 `actualContextTokens()`
  • `VerityLlmSession` `sessionChars` 取代 `contextChars`,进世界清零并按存档消息长度累加
  • 配置页「原版(恐怖)模式」板块新增「极限黑暗」开关(说明标注仅原版生效)
  • NCM `ncm_playlist_songs` 动作,按歌单 id 取歌曲列表并返回可直接喂给 `ncm_play` 的 `song_id`
  • `ncm_playlist_songs` 参数 `playlist_id` / `limit`(默认 100、上限 200),多人模式禁用、未登录提示填 cookie
  • `get_player_health` 返回值扩展为血量/上限、饥饿值(n/20) 与全部状态效果(名称、等级、剩余秒数)
  • AI设置·其它 「允许 Verity 执行指令」开关(`VerityConfig.ALLOW_COMMANDS`,默认关闭)
  • 开关开启后工具列表才出现 `run_command`,用玩家自身的 `CommandSourceStack` 执行,不额外提权
  • CLI 面板支持鼠标滚轮翻历史(每格 3 行,偏移夹在 `[0, total-cap]`),新增 `ChatScreenMixin` 转发 `mouseScrolled`
  • 底栏上下文环占用计入正在流出的内容(新增 `liveTokens()`,约 4 字符/token 估算)
  • 思考内容新增省略号前导符(三个 1px 点),工具调用仍为 3x3 小方块
  • CN版新增「自定义人设」开关与 `PersonaEditorScreen` 编辑器(自绘多行输入,自动折行并随内容长高)
  • CN版新增专属配置 `CORES_CUSTOM_PERSONA` 与 `CORES_CUSTOM_PERSONA_ENABLED`,与原版 `CUSTOM_PERSONA` 独立
  • 自定义人设启用且非空时取代内置的中性助手身份,其文本中的恐怖内容不做拦截
  • 创建世界界面在「允许作弊」下方新增「Verity 模式:原版/CN版」切换按钮,写入 `VerityConfig.PLAY_MODE`
  • AI设置新增分组「其它 · 游戏内表现」,承接「下落时叫声」选择器
  • `PersonaHelper.karmaDisposition()` 公共 helper,两套人格提示词共用
  • 思考期间连按两次 Esc 停止思考:首次在面板给出提示,2 秒内再按即生效且不再打开暂停菜单
  • 通用页新增「CLI 面板」下拉:关闭 / 混合(默认)/ 始终
  • 「始终」模式新增 `ClientChatHook`,把聊天消息剥掉名字前缀后镜像进面板并去重
  • `Kind.SYSTEM` 与 `VerityLlmSession.proactive()`,标记 Verity 主动发起的对话
  • 内置服务商新增 Kilo(网关 `https://api.kilo.ai/api/gateway`,默认模型 `kilo-auto/free`,免密)
  • Kilo 走通用 OpenAI 请求路径(chat/completions + 三级退让),选中后配置区留空即可直接用
  • 关于页「特别感谢」新增 dsh-our-free-model 仓库链接
  • 内置服务商新增 Our Free Model(网关 `https://opencode.ai/zen/v1`,免密,清单走 `GET /models`)
  • `OurFreeModel` 类,收纳该服务商的常量、端点分流、指纹头与 chat/responses 两条 SSE 解析
  • 档位类型 `ThinkKind.BUDGET`(精简/均衡/深思)与唯一需填的配置 `LLM_BUILTIN_OURFREE_MODEL`
  • `checkLlmOurFree()` 与 `compressWithOurFree()`,自检与压缩上下文复用 `OurFreeModel.send()`
  • `send()` `quiet` 重载,旁路请求不再往聊天面板推进流式内容
  • START/SYNC 包增加 `timestampMs`(START 另加 `durationMs`),位置语义改为某时刻的歌曲进度
  • `streamPlay` 改为真正的 HTTP Range Seek:探测文件总长后按比例换算字节起点并向前留安全区
  • Range 响应为非 206 时自动退回整流播放,避免 CDN 不支持 Range 时崩溃
  • JIP 全链路日志(服务端补发、Range 起流、帧校准等 10 行)镜像进游戏内日志页 `VerityLog`
  • 客户端每次收到同步包新增一条 DEBUG 日志 `[ncm] 同步偏差 Nms(本机 X / 服务端 Y)`
  • `NcmClientPlayer` 补「收到 START」「跳过客户端那一路」「起流失败」三条 `VerityLog`
  • 音乐块首次绘制时输出一条 INFO 几何日志(`musicTop / blockH / ph / foldT / guiW / guiH`)
  • `EmojiGlyphProvider` / `EmojiFonts` / `FontManagerMixin`:给 `minecraft:default` 与 `verity:terminal` 追加系统 emoji 字形提供器(stb 烤 glyf 轮廓,单色)
  • 构建期依赖 fastutil-8.5.9.jar 至 `dev/tools/libs/forge/`(仅编译期,不打包)
  • 歌词空行改为三点:水平排开的正圆(20 段顶点扇拼接),点径随歌词字号缩放,锚定触发空行的歌词行
  • 毫秒四段动画:淡入 180ms → 三点依次 pulse → 900ms 呼吸 → 300ms 淡出,空档短于 1600ms 走压缩时序
  • 空行圆点阈值配置 `ncmLyricGapDotThresholdMs`,默认 1500ms
  • `LyricEditorScreen.drawPreviewLyric` 复用同一个 `drawGapDotsPublic`,编辑器与游戏内所见一致
  • 两句歌词空档 ≥ 4s 时在正中画 3 个竖排圆点,按等待进度依次淡入(`GAP_DOT_THRESHOLD_MS=4000`)
  • HUD(`LyricHudRenderer`)与编辑器预览(`drawPreviewLyric`)共用 `drawGapDots` 同一实现
  • `LyricHudRenderer.prevNonEmpty/nextNonEmpty`,跨空文本行定位真正的上一句与下一句
  • `SkinManager.restoreBuiltinTextures()`,切回内置皮肤时还原 16 个实体贴图 RL
  • `probeCookieValid()` 探测 `/login/status`,三态区分 cookie 有效 / 明确无效 / 判不了
  • 播放中取不到歌词时统一显示「(伴奏)」占位(待播色,0.75 透明度)
  • 宽屏 / 窄屏切换改为 `wideT` 插值重排动画,静止时几何与改动前一致
  • `NcmHelper.parseYrc()` 解析逐字歌词,仅对含逐字的歌自动启用,不进配置项
  • `LyricLine.wordStart[]/wordChar[]` 与同步包紧凑串 `encodeWords`/`decodeWords`,超 32000 字节则丢逐字重发整行版
  • 逐字渲染 `drawLyricLineW/drawScaledTextW`,编辑器预览走 `drawLineWordPublic` 与 HUD 同源
  • `matchYrc()` 按文本完全一致将逐字挂到 lrc 行,同文本行用 1500ms 窗口消歧
  • 激活色 / 待播色各增「渐变开关」与「渐变终点色」,渲染新增 `LyricHudRenderer.drawLyricLineG` 逐字横向渐变
  • 面板标题行右端增「宽屏 / 窄屏」按钮,宽屏时参数行两列重排,超屏时列宽整体缩
  • 配置 `ncmLyricActiveGradient`、`ncmLyricActiveColor2`、`ncmLyricPreviewGradient`、`ncmLyricPreviewColor2`
  • 配置 `ncmLyricInfoNameColor`(A1A1AA)、`ncmLyricInfoArtistColor`(71717A),歌名 / 歌手颜色可配
  • 编辑器行表由固定 `ROWS` 常量改为 `buildRowKinds()` 动态生成,取色器目标扩到 6 个
  • 面板底部折叠条,折叠后只留标题行,面板高度 330 → 66(`shownRows()`/`paramsBlockH()` 收口)
  • 新选项「显示歌曲信息」与「信息字号」滑杆,歌名在上歌手在下,判定框不框这两行
  • 配置 `ncmLyricShowInfo`(bool, false) / `ncmLyricInfoFontSize`(int, 60)
  • ID 输入框默认值 `570340213`,以灰色 hint 显示,输入即消失
  • `NcmHelper.active*()` 九个统一播放状态读取入口
  • `SpeedHelper.setConfigValueNow(name, value)`:同步反射写入,不经去抖队列
  • `LyricHudRenderer.advanceState()` 与 `sampleStatePublic()`,供编辑器每帧主动调用
  • `SpeedHelper.configReadOk()` 与打开时的配置快照 `opened`
  • ID 输入框改用原版 `EditBox` 承载,保留自绘 shadcn 外框
  • `setFilter` 限制 ID 为 ≤20 位数字,粘贴同样过滤
  • ID 框按键路由:回车点歌、Tab/Esc 收回聚焦,其余转发给 `EditBox`
  • 拖拽歌词时的 x/y 贯穿参考线:吸附轴换 `C_OK` 绿实线并加粗,吸附阈值 `SNAP_PX = 6`(过 `s()`)
  • 面板底部简易音乐控制:播放/暂停、`曲名 · 歌手`、可拖进度条与时间、ID 输入框与「点歌」
  • `NcmHelper.uiStatus() / uiTogglePause() / uiSeek(ms) / uiPlayById(id)` 门面,与游戏内点歌同一实现
  • 进入歌词编辑界面的 toast:单人提示已暂停、多人提示不会暂停
  • `LyricHudRenderer.isAnimatingPublic() / animProgressPublic() / prevLineIndexPublic() / easeInOutPublic()`
  • 取色器底部可编辑字段:HEX 仅收 `0-9A-F`(≤6 位)、RGB 仅收数字(0-255),逐字符即时刷新 HSV
  • 退格、回车/Tab 提交、Esc 两级收回(先退字段聚焦、再关取色器)
  • `TOP_PAD = 6`,行高按 `可用高 − TOP_PAD − PAD` 平分,下方各行整体上移
  • `SpeedHelper.flushPendingConfig()`,抽干去抖写入队列,供改参数后立刻落盘使用
  • `SpeedHelper.currentNcmLyricParseColor(hex, fallback)`,统一编辑器与游戏内的 HEX 解析规则
  • `dev/tools/probe_download.py`,支持 `--apply` 实测并把声明体积写回条目
  • `/cnvtt` 测试命令族(selector / compress / block / toast / center),只出 UI 不产生实际效果
  • 自检页「选择文件…」按钮,用 LWJGL tinyfd 打开系统原生文件选择器
  • 关于页「特别感谢」卡片,收录 GeckoLib 与 NeteaseCloudMusicApiEnhanced
  • 本地 LLM 流式输出,用 `LlmOutput.streamMessage()` 只抽已确定台词并还原转义
  • TTS 边合成边播(`openPcmSink` / `writePcm` / `closePcm`),采样率取自 `OfflineTts.getSampleRate()`
  • 安卓端 OpenAL buffer 队列流式播放,含 24 块背压、120 秒看门狗与清理前 unqueue
  • jar 内补 `varmite/jna/android-aarch64/` 与 `android-x86-64/` 资源,并设置 `jnidispatch.path`
  • GUI 空间尺寸变化时的诊断日志,直接给出侧栏与内容宽度便于定位显示不全
  • 上下文不足选择界面,可用方向键、数字键或鼠标选择关闭本轮或三种压缩来源
  • RuntimeSmoke 「LLM 提示前缀复用」断言,校验开关复用产出逐字相同
  • LocalInferRuntime.historyCharCapacity()/contextBudgetChars(),按 n_ctx 折算字符预算
  • LocalCompress,本地模式压缩走纯算法类且不依赖 Minecraft
  • 模型加载日志新增 n_ctx / n_batch / 回复上限打印
  • persona_sample.py 与 ProbePersona.java,一键测量提示 token 数与余量
  • RuntimeSmoke 静态断言,提示余量低于 5000 token 即报错
  • LlamaCpp.complete() decodeChunked(),长提示按 ≤ n_batch 分块提交
  • 冒烟新增 LLM 长提示分批解码、大上下文长提示、连续多轮三个用例
  • stage_runtime.py write_manifests(),装配末尾统一重写各平台 FILES.txt
  • NativeRuntime.ownJar() 退路,用本类 .class 资源反推 jar
  • run.sh --restricted 模式,模拟 Forge 拿不到自身 jar 的场景
  • dev/tools/jna_repack.py,覆盖三种写法与 8 个平台的等长替换
  • dev/tools/pack_conflict_check.py,比对交付物与 libraries 462 个 jar 的包名
  • verify_shade.py 第 8 节「模块层安全」静态断言
  • stage_runtime.py 装配前 prune_stale 清理,避免死类残留
  • ggml_backend_load_all_from_path() 调用以注册官方包的插件后端
  • 本地推理原生库全部打进模组,LLM / TTS / STT 覆盖桌面与 Android arm64,Windows x86 与 Android x86_64 的 LLM 暂缺
  • NativeRuntime.java,平台探测后自动解包并按依赖顺序 System.load
  • VoskNative.java,自写 JNA 绑定 vosk C API 以适配安卓
  • dev/tools/stage_runtime.py 与 native_check.py 校验 JNI 符号兼容性
  • dev/_smoke/ 桌面侧冒烟测试,用桩类绕开 Minecraft 跑真实原生库
  • CPU 指令集门禁,无 AVX2/FMA 的 CPU 不加载本地 LLM 并在界面说明
  • 模型库页面网格滚动条:复用 `drawBar` + `thumbGeom`,几何填进 `mdlSb*` 字段,命中与拖拽读同一份
  • 网格右侧固定留 14px 给滚动条(`mdlGrid()`),避免滚动条出现/消失时卡片重排
  • 详情/下载管理弹窗关闭动画:170ms 反向缩放 + 下沉 + 遮罩淡出,出场期间吃掉点击与悬停
  • 自检在「本地推理」模式下真跑一次最小推理:LLM 走 `LocalInferRuntime.chat()`(最大 32 tokens),TTS 走 `synthesize()`,STT 走 `transcribe()`
  • 自检中 `chat()` 返回 `[本地推理] …` 提示串时按失败处理
  • 详情弹窗新增「模型介绍」:30 个模型各配一段极简 Markdown 介绍,与 HF 实时数据同处可滚动内容区
  • LLM/TTS/STT 的「模式选择」更名「推理模式」并新增「本地推理」模式
  • LLM 本地推理:模型下拉(仅列已下载 GGUF)、推理设备、最大回复长度(256/512/1024/2048)、温度、重复抑制、线程数(默认 2)
  • TTS 本地推理含模型下拉 + 推理设备 + 推理线程;STT 本地推理仅模型下拉
  • 左侧新增「模型下载」TAB(位于自检上方):首次进入弹「本地模型下载与使用须知」,同意后不再弹
  • 内置 30 个模型卡片(Qwen2.5 全系、Llama-3.2/3.1-8B、Mistral-Nemo-12B、DeepSeek-R1-Distill-7B、vits/matcha/zipvoice、vosk),支持按类型/配置等级/是否下载筛选
  • 模型详情卡:基本信息硬编码,下载量/点赞/更新时间/文件清单从 HuggingFace(hf-mirror.com 镜像)实时获取
  • 右上角「下载管理」:暂停/继续/删除、实时进度与网速,模型保存到 `config/verity/models`,支持断点续传与重启恢复
  • 本地推理运行时层:llama.cpp / sherpa-onnx / vosk 三套 JNI 加载器,原生库放模组或 `config/verity/models/runtime/` 即可启用
  • 自检与连通性检测对本地推理模式改为就绪性判定(模型已下载 + 原生库加载),不再发网络请求
  • LLM 内置服务商与自定义 Model 填写框左侧新增「获取模型列表」按钮,后台请求 OpenAI 兼容 `GET /models`,401 提示需填 Key
  • 模型选择二级菜单:整屏模糊 + 暗罩、居中面板含搜索框与单选列表(悬停高亮、选中绿点带回弹、平滑滚动 + 拖拽滚动条),底部取消/确定
  • 确定后写回对应 Model 配置(内置服务商写该服务商 Model 项,自定义写 `LLM_MODEL`),Enter=确定、ESC/点面板外=取消
  • 级别筛选 chip 行最右侧新增「全部复制」按钮,整批复制当前筛选结果并 toast 反馈条数
  • 日志行背景加斑马纹(隔行 4.5% 白)与悬停 10% 高亮,作为「行可点击」的可见反馈
  • 搜索命中的子串用 WARN 琥珀色高亮,不区分大小写
  • 左键点行复制整行,右键弹出「复制整行 / 复制消息内容」小菜单
  • 连续同级且消息模板相同的日志折叠为 `消息 ×N [展开]`,可展开/收起,组缓存按筛选/搜索/revision 失效
  • 滚动条平滑并支持按住拖拽(点轨道跳转),拖拽反算的目标量同样走缓动
  • 配置页「自检」板块重构为自定义渲染(`LCard.selfPage` → `renderSelfPage` / `selfPageClick`),三个目标各一块 52px 卡片,标题行右侧加「一键检测全部」
  • 自检改为真发最小真实请求:`VeritySelfCheck.probe` 改为 `check(Target) → Result{int state; String text}`
  • LLM 自检走 `POST {base}/chat/completions` 且必须调用 `AiAPI.applyThinking`,判定 `content` 或 `reasoning_content` 非空
  • TTS 自检:代理走 `POST {base}/audio/speech`,预设/自定义走 MiMo 形态 `chat/completions + audio{format:"wav",voice}`,音色克隆走克隆端点 + 真实参考音频
  • STT 自检:MiMo 端点走 `chat/completions + input_audio`,其余走 multipart `POST /audio/transcriptions`,测试音频为 1s/16kHz/单声道/16bit 静音 WAV
  • 自检失败文案抽响应体 `error.message` / `message` / `detail`(如 `HTTP 401 · Invalid API key`),连接超时 10s、请求 60s
  • 日志页级别筛选 chip 重设计:ALL/INFO/WARN/ERROR 改低圆角矩形(圆角 5),条数区固定宽右对齐,选中项左侧手绘对勾,切换时 260ms 阻尼正弦弹跳
  • 「详细日志」改为「标签 + 滑动开关」完整控件,带边框、悬停提亮与右侧迷你开关
  • 日志列表过渡动画:切换级别/搜索词/清空时列表从下方 5px 上滑淡入(200ms ease-out),新日志到达不触发
  • 搜索支持日志等级:输入 info/warn/error/debug 直接筛出对应级别,all = 全部
  • toast 连续触发改「替补」动画:旧提示向上滑出淡去(240ms),新提示从下方 10px 顶上
  • 账户页连通性检测期间三个结果值显示「检测中…」,完成前不残留上次值
  • LLM 内置服务商新增「Qwen 开放平台」,模型名必填且无默认填充
  • TTS / STT 内置服务商改为可选服务商(Mimo / Qwen 开放平台)
  • 「本地克隆音频」下拉框,列出 `config/verity/sample_audio` 下时长 5~30 秒的 mp3
  • Qwen 音色克隆的合成模型固定为 `qwen-audio-3.1-tts-next`
  • 配置界面左侧导航栏新增滚动条,放不下时自动出现,可拖动可点击、悬停提亮
  • `layout_check.py` 滚动条几何回归断言与 `--screen-h` 参数(默认 360)
  • TTS 模式「内置(凑企鹅)」,使用内置 CQE 中文语音模型,开箱即用、无需联网或密钥
  • 内置凑企鹅模型(CQE ONNX + jieba 词表,约 158MB)随 jar 打包,首次使用时自动解压加载
  • TTS 配置「模式选择」新增「内置(凑企鹅)」选项
  • 完全自绘配置界面(shadcn/ui 设计风格,彻底移除 Cloth Config 依赖)
  • 六大板块:通用 / 原版(恐怖)模式 / CN版(CORES)模式 / AI设置 / Verity 新生账户 / 功能配置
  • AI 设置分组树:LLM / TTS / STT(Verity 网站、内置服务商、自定义三态)及各自连通性检测
  • 账户「个人中心」页:积分余额卡片、服务端模型、连通状态、刷新 / OAuth 登录 / 登出
  • 配置界面自绘背景图(agnes-image-2.5-flash 生成)
  • 子分组折叠默认收起、L 形层级线、皮肤下拉选择(读取 skins 目录)
  • 内置 GeckoLib 动画库:不再需要单独安装前置
  • 下落时叫声可选:无 / 跟随TTS / 内置语音 / 凑企鹅
  • Verity 感知能力升级:天气(下雨/雷暴/群系/昼夜/光照)、物品深度阅读、周围环境结构探查
  • 连续多轮工具调用,复杂问题一次对话内查询多类信息
  • 全新「关于」页:版本号、项目介绍、维护状态、相关链接、贡献者致谢、开源协议说明
  • 调试模式开关:开启后输出全部行为日志,方便排查问题

修改

  • 两份 `mods.toml`(`dev/patches/META-INF/mods.toml` 生效、`dev/work/jarroot/...` 参考)同步更新
  • `updateJSONURL` 按 `main` 分支写,默认分支为 `master` 时需改为 `.../master/update.json`
  • `MemoryHelper`、`NcmHelper`、`Verity`、`ModEvents` 等处的 log4j / slf4j 改为 `VerityLog.getLogger(...)` 适配器,不再写入 `latest.log` 与控制台
  • 日志级别重划(全库 400+ 处逐条对齐,共改 56 处):10 处 ERROR→WARN、21 处 INFO→WARN、25 处 INFO→DEBUG
  • Forge「配置」入口改为并排显示 `config_help_1.png` / `config_help_2.png`(854×480,按屏宽自适应)
  • `issueTrackerURL` 改为 GitHub 仓库地址,`[[mods]] displayURL` 与 `[properties] homepage`/`github` 改为官网地址
  • 顶层 `[properties]` `veritycn`(Verity新生官网),须写在 `[[mods]]` 之前
  • `mods.toml` 版本与配置页 `ABOUT_VER` 徽章由 `3.5-beta` / `v3.5-beta` 统一改为 `v3.5`
  • 退出、进歌词编辑器、重置三个确认场景共用同一套动画与几何
  • 确认弹窗面板高度与按钮位置改为按 `confirmLabels().length` 自适应,取消写死 3 行
  • 声明弹窗尺寸改为全量 `scaleI()`(跟随 `rowScale`),并复用统一外壳 `mdlModalChrome`
  • 文案改为《模型下载与使用声明》全文,`第X条` 与 `特别说明` 自动识别为加粗小节标题
  • 标题卡(第 166–211 帧)的「Verity JE」改为「Verity-CN」,按单元格 13.82px、字形 6×8 逐像素复刻
  • 原帧备份至 `intro_video/_orig_title/`,改好的 52 帧注入 `dev/patches/assets/verity/textures/intro/`
  • 保存按钮改为在头部带垂直居中(`by = (headerH()-bh)/2`),不再挂在 “Settings” 行中线
  • 保存按钮外观改为复用统一画法 `drawBtn`:有改动为主色 `V_PRIMARY`、无改动为描边置灰 `V_OUTLINE`
  • 保存按钮尺寸 `76×26` → `64×24`(随 GUI 缩放),去掉 1.25 倍标签
  • 保存按钮 `52×18` → `76×26`(随 GUI 缩放),圆角同步变大,标签按 1.25 倍放大
  • 「不保存进入编辑器」改为先 `discardAll()` 再进编辑器,弹窗文案补「(不保存将丢弃)」
  • 歌词效果编辑的 `NCM_LYRIC_*` 共 16 项排除出延迟保存快照,不点亮保存按钮也不被丢弃还原
  • 账户页 `verityBridgeKey` 排除出延迟保存,输入或修改即刻落盘
  • 配置界面改为延迟保存,改动只写内存,`dirty()` 用快照逐项比对,仅点「保存」时 `SPEC.save()`
  • `PersonaEditorScreen` 退出不再自己落盘,改为随配置页统一保存
  • 输入框不再画 `...`,超出按整字裁切;未聚焦从头部显示,聚焦时窗口仅在光标越过边缘时滑动
  • 鼠标点击只把光标落到点到的字符,不再改动窗口
  • 输入框窗口起点改存 `visS`,只由光标推动,越过截断边缘才以最小步长挪动
  • 未聚焦时的超长显示改为 `clipMid` 中间截断,窗口两侧隐藏内容各显示一个 `...`
  • `["AI 设置"."LLM"]` 按界面四个面板重排,「选择服务商」下直接跟其待配项
  • LLM / 音乐 / CN版键名统一为 UI 标签名,去掉 `llm`、`ncm`、`cores` 调用点式前缀
  • `config/verity-client.toml` 按新键名与分组重排,Key 值保留,旧文件备份为 `verity-client.toml.pre_llm_reorg.bak`
  • `LlmMode.PRESET_FREE`、`TtsMode.MIMO`、`SttMode.MIMO` 统一改名为 `BUILTIN`
  • `llmFree*Key` 合并进 `llmBuiltin*Key`,`LLM_FREE_PROVIDER` 改为 `LLM_BUILTIN_PROVIDER`
  • 现有 `config/verity-client.toml` 已同步改名/删除,Key 值保留
  • `VerityConfig` 各项 `.define(...)` 默认值改为当前生效值(Key、`MUSIC_U`、歌词效果值除外)
  • 配置分组按游戏内 UI 页面重排,现有 `verity-client.toml` 同步重排并备份为 `verity-client.toml.pre_reorg.bak`
  • 账户页除 `verityBridgeKey` 外,用户名 / 邮箱 / 积分 / 服务端模型 / 连通性改为内存值,不再落配置
  • 关闭该开关后 LLM/TTS/STT 未启用与回复规则未命中的提醒静默,开关与规则本身照常生效
  • tick 扫描 `bounceOffEntities` 改为只处理 `LivingEntity`,投掷物不再参与逐 tick 点扫描
  • `PersonaHelper.buildCoresPrompt` 的 Allowed Faces 由中性/开心/严肃扩展为全套表情
  • CN 下 `VerityEntity` 掉落方块砸中改为友好反馈 `playCallSound("哎哟")`,原版保留原暴怒台词
  • 落地横向回弹系数 `1.35 → 1.6`,上限 `0.8 → 1.0`(`VerityEntity.lambda$causeFallDamage$2`)
  • 落地时横向速度同步补弹性(系数 1.35、上限 0.8),水平速度不大于 0.02 时不处理
  • `VerityEntity` 撞墙水平回弹系数 `0.6 → 0.8`(X/Z 各一处)
  • 落地弹跳力度由 `min(sqrt(落差)*0.22, 0.7)` 改为 `min(sqrt(落差)*0.32, 1.0)`
  • 环的轨道色改回 `FAINT`,激活段保持纯白,最小可见弧仍为 26°
  • 环的轨道色 `FAINT` 改为 `DIM`,最小可见弧 `RING_MIN_SWEEP` 14° → 26°
  • 进世界即显示真实上下文:`onPlayerJoinWorld` 调用 `MemoryHelper.primeContextEstimate()` 写入 `actualContextChars`
  • 落地、潜行右键扔出、岩浆、仙人掌、爆炸统一走 `VerityEntity.playCallSound`,按「下落时叫声」配置发声
  • 三类「被毁掉」台词改为中性中文且不再广播聊天栏,改为写入 CLI 面板的玩家行为与最终答复两行
  • 底栏环与数字统一取 `actualContextTokens()` / `contextCapacity()`,表示实际发送给 LLM 的完整上下文占比
  • 数字仍用 `contextTokens()`(本局新增),环改用 `actualContextTokens() / contextCapacity()`,`begin()` 不再清 `contextCapacity`
  • 「回应条件」勾勾再右移 1px(偏移 `+1` → `+2`)
  • 「回应条件」勾勾右移 1px(`ckX = cx + (17 - tw("✓"))/2` 再加 1)
  • `VeritySpawnScheduler` 箱中彩蛋改为同时记录玩家行为与最终答复「嘿嘿,你可关不住我~」到 CLI 面板
  • 撤销 `VeritySpawnScheduler` 与 `ChestCloseHandler` 的 CN 守卫,箱中彩蛋 CN 下恢复触发,台词改为「嘿嘿,你可关不住我~」
  • CN 版配置页顶部说明精简为一句:沿用原版配置、无恐怖变身与入夜、人格为中性的 Minecraft 助手
  • CN 下为变身、清场、极限黑暗、窗外恶魔、清村民、暴怒台词、箱子彩蛋等恐怖行为逐一加 `!isCores()` 守卫
  • `PersonaHelper.buildToolRules` 在 CN 下移除 `transform_following_day`、`forgive`、`transform_back` 动作
  • AI设置分组顺序由「记忆→回复规则→其它→皮肤」改为「记忆→回复规则→皮肤→其它」
  • `ClientChatHook` 不再把聊天镜像进面板,成就、命令反馈、系统提示与旁人发言一律转 `VerityToast`
  • 首次进世界的三条免费提示精简为一行「本模组永久免费 · 付费均为骗子! · B站 @xzy4260」
  • 底栏由「耗时+速度+缓存+上下文」精简为「耗时+上下文」(`RING_SEG=1`)
  • 上下文环行进段改用纯白,并新增最小可见弧 `RING_MIN_SWEEP=14°`
  • 玩家消息前导符由 `>` 改为像素画实心右三角 `▸`
  • CN版主动回复的「系统覆盖」提示词改为中性表述(`PersonaHelper.isCores()` 分支)
  • CN 人格提示词删去「不变身怪物、不让世界变黑」等反向叙述,只保留中性身份与关系倾向
  • 「必须喊名字」不再单列一行,改为「回应条件」组的第 4 个对勾项(`REQUIRE_VERITY`)
  • CN版人格提示词重构为中性 Minecraft 助手(`PersonaHelper.buildCoresPrompt()`),恐怖叙述分支不再参与
  • CN版人格不规定语气,情绪值照旧影响关系倾向
  • 配置界面 CN版节改为说明:当前全部继承原版(恐怖)模式配置,专属配置后续独立
  • 原版模式板块收敛为 `LLM/TTS/STT 启用`、黑化天数、击杀村民、老版物品机制四项
  • 「必须喊名字」从原版模式挪到 AI设置·回复规则,改为 `ckG` 对勾(`REQUIRE_VERITY`)
  • 本地推理时模型名不再带「本地推理 ·」前缀,统一显示本地模型名本身
  • 「始终」模式面板透明度改用原版聊天栏 200 tick 节奏:180 tick 全亮、之后 20 tick 线性淡出
  • 面板显示节奏改由 `VerityLlmSession.contentSerial` 配合 `ModClientEvents.onClientTick` 驱动
  • 主动回复改为触发即 `begin()` 会话,思考、工具调用与回复全程滚动显示,最终一句仍记为 SYSTEM
  • 思考中收到的新聊天消息直接丢弃并弹 toast「Verity 正在思考,请稍候」,与 CLI 面板开关无关
  • 「始终」模式跟随原版聊天栏的亮起时机(打开聊天栏 / 选择器 / 对话进行中 / 10 秒内有内容)
  • 「始终」模式下 `begin()` 不再清空日志,重新亮起时接着显示既有内容
  • Verity 的对话回复在「始终」模式下不再广播到原版聊天栏(`VerityLlmSession.alwaysHooked`)
  • 「始终」仅在纯单人下生效,多人环境自动降级为「混合」且不改写配置中的显示值
  • LLM/TTS/STT/音乐四项启用开关改为原版专属键 `vanilla*`,CN版后续用 `cores*` 互不干扰
  • 四项开关更名后升级会回到默认值(LLM/TTS/STT 开、音乐关),重新拨一次即可
  • AI设置的 TTS/STT 分组去掉「启用」总开关,保留真正的 TTS 选项 `TTS_STREAM`
  • 免密服务商自检 `keyState` 显示「免密」并走通用 `checkLlm`
  • 免费清单过滤 id 含 `-free` 的模型并排除走 Anthropic 线的 `union-alpha`
  • 模型探测判定:点名拒绝或 404 移出、403 标「(地区受限)」、429/5xx/超时保留、整轮全拒时全部保留
  • 免密车道不再提示填写 Key 且不显示 Key 格,地区受限行写回配置时自动剥掉标注
  • `AiAPI` 请求路径仅增加一个 `OurFreeModel.isCurrent()` 分支,其余九家代码未动
  • SYNC 纠偏由仅改 `seekOffsetMs` 改为偏差 >800ms 且距上次重对 >3s 时走 `seekTo()` 真实重开流
  • `streamPlay` 不再回写时钟,本机时钟直接映射服务端时间轴
  • 服务端广播、JIP 补发与 SYNC tick 统一携带锚点 timestamp
  • 音频线路改为先 `open`、校准完成后再 `start()`
  • `resumeSong` 由本地 `line.start()` 改为取服务端位置后走 `doSeek` 重新起流,所有人按同一位置重新入流
  • 日志页列表位移动画 key 补 `logDebugShown()`,拨「详细日志」与切换 ALL/INFO/WARN/ERROR 走同一套动画
  • `/cnv mplay`(不带 id)提示文案由「开始播放」改为「继续播放」
  • `CnvCommand.musicMsg` 统一给歌名加书名号,如「《XXX》 开始播放」
  • 「最爱的那首歌」由内置 mp3 改为网易云 2115551659,`playFavouriteSongEntry` 转调 `playSongById`
  • `/cnv mplay mygal | favorite | fav` 映射到同一 id,人格提示词改为引导其用 `ncm_play` 播放
  • 最爱歌曲的本地解码路径归一到服务端推流那条路,专用服务器侧不再有任何打开音频设备的代码
  • `VerityLog.debug()` 由「开关卡在写入前」改为「始终记录、开关只管显不显示」,缓冲淘汰优先丢最老的 DEBUG
  • `VerityToast.show` 剥掉行首且不超过 12 字符的 `[TAG]`,并删除 `[网易云]` / `[联网搜索]` 字面量
  • 多人下 `LyricEditorScreen` 不再绘制音乐控制块,`paramsBlockH()` 返回 0、鼠标命中整块跳过
  • 歌词编辑器「保存」由 `close(true)` 拆为 `saveNow()`,只写配置 + 落盘 + toast,不再退出界面
  • 多人提示文案由「游戏已暂停」改为「多人游戏 · 游戏时间仍在流逝(世界不会暂停)」
  • `/cnv` 全部子命令与 `/recoververity`、`/changekarma` 反馈改走 `CnvCommand.feedback()`:玩家出 toast,命令方块与控制台仍回聊天栏
  • `VerityToastRenderer` 重做:按 GUI 高缩放(≥480 不缩、≤240 缩到 0.88),超宽按码位折行并限制行数
  • toast 动画:单行↔单行走公共前缀滑移,任一侧折行则退化为整盒交叉淡变
  • 歌词 emoji 垂直偏移 `SHIFT_Y` 由 3.0 改为 2.2
  • 取色器拖动与输入实时写入快照 `p`(`pkLiveApply`),点空白关闭与点确定都不写配置,仅「保存并退出」落盘
  • 退出确认弹窗卡面不透明度改为 `C_CARD 0.88f`,标题行左侧补 `drawWarnIcon` 三角警告图标
  • 本模组状态与报错提示全改 `VerityToast.show`,角色台词、命令输出与带链接公告仍留聊天栏
  • emoji 渲染参数:`SIZE` 9.0 → 7.0、`SHIFT_Y` 1.0 → 4.5 → 3.0、`SHIFT_X` 0.0 → -0.9
  • emoji 字形限制白名单码位(`231A-23FA` / `2600-27BF` / `2B00-2BFF` / `1F000-1FAFF` 等),非 emoji 返回 null
  • 歌词渲染回到「上一句下去、下一句停在下面」,跨空行取非空句的 `nextNonEmpty` 与「(伴奏)」占位保留
  • 圆点观感:颜色 `0xFFFFFF` → `0xF9E9C5`,去掉 1px 黑底衬,间距系数 1.8 → 1.3,呼吸周期 900 → 1500ms
  • 圆点位置改为在上一句下方那行竖直居中,并朝上一句方向微挪 `max(1, round(textH*0.2))`
  • `hasUnsavedChanges()` 去掉残留的 `dragLive` 条件,只保留 `pLoaded && !sameAsOpened()`
  • 圆点由 2px 灰色 `0xAAAAAA` 0.6 改为 3px 白色 `0xFFFFFF` 0.85,点距加大
  • 配置文本输入框按行区分上限:cookie 行 8192、其余行 255(`textCap()`),含 Ctrl+V 路径
  • `/song/url/v1` 补发 `Cookie: MUSIC_U=…` 请求头,查询参数保留
  • 逐字填色的淡出旧行由传 `Long.MAX_VALUE` 改为传真实播放位置
  • 逐字歌词改为按字卡拉OK式连续填色,`LyricLine` 增 `wordEnd[]`,同步包每词由 2 个数改为 3 个数
  • toast 时长 `VerityToast.SHOW_MS` 由 1800 改为 3000,配置界面 toast 同步
  • 翻译行维持时间戳精确配对,撤回「最近时间 + 1500ms 窗口」方案
  • 歌词接口由 `/lyric` 改为优先 `/lyric/new`,失败退回 `/lyric`
  • YRC 行头正则兼容 `[start,dur]` 与 `[start,dur,0]`,词时间按绝对毫秒解析并兼容相对写法
  • `parseLrc` 支持 `/lyric/new` 的 JSON 形式元数据行(作词 / 作曲 / 编曲)
  • 面板收起 / 展开由硬跳改为 `foldT` 指数缓动 + 剪裁,几何恒按展开态算
  • 歌曲信息开关亮度由 hover 驱动改为 `onT` 状态驱动(`drawSwitch`),打开后恒定近白
  • `dev/tools/editor_geom_check.py` 重写为 9 档分辨率 × 宽窄 × 4 种参数行数共 72 档
  • 「字号」改名「歌词字号」,行结构重排(行数仍为 8、面板高度不变)
  • 垂直 / 水平间距改由拖动判定框边框与四角调整,框内拖动仍为位置
  • 淡出旧行改为保持激活色淡出,尾段平方衰减保留
  • 播放地址预检提前到 `stopCurrentPlayback()` 之前,拿不到地址返回 `vip_or_unavailable` 且不动旧歌
  • 时长改用 `PlaybackTask.realStreamDurationMs`(试听终点或 size÷br),面板每次对表刷新
  • 面板的播放 / 暂停 / 跳转 / 点歌全部改到后台线程,回包用 `mc.execute` 弹 toast
  • ID 错误、仅试听、VIP 试听起播的 toast 文案缩短并区分
  • HUD、编辑器面板与预览改从 `active*()` 读取播放状态
  • 时长改为优先取本地播放任务毫秒值,取不到再退回状态接口
  • 对齐参考线配色改为青色 `0xFF22D3EE`:吸附 2px 实线、未吸附同色 35% 虚线
  • 滑杆、拖拽歌词、取色改为只改内存快照 `p`,松手不再写配置
  • 写入时机收敛到关闭时:`applyToConfig()` 写 8 项后立即 `SPEC.save()`
  • 未保存判定回归 `p != opened`(打开时的快照)这一口径
  • 「退出(不保存!)」改为直接关屏——配置全程未被改动,无需回滚
  • 播放按钮三角图标改为中线最长、上下对称递减的完整 ▶
  • SV 准星由「半径 5 实心圆 + 2px 黑环」缩为「半径 `s(3)` + 1px 外环」
  • 面板在极小 GUI 空间按超出量平摊压行高,下限 `s(11)`
  • 取色器宽度 `pkW()` 改由 `pkPad()*2 + pkSv()` 反推,与 SV 正方形天然齐宽
  • 底部字段行按可用宽比例分配:色块 13%、HEX 26%、三个 RGB 平分剩余
  • 面板激活色/待播色排版改为 `R,G,B #RRGGBB`,窄屏优先保 HEX
  • 编辑界面歌词改为取 `currentLineIndexPublic()`,与 HUD 同源并复刻上滑淡出动画
  • 「示例(未在播放)」判定改为 `realLineIndex() >= 0`
  • 点歌失败提示复用 `CnvCommand.musicMsg` 口径:试听/无 VIP 与歌曲不存在分别给对应文案
  • 卡面 `C_CARD` alpha 由不透明压到 `0x8C`,描边换半透 `C_BORDER_H(0.55)`
  • 全屏遮罩由 `0x50101014` 降到 `0x30101014`
  • 取色器由三条水平色带重做为标准 HSV 取色器:色相横条 + SV 方格 + 垂直明度条
  • 退出确认三选项文案定为「取消 / 保存并退出 / 退出(不保存!)」
  • 确认弹窗按钮几何抽成 `cfBtnW/H/Gap/X/Y`,绘制与命中判定共用同一份
  • `isPauseScreen()` 由恒 false 改为返回 `Minecraft.isSingleplayer()`:单人暂停、多人不暂停
  • 歌词进度基于 `System.currentTimeMillis()`,单人暂停时仍随真实播放推进
  • 编辑器几何由写死像素改为统一过 `rowScale()` 缩放,覆盖面板、行高、内边距、滑杆、取色器、确认框与四角把手
  • 滑杆填充右端与拇指圆心统一按 `sx + sw * t` 定位,与 `applySlider()` 严格互逆
  • 预览左右错位由写死第 0 行偏左改为读 `LyricHudRenderer.currentLineIndexPublic()` 取真实行号
  • 编辑器配色与控件形态对齐 `VerityConfigScreen` 的 shadcn 风格,含卡面圆角、三档按钮、滑杆与取色器
  • 所有 hover 改为 `ease(cur,target,dt,speed)` 指数缓动,与帧率无关
  • 判定框由仅拖动时显示、按整首最宽行估算,改为每帧按当前两行并集常显,含译文行与真实行距
  • 下载完整性校验由按声明值 ×0.98 改为以服务器 `Content-Length` 为准,声明值仅兜底且容差放宽到不足一半
  • 进度总量按实际值修正,避免进度条卡在 95% 后突然跳到完成
  • 上下文压缩由静默改为本地与云端到阈值均弹选择器,选「暂不压缩」后历史再长 8% 才再问
  • 压缩期间发消息被拒绝并弹 toast,面板顶部常驻「上下文压缩中」提示带
  • 压缩 UI 不再显示待压缩文本与发给 LLM 的请求,只留阈值提示、选项与分块进度
  • 压缩选择器改为底部锚定并预留高度,等待期间冻结底部计时且保持面板可见
  • 游戏内 toast 上移至 `height-78`(GUI 空间固定值),与热键栏、经验条、聊天输入框错开
  • toast 绘制抽为 `gui/VerityToastRenderer`,游戏内与配置界面共用一份实现并补上低 alpha 跳过绘制
  • 压缩选项文案改为「暂不压缩」并提为 `MemoryHelper.compressOptions()`,与 `/cnvtt selector` 同源
  • 安卓原生库解包目录由外部存储改为内部存储优先(`org.lwjgl.librarypath` / tmpdir / user.home)
  • `shortMsg` 截断上限由 220 改为 480,避免 dlopen 报错关键半句被砍掉
  • 窄屏布局:侧栏由写死下限 132 改为最多占屏宽 34%,卡片宽 `max(240,…)` 改为 `max(80,…)`,弹窗留白 `sw-80` 改为 `sw-32`
  • 头部高度、留白与底边留白随屏高收缩,600×270 下内容区高度 144 → 195
  • 每个原生库加载失败单独记一行(REPORTED 去重),不再被分组「至少成功一个即就绪」掩盖
  • `stage_runtime.py` 安卓 jnidispatch 同时写入 `verity-runtime/<plat>/` 与 `varmite/jna/android-<arch>/`
  • 本地推理输出由事后 LlmOutput.salvage 抢救改为采样前加载 GBNF 语法约束
  • LlmParams.jsonMode 保持默认 false,仅 AiAPI 对话路径显式打开
  • 已知代价:语法强制转义下台词含引号时可能被截断,但格式始终合法
  • JSON 解析失败改为把纯文本当作 message、actions 置空,对话照常可用
  • PersonaHelper 的 [PlayerName] 标注改为只读且不输出该词
  • 压缩触发点改为本地按折算值 + 85%、云端维持 131072 + 80%
  • 压缩产物改为 least.md 正文格式,近期对话原样保留不交模型转述
  • 上下文与回复长度改为硬编码,CTX_SIZE 由 8192 改为 12288、MAX_REPLY_TOKENS = 1024
  • 每次对话前改为 llama_memory_clear 清空 KV 缓存
  • 超长时改为逐条丢弃最老的非 system 消息,保留人格设定
  • decode 失败信息改为带上真实提示 token 数与 n_batch / n_ctx
  • 模型详情弹窗右下角主操作改为未下载 / 任务中 / 已就绪三态
  • 弹窗主操作按钮宽度改为按文案自适应 max(96, tw(label) + 22)
  • 硬编码兜底名单补上 ggml-cpu-* 各档位名
  • JNA 整包重定位为 varmite/jna 与 varmite.jna,jnidispatch 做等长二进制替换
  • 桌面端不再设全局 jna.boot.library.path,jnidispatch 改放 jar 私有资源路径
  • 本地 LLM 由第三方 JNI 绑定改为官方 llama.cpp CPU 包加自写的 LlamaCpp.java
  • 聊天改为套用 GGUF 自带的对话模板 llama_chat_apply_template
  • CPU 指令集门禁改为仅用于界面显示档位,不再因 CPU 老禁用本地 LLM
  • stage_runtime.py 改用 dev/_vendor/lc/ 官方包并按平台裁剪 CPU 变体
  • LocalInferRuntime 三个入口改为真调各库 Java API,模型实例按模型缓存
  • m_88315_ 中分组动画与重排整段包 try/catch,异常只记日志不再跳过本帧绘制
  • 详情/下载管理弹窗遮罩层 `mdlModalChrome` 重写:不再读主帧缓冲做模糊,改为纯 `fill`/`rr` 四层堆叠(压暗→中心聚光→投影→抬升表面+描边+高光)
  • 「选择模型」二级菜单 `renderModelModal` 仍保留帧缓冲模糊(同样三个缺陷尚未处理)
  • 去掉 `renderModelModal` 中复用模糊缓冲的保留逻辑,`!mmOpen` 时直接释放缓冲
  • 「模型详情」弹窗整块重做:类型/等级 pill + 状态 pill、模型名放大 1.25 倍、4 格规格小卡、HF 数据改 3 格指标卡、文件清单改自动折行 chip
  • 「下载管理」弹窗整块重做:标题行→概览条→任务卡列表(每卡 88px,含状态竖条、圆角进度条、暂停/继续/删除),空状态改居中图标+两行提示
  • 两个弹窗几何收敛为 `mdlDetailGeom` / `mdlMgrGeom`,命中直接读渲染时填好的按钮字段
  • 详情弹窗内容项由字符串前缀改为结构化 `DLn`(kind + 固定高度表),测量与绘制走同一张表
  • 点面板外 = 关闭,与「选择模型」弹窗同一套行为
  • 点击涟漪改为以实际按下位置为圆心向四角扩散的圆形波,剪裁在按钮内,全部按钮统一生效
  • 详情/下载管理弹窗入场改为复用背景模糊 + 暗罩 + 面板中心缩放/上滑(220ms easeOutCubic)
  • 左侧 TAB 重排:「功能配置」与「Verity 新生账户」位置互换,「自检」上方新增「模型下载」
  • 自检与连通性检测加三层兜底:渲染侧看门狗超 90s(连通性 150s)强制改判「✗ 检测超时」并复位按钮
  • 后台检测全程 catch Throwable,账户页 `connBusy` 复位改 finally 语义,异常不再把按钮钉死在「检测中…」
  • 每项自检完成后写日志(如 `[verity-config] self-check LLM -> …`),便于从 latest.log 定位
  • `VeritySelfCheck` 复用单个 HttpClient(类级单例),避免多次检测后 selector 线程堆积
  • `VerityAccountBridge` 三个 test* 方法的 catch 由 Exception 放宽到 Throwable
  • Mimo 音色克隆模型名由 `mimo-v2.5-tts-voiceclone` 更正为 `mimo-v2.5-tts`(AiAPI / VoiceCloneHelper / 自检 / 配置界面四处统一)
  • 弹窗打开时底层悬停/按压高亮不再透传;选中点由绿改白;确定后自动回填到 Model 输入框
  • 去掉逐行错峰淡入(长列表滑动时行会越来越淡直至消失的根因)
  • 弹窗滚动条支持整条轨道抓取拖拽,按下不产生位移
  • 可折叠分组收起时显示「点击展开」、展开后显示「点击折叠」,不再恒显「点击展开」
  • 日志列表滚动条复用页面同套实现(`thumbGeom` 拇指最矮 24px、`drawBar` 视觉、整条轨道可抓),原自制细拇指版废弃
  • 去掉右键「复制消息内容」菜单,左键点行任意位置即复制整行 `[级别] 时间 消息`
  • 日志列表改两阶段过渡:阶段 1(220ms)消失行原位淡出、存活行不动;阶段 2(430ms)存活行抖动后坠落(约 6.6% 过冲回弹)、新行上移淡入
  • 自检页 LLM/TTS/STT 名称、模式·详情、右侧结果三处 y 偏移统一为 by+10,麦克风行同步对齐
  • chip 宽度改为与勾勾/文字/计数同帧同源计算,文字与数字间距固定 5px
  • 日志列表位移改用 ease-out-back(收敛系数 1.2),透明度仍线性
  • 级别筛选 chip 勾勾展开与宽度重排的缓动速率提高约 1.7 倍
  • 日志列表过渡改为全程线性:存活行 FLIP、新行上移淡入、离场行原位淡出
  • toast 旧差异文本改「随盒缘逐字缩没」,盒宽收缩时右缘扫过的字符不绘制、临缘字符先变淡
  • 级别筛选 chip 改为动态宽度 + 水平重排(勾勾为第一个子元素、未选中时 width/opacity 收到 0,右侧 chip 跟随前序宽度平移),零垂直位移
  • 日志离场行改为向下 0.7 行高移动同时淡出(260ms ease-out),离场行先画、存活行盖在上面
  • toast 改共享元素/FLIP 过渡:取新旧文案最长公共前缀补间滑动,差异部分交叉淡入淡出(ease-out 260ms),同值重触发完全静止
  • 级别 chip 对勾由 `m_280509_` 实心矩形改为逐像素描线,重定位到左侧 8x8 对勾槽内
  • 日志列表改行级 FLIP:以 `entry.time` 为 key,存活行补间到新位置、新行从下方滑入、消失行原位淡出(260ms ease-out)
  • 自检页 `checkResult` 由 `Map<String,String>` 改为 `ConcurrentHashMap<String, VeritySelfCheck.Result>`,`runCheck` 改 `put(name, Result.running())` 后后台逐个 `check()`
  • 账户页登录态过期自动登出:`doFetch` 拉取账户信息时服务器明确确认失效才 `logout()`,依据 HTTP 401/403/404 或响应体明示无效/过期/未授权
  • 进入配置页(`VerityConfigScreen.init`)与切到账户 Tab 时自动校验登录态(4s 节流 `refreshSync`),登录轮询成功后刷新
  • `doFetch` 改用 `TRUST_ALL_HTTP`(与 testLLM/TTS/STT 一致),`autoLogoutOnServerExpired` 加防重闸
  • 按钮组件增加 Flutter InkWell 风格动效:按下 5% 按压缩放、命中后播放 420ms 白色涟漪,`m_6375_`/`m_6348_` 记录时间戳与坐标
  • 日志页移除顶部「仅本模组 · 内存 N 条 · 筛选后 N 条」文字行,chip 行整体上移
  • 自检页/日志页去除卡片内重复的「自检」「日志」标题
  • 日志页状态提示改为 toast(`logStatusSet` 退化为 `showToast`,字段 `logStatus/logStatusAt`)
  • 「详细日志」开关真正控制 Bridge 刷新日志:账户校验四条高频流程日志降级为 `VerityLog.debug`
  • TTS 内置服务商面板的模式选择提到第一行,决定 Model 与 Key 的显示内容
  • Model 行在预设时为必填输入框,音色克隆时改为固定值展示、不给输入框
  • 下拉框选中新值时加入淡入与轻微上滑过渡
  • 参考音色由点击循环改为下拉框(Verity / 阿神同款 / 老牧师 / 自定义)
  • 「本地克隆音频」改名「自定义音频」,仅在参考音色选「自定义」时出现,并移除「(不使用)」
  • TTS / STT 内置服务商排布与 LLM 对齐,移除多套的一层带标题分组
  • 音色行显示名由 `ttsVoiceUI` 修正为「模式选择」,选项「冰糖」改为「预设」
  • 模组版本号改为 `v3.5-beta`,同步 `VerityConfigScreen.ABOUT_VER` 与 `META-INF/mods.toml` 的 `version=`
  • 内置 GeckoLib 与 mclib 的 271 个类全量改名到私有命名空间,与外部重名类数由 271 改为 0
  • 网络通道由 `geckolib:main` 改为 `verity_geckolib:main`
  • `AnimatableIdCache` 存档键由 `geckolib_id_cache` / `geckolib_ids` 改为 `verity_geckolib_*`
  • 物品动画 ID 的 NBT 键由 `GeckoLibID` 改为 `VerityGeckoLibID`
  • Mixin 配置与访问转换器同步改名(`geckolib.mixins.json` → `verity_geckolib.mixins.json`)
  • 配置界面入口由 Mod 管理器迁移到游戏设置(Mixin 注入)
  • 配置界面由静态预览改为真实读写配置、改动即保存

修复

  • 启动报「不是有效的Mod文件」:`mods.toml` 版本 `v3.5` 不匹配 Forge `^\d+.*` 校验,改为 `3.5`
  • 左侧 TAB 滚动条底部够不到返回键:`navBot` 改用 `h - scaleI(50) - 10`,轨道 `navViewH` 取整段
  • 同意「模型使用声明」后保存按钮变亮、退出弹「未保存」:并入 `isImmediateKey` 即时落盘
  • 声明滚动条与页面滚动条抓取区重叠时误滚页面:`m_6375_` 中抢在 `scGrabArea` 之前拦截
  • 同意后未落盘导致下次启动重复询问:`MODELS_DISCLAIMER_OK` 改为 `SPEC.save()` + 刷新快照
  • 选「不保存进入编辑器」后改动仍被歌词编辑器的 `SPEC.save()` 写盘
  • `discardAll()` 未清空行内输入框暂存文本 `this.txt`,还原后仍显示旧值
  • 账户 License Key 存盘后未刷新快照,保存按钮显示为「有未保存改动」
  • 输入框截断 `...` 消失:未聚焦从头部显示右侧截断,聚焦时两侧各画一个 `...`
  • 重聚焦或行被 `buildCards()` 重建后窗口回到开头:按输入框用 `inputWin` 各记窗口起点
  • 配置页滑块松手后填充从旧位置重放动画,拖动期间改为以瞬时速度调用 `av` 缓动
  • 投掷物回弹判定误用 `m_7639_`(getEntity)取到射手,改用 `m_7640_`(getDirectEntity)并以 `m_7639_` 兜底
  • `VerityEntity` 碰撞箱与可视球错位,`m_142242_()` 改为返回球心在 `pos.y + 0.25` 的 0.5 立方体
  • `SphereRenderHelper` 可视球心比碰撞箱中心高 0.125,首段位移 `0.5 → 0.375` 使球心回到 `pos.y + 0.25`
  • 弓箭命中球但不触发回弹,投掷物改挂 `VerityEntity.m_6469_` 命中回调并按飞行方向弹开
  • 岩浆/爆炸/仙人掌与掉落方块砸中等本地反馈只写 CLI 面板,补 `addMessageToHistory` 的 user/assistant 记录
  • 上下文环白色弧因分母 `contextCapacity` 为 0 不绘制,`ModEvents.onPlayerJoinWorld` 同时设定分母
  • 爆炸与仙人掌音效静默,`playCallSound` 改为从服务端世界 `m_5594_` 播放,TTS 模式优先挂到附近 Verity 实体
  • 玩家自己的聊天回显被重复弹 toast,`ClientChatHook` `isOwnEcho()` 跳过
  • 上下文环统计位置在组 messages 之前,`setContextChars()` 移到 `messages.add(userMsg)` 之后
  • 上下文环重进世界归零,改为按 `AiAPI.askLLM` 组好的 messages 各条字符数合计估算
  • CLI 面板滚轮滚动时多余的行被画到日志区上方(改为只画 `cap` 行并从底部对齐)
  • 「回应条件」对勾不在方框正中,垂直偏移由 `scaleI(2)` 改为 `scaleI(4)`
  • 首次显示 CLI 时底栏模型名为空:无会话时兜底显示当前配置模型(`AiAPI.currentModelLabel()`,缓存 1 秒)
  • 「停止思考」未立即生效:`requestCancel()` 直接关闭登记的活跃流,截断思考改用 `discardLive()` 丢弃
  • `builtinKey()` / `builtinModel()` 缺少 `case OUR_FREE_MODEL`,模型名被写进 NVIDIA 字段导致 HTTP 401
  • 自检页对 Our Free Model 误报「未配置 Model」(免密车道不再按未填 Key 拦截)
  • 暂停期间加入的玩家会自行开播:服务端在暂停时对单个玩家补发一条裸 PAUSE
  • 暂停中加入再继续时会跳掉整段暂停时长,帧校准目标改用 `NcmClientPlayer.getCurrentPositionMs()`
  • 中途加入稳定偏差约 7400ms:`handleStart` 的时间锚点改用客机收到包时的本机时钟
  • `handleSyncPosition` 跨机器相减墙钟,SYNC 只取收到的权威位置 `positionMs()`
  • 服务端下发的 `timestampMs` 保留在包内,仅不参与本机时间推算
  • `doSeek` 新建的 PlaybackTask 未设 server 致 `signalStarted()` 直接 return,跳转与继续广播不出去
  • 广播侧补 `pausedDurationMs` / `pauseAtMs` 记账,修复中途进服玩家位置多算暂停时长而超前
  • `NcmNetwork.sendToAll` 跳过 hostPlayerUUID 致客机发起播放时自己收不到 START,改为发给所有人
  • 是否出声改由客户端判断(`NcmClientPlayer.handleStart` 在本地即服务端宿主时跳过)
  • 专用服务器本地开音频设备抛异常致 START 广播发不出去,`streamUrlToSpeaker` 先判 `DedicatedServer`
  • 宿主 JVM 同时走服务端与客户端两路播放致声音重叠,`handleStart` 在本地即服务端宿主时跳过客户端那一路
  • `m_7043_()` 误用 `m_91091_()`(`hasSingleplayerServer`)致 LAN 房间被当成暂停屏,改为 `m_257720_()`
  • `drawMusicBlock` 整体包 `try/catch` 并写 `VerityLog.error`,避免异常导致多人下音乐块整块不画
  • 展开动画结束后裁剪区下沿延伸到音乐块底部,兜住面板高比内容差几像素的静默裁切
  • `queryDurationMs()` 每个对表周期都在渲染线程发同步 HTTP,加 15s 限流
  • 纯间奏(空文本行)时上一句消失且下一句不显示,改为照常显示下一句并在空档画白色圆点
  • AI 设置里切换皮肤需重启才生效,`setSel()` 命中 `VerityConfig.SKIN` 时立即 `setSkin()`
  • 译文歌词从配置 / 背包 / 聊天等半透明界面下穿透,整层 HUD 改为无 Screen 时才画
  • MUSIC_U 被静默截断到 255 字符导致服务端只给试听片段
  • 歌名 / 歌手在有 Screen 打开时从其它界面穿透显示
  • 垂直间距 `vs` 可拖到 0 导致两行重叠,读取与拖拽处均夹到 ≥ 26(`NCM_LYRIC_V_SPACING_MIN`)
  • 判定框高度随动画鼓起,`fitBox()` 改为只按静止位置的当前行 + 下一行取并集
  • ID 输入框默认值(hint)显示为白色,按帧切 textColor:出提示时 `0xFF71717A`,其余 `0xFFF4F4F5`
  • 旧行动画起手横向跳位(编辑器预览错位符号与 HUD 反号)与淡出时由激活色变待播色的突变
  • `NcmHelper.getCurrentPlaybackMs()` 本地时钟无限累加导致进度条时间无限走,夹到真实流长度
  • 该上移的行动画起手闪一下,`alpha` 由 `f2` 改为 `0.6 + 0.4 × f2`
  • 淡出尾段因颜色 alpha < 64 被强制不透明渲染而闪亮,`f*255 < 64` 时直接不画
  • 本地播放时面板显示未播放、播放键恒为 ▶、点击变重播、进度条不动
  • 编辑界面歌词停在「示例歌词」——`advanceState()` 的在播判据改用 `activePlaying()`
  • ID 输入框文字不居中——关掉原版边框后补回 4px 左内边距与纵向居中
  • `musicToggle()` 分支:在播则暂停/继续,未播才按 ID 点歌,空 ID 给明确提示
  • 取色器整块显示为 missing 贴图——`getTexture()` 恒不返回 null,注册改为无条件调用
  • 编辑界面歌词不推进——行号推进从渲染路径拆出为 `advanceState()`
  • 拖动后配置被重置——编辑器打开时只读一次,不再每帧反射回读
  • 保存与「退出(不保存!)」失效——改用 `diskDirty` 判定:前者落盘清标记,后者回滚到打开时快照
  • `flushPendingConfig()` 竞态:清队列与逐条 set 之间的空窗会让紧随的 `save()` 写成旧值
  • toast 在联机下重复绘制两次——`LyricEditorScreen.isOpen()` 时 HUD 侧跳过 toast
  • 改窗口或 GUI 缩放后重复弹 toast——进界面提示加 `entryToastShown` 一次性护栏
  • ID 输入框光标跟到灰色占位提示末尾
  • ID 输入框不支持 Ctrl+A/C/V/X、Home/End、Delete 与左右方向键
  • 拖动或按住某项时鼠标扫过的其他控件仍有 hover 反馈——有 `hovLock` 时冻结 hover 坐标
  • SV 方格右侧呈黑色——逐列重采样留下行间空隙,改为 `drawSvSquare` 逐行生成
  • 取色器不遵循 GUI 缩放——设计值全部过 `s()`,`pkSv()` 按可用高宽双重夹紧(下限 `s(88)`)
  • 极端窄屏内容溢出——`layout()` 末尾比对面板高与可用高,超了整体上移并压缩留白
  • 拖动歌词松手后先闪回原位——`commitAt` 与 `COMMIT_GRACE_MS(120ms)` 宽限窗口内跳过配置回读
  • 调整配置后世界像重新加载——`ConfigEventHandler.onConfigReload` 去掉 `levelRenderer.allChanged()`
  • 面板顶部空白堆积、下方内容拥挤
  • `isPauseScreen()` 在 1.20.1 恒 true 导致打开编辑器即冻结世界,改为仅单人时暂停
  • 拖动中每帧 `sample()` 回读配置覆盖内存值导致拖不动,拖动期跳过采样
  • `LyricEditorScreen.active` 从未赋值使歌词被 HUD 与编辑器各画一遍,改为 init 登记、removed 注销
  • 取色器几何在 `drawPicker` / `pickerClick` / `pickerDrag` 各抄一遍绝对像素,导致缩放屏上画在此、点中别的条
  • 点「保存」时 `SPEC.save()` 早于去抖写入导致退出重进变回旧值,保存前先 flush 再 save
  • 未播放时打开编辑器一片空白,改为自行决定画哪两行并复用 `drawLinePublic`,无歌词时摆示例
  • 取色器在缩放屏上画与点错位、弹窗高度写死 150 挤出预览块与「确定」
  • 窄窗口第 8 行「待播色」被切掉,行高按可用高度收缩至下限 16 并夹住面板宽度
  • 声明体积与实际不符致完整文件被判不完整,10 个条目改为实测值,全库 26 条目 57 文件均在 2% 内
  • TTS 清单缺 `tokens.txt` 与 4 个 FST 等致中文音色合成失败,补齐约 2.4 MB × 6 条目
  • 引擎加载失败只返回 null,现由 `LocalInferRuntime.lastTtsError()` 指名所缺文件,含 `espeak-ng-data/`
  • 小窗口下压缩选择器选项 4/5 与操作提示溢出状态栏,面板撑高并按实际高度依次牺牲提示行与说明行
  • Screen 打开时 HUD 覆盖层仍渲染导致日志重影,选择器期间由 `askBegin/askEnd` 挂起 HUD
  • `java.awt.FileDialog` 因 `java.awt.headless=true` 抛 HeadlessException,改用 tinyfd 反射调用
  • tinyfd 反射调用须精确匹配 `tinyfd_openFileDialog` 五参签名,否则回落 AWT 再次抛 HeadlessException
  • 安卓原生库解包到 noexec 外部存储,致 llama / sherpa / vosk 的 dlopen 全部失败
  • 安卓 JNA 取到未改名 jnidispatch 后 `FindClass` 失败,致 LLM / STT 初始化报 UnsatisfiedLinkError
  • download 在 enqueue 时不唤醒等待线程导致进度一直停在排队
  • remove 在下载线程仍写文件时删目录导致残留 .part 并报「文件不完整」
  • 队列中存在的 id 不在任务表时下载线程空转烧满一个核
  • 本地推理上下文不足时静默丢弃最老消息导致的突然失忆
  • MC 锁鼠标使 HUD 覆盖层收不到点击,改用不暂停世界的 Screen 重绘 CLI 面板
  • 0.5B 模型不输出 JSON 时整轮被判失败并把错误文案当作回复
  • 模型把提示词中的 [PlayerName] 当字面量照抄输出
  • 压缩阈值沿用固定 131072 字符导致本地推理下压缩从不触发
  • requestCompression 一律走 SpeedHelper.resolveLlmConfig 使本地压缩打到云端
  • 单次提交 token 数超过 n_batch 触发断言使整个 JVM abort
  • KV 缓存跨对话不清导致 n_ctx 塞满后每句都失败
  • 提示加生成长度超过 n_ctx 使 llama_decode 返回 -1
  • 聊天栏在本地推理下仍显示云端模型名,改为按模式分别取模型名与阶段
  • FILES.txt 只写一半导致 ggml-cpu-*.dll 未解包、后端注册 0 个
  • 模型加载失败只报含糊文案,改为一并报出后端数并提示缺少的 dll
  • 自带 JNA 与 Forge libraries 中 jna 导出同名包导致的模块解析失败
  • prepare() 用「是否解出新文件」判成功导致第二次启动后本地推理失效
  • Linux / macOS 原生库按 endswith('.so') 过滤导致真身文件全丢
  • TTS 采样率写死 22050 导致变调变速,改为按模型真实采样率播放
  • 缺库时统一提示,改为报出具体文件与失败步骤
  • isDownloaded() 把「只剩 .part」判为已下载导致卡片提前翻牌
  • 本地推理面板入场动画未推进时整块内容停在不可见状态
  • 详情弹窗「仓库」行贴着指标卡下沿,补 7px 间隔
  • 下拉框未设置时只显示「无」,改为「未选择 · 点击选择」
  • 自检把未选择、未下完、缺原生库揉成一个 usable 提示
  • 本地推理缺原生库时谎称「将使用内置回退」,改为如实说明不可用
  • 模型介绍显示两遍:渲染时跳过正文里所有 `## ` 行
  • 粗体后面的文字被压上去:`mdlMdLine` 的粗体段改按 `tw("§l" + 段)` 推进
  • 小节头竖条比文字多垂下 2px:改为与文字严格等高,行高 20 → 16、组间隔 9 → 12
  • 网格滚动一格一格跳:新增 `mdlScrollAnim` 缓动,渲染与命中统一用 `mdlSc()` 取整值
  • 模型下载页详情/下载管理/使用声明弹窗被内容区裁剪框切掉左边:三个弹窗统一挪到 `renderAll` 裁剪框之外绘制
  • 使用须知声明弹窗首次进入配置页时同样被切:一并挪出裁剪框
  • `renderModelsPage` 只保留「弹窗打开时底层不响应悬停」的抑制逻辑
  • 遮罩透出的画面与页面对不上:抓帧缓冲时本帧 GUI 未 flush,改为只依赖整数坐标绘制原语、与页面同批次同矩阵
  • 模糊半径按帧缓冲像素计算却当 GUI 单位用、被 GUI 缩放除掉:新实现不再使用模糊
  • 遮罩走裸 Tesselator 全局 modelview、与 GuiGraphics 两套矩阵导致整体错位:统一走 GuiGraphics
  • 任务卡按钮压内容、网速文字与按钮打架:内容区宽度显式扣掉按钮区(`MDL_MGR_RIGHT = 148`),恒留 4px 间隙
  • 窄面板下标签互相压:状态 pill、概览 pill、标题副标题先算剩余宽度,放不下就不画或裁剪
  • 矮窗口或 GUI 缩放 4 时弹窗内部叠字:面板高度加下限(详情 170 / 下载 140),详情不足 256 时省掉规格小卡
  • 下载页弹窗误触「选择模型」面板:恢复模型列表弹窗只在自身打开时渲染
  • 弹窗打开时底层卡片高亮穿透:详情/下载管理弹窗打开期间底层不响应悬停
  • 下载管理按钮点不进去:点击判定几何少了标题行高度,修正后正常打开
  • 模型卡片名称与大小重叠:下载状态改右对齐,模型名裁剪到状态左侧
  • 日志滚动条方向整体镜像:`logTop` 与 `thumbGeom` 坐标系相反,现统一换算到文档坐标系(`cur = (maxTop − logTop) × 行高`)
  • `MicrophoneManager.scanForMicrophones` 的 Skipping mic 日志级别由 ERROR 降为 WARN,并附异常类名
  • toast/列表渐隐末尾闪烁:MC 字体渲染器对 alpha < 64 强制按不透明渲染,现统一文本入口在 alpha < 0.25 时跳过绘制
  • 补全一个裸 `0xFFFFFF` 调用点的 alpha
  • toast 末端闪烁:改回旧差异整段回滚淡出(alpha 随过渡进度衰减),公共前缀与整体同透明度
  • 账户页「⟳ 刷新」图标偏左约 12px:绘制改以命中区中心 `(rfb.x + 12, avY + 17)` 为基准
  • `user/info` 返回 HTTP 200 但 `success=false` 时直接视为登录态失效并自动登出,不再依赖关键词猜措辞
  • `isAuthExpiredSignal` 扩展:HTTP 404 纳入直判,关键词补「停用/注销/撤销/禁用/已删除/找不到」及 NOT FOUND / REVOKED / SUSPENDED / DISABLED 等
  • `loggedIn()` 改回要求 `VERITY_BRIDGE_KEY` 与 `VERITY_USERNAME` 都非空,修复 key 已清空但 username 残留的脏状态
  • 账户数据拉回后界面不刷新:`doFetch` 写数据后统一调用 `VerityClient.refreshScreen()`
  • 账户页全部显示 `-`:`findRow` 用原始 key 与 `assignRowIds()` 加的「卡片序号|」前缀失配,改为同时比对 `idBase`
  • 登录态校验全程可见:`doFetch` 每次执行都写 `[Bridge] 校验登录态 …`、`user/info HTTP …`、`校验通过` 等内存日志
  • `layout_check.py` 的 `NAV_N` 由 8 更正为 9
  • 改 TTS 模式时已展开 STT 的模式选择行动画重播:id 改为「卡片序号+分组下标链|原始 label」
  • 切换模式或服务商时界面被推着上移:新切出的分组不再压缩 `layoutGroup()` 的返回值 `iy`
  • 切换模式时面板无动画硬跳:所有分组统一走 `gKey()` 展开进度
  • Key / Model 行名称未垂直居中:`desc` 为空串时等同无副标题、按单行居中
  • 点音色「预设」被跳到「Verity 新生网站」:`TtsMode` / `SttMode` `CUSTOM` 值并删除 UI 计数器
  • 关于页版本号与左侧 "Verity-cn" 基线不一致(原低 4px),改为统一取标题视觉中线
  • 致谢下方的大块空挡:卡片高度由硬编码 540 改为按内容实算
  • 右侧滚动条需把指针放到滑条左边才触发:命中区改为围绕中心线 `cx ± 7`,三处共用 `scGrabArea()`
  • 命中区左缘压住内容区右边 8px,抢走近右边缘的行与滑条的点击
  • 点「返回」无反应或误切 TAB:返回键改最高优先级,命中判定与渲染共用同一裁剪边界
  • 内容滚动后不可见的行仍可点击,命中判定统一为「可见才可点」
  • 滚动条拇指未嵌进轨道槽:轨道与拇指统一由中心线 `barCx()` 绘制,拇指加宽到 6px
  • 内置 GeckoLib 与外部 geckolib-forge.jar 同名类冲突导致的 `ClassCastException` / `NoSuchMethodError`
  • 潜在的空指针问题
  • 配置界面进入时的崩溃
  • 刷新或连通性检测后误跳回「通用」页
  • 账户页整体布局被放大
  • 子分组条目未随标题向内偏移、展开后与下方重叠
  • 滚轮滚动方向、滚动越过顶部分隔线、左侧导航拥挤无法滚动
  • 对 Verity 说话偶尔完全无反应且无提示的问题(被拦截时明确告知原因)
  • 欢迎语与 AI 回复的说话动作时机不对(改为等语音真正开始才动作)
  • Verity 说话或思考时无法拿起她(现在随时可拿起,不影响语音)
  • 启动游戏因缺少前置组件导致的崩溃
  • 小米语音合成在非流式模式下完全无声
  • 配置界面鼠标滚动过慢
  • 返回按钮与版本号文字未垂直居中,输入框光标、选区与键盘编辑的显示

优化

  • 开场动画 248 帧 PNG 由 `1920×1080` 降采样为 `1280×720`(71.3 MB → 32.9 MB,无需改代码)
  • 剥离 25 个 Android/Linux 原生库的调试信息(省 57.2 MB,`libllama.so` 31.8 → 3.2 MB),Windows natives 未动
  • `BuildV3714` 打包压缩级别由默认 6 改为 `Deflater.BEST_COMPRESSION`(9)
  • 图标与 logo 由 512² 改为 256²
  • jar 体积 `216,504,021 B`(206.5 MB)→ `161,210,665 B`(153.7 MB),省 55.3 MB(−25.5%)
  • 代价:开场动画在 1080p 为 1.5× 上采样略软,原生库去符号后崩溃无法符号化
  • 取色器贴图每秒无条件重传一次,`upload` 前补幂等的 `TextureUtil.prepareImage()`
  • 色相横条与 SV 方格烘进一张 `DynamicTexture`(128,上 6 行为色相条),每帧由约 8500 次 `fill` 降为 2 次 `blit`
  • 像素口径采用 ABGR(`setPixelRGBA` 约定),贴图路径 `dynamic/verity_lyric_picker` 跳过资源包重载
  • 色相按 128 档量化,仅跨档重烘且复用同一 `NativeImage` 对象
  • 贴图注册或上传失败时退回逐行 `fill` 老路径
  • SV 方格每帧填充由「96 列 × 48 段且有空洞」改为「176 行 × 48 段且连续」,消除列间 1px 缝隙
  • 色相横条绘制结果缓存复用;SV 方格改为 96×96 网格缓存,仅色相变化时重建
  • `currentLines()` 按源列表 `identityHashCode + size` 缓存转换结果,另加本帧快照 `frameLines`,示例歌词提为静态常量
  • 引入参数快照 `P`,每帧只 `sample()` 一次,替掉每帧 20+ 次反射读配置
  • 拖动期只改内存快照,松手 `m_6348_()` 才 `commitAll()` 且只写与已保存值不同的项
  • 色相条由每帧 208 次 fill 改为 `ensureHueRow()` 算一次存 `int[]` 复用
  • 状态栏丢段顺序改为阶段与模型名永不丢,挤不下先丢 token/cache/速度再裁短模型名
  • 新一轮开始时不再清空模型名,使其常驻显示
  • 全新下载前清除残留 .part,仅点「继续」时才作为续传起点
  • 压缩失败时原样显示具体错误原因并重新询问,压缩成功后当场落盘
  • 提示前缀改为 token 级 KV 缓存复用,单轮耗时 101s 降至约 3s
  • seq_rm 或复用路径 decode 失败时当轮退回全量提交
  • 摘要短于原文 4% 时判定模型无摘要能力,退回零幻觉的提取式压缩
  • 请求上下文超出模型原生上限时给出明确告警但不阻断运行
  • 生成时 pos >= n_ctx - 2 即正常收尾,不再让最后一次 decode 失败
  • [LLM] proxy / model 调试日志按本地与云端分开打印
  • 下载进度统计改为开下前算一次基线后纯内存累加,不再每 64KB 扫目录
  • 面板入场动画新增 2.5s 兜底,到期直接落位
  • 麦克风电平条改为内联手绘
  • AI 回复不再出现 Markdown 排版符号,也不再把原始查询数据直接丢给玩家
  • 说话动作幅度随语音情绪(响度、音调)变化,更生动

移除

  • 主菜单「Mod by Varmite」按钮及 `TitleScreenMixin` 中让位下移 24px 的逻辑
  • `mods.toml` 的 `[properties]` `veritycn`(Verity新生官网)
  • 无调用者的 `NCM_USE_AUTHOR_SERVICE` 配置键及 `SpeedHelper` 中两个死方法
  • `TtsMode.BUILT_IN`(旧「内置TTS配置」,与内置服务商重复)
  • `SpeedHelper` 中无调用者的 `getCurrentFree*` 6 个方法
  • CN 下移除「孤单」演出(`ModEvents` loneliness 块加 `!isCores()` 守卫),不再广播台词与扣好感度
  • 爆炸分支 `SoundEvents.f_11922_` 与仙人掌分支 `ModSounds.BONE_0` 的残留固定音效
  • `VerityLlmSession.sessionChars`、`addSessionChars()`、`contextTokens()` 及历史累加等「本局新增」口径实现
  • `AiAPI` 按 messages 体积写 `contextChars` 的统计代码
  • 「启用音乐」总开关(`VANILLA_NCM_ENABLED`),音乐默认开启,`setCurrentNcmEnabled` 变为空操作
  • `playFavouriteSongStream`、`onFavouriteSyncTick`、`pauseFavouriteSong`、`resumeFavouriteSong`、`loadFavouriteLyrics`(约 260 行)
  • 内置 `assets/verity/sounds/favorite_song.mp3` 与配套 lrc,jar 体积减少约 5.6 MB
  • `LyricHudRenderer` 整个圆点小节(`GAP_*` 常量、`drawGapDotsPublic` / `drawGapDots` / `fillDisc` 等)与编辑器镜像块
  • `VerityConfig` / `SpeedHelper` 的圆点阈值 `ncmLyricGapDotThresholdMs` 字段、builder 定义与 get/set 访问器
  • 「垂直间距 / 水平间距」两个参数行
  • 面板右上角「示例(未在播放)」标签
  • 编辑期实时写配置的去抖队列与后台写线程
  • `diskDirty` 判定与只写不读的 `saved` 快照
  • 取色器右侧垂直明度条,明度改由 SV 方格自身承担
  • 关于页「本模组内置 GeckoLib…」灰色小字(常量、卡片高度、渲染三处),致谢已并入「特别感谢」
  • 任务改为后台删除,先让任务从列表消失再等线程让出目录
  • 界面上的温度与重复抑制设置,改硬编码 0.7 / 1.1
  • llmLocalTemperature / llmLocalRepeatPenalty 配置项,旧配置被忽略且无害
  • 「最大回复长度」下拉与 llmLocalMaxTokens 配置项
  • 清理 de/kherud/llama、com/fasterxml/** 与 META-INF/versions/** 残留
  • 个人账户下的「播放位置」选项与 `musicPlayLocation` 配置项,及 SpeedHelper 中四个从未被消费的读写方法
  • `K_METER` 行类型死代码(常量声明、`geom()`/`drawRow()` case、`kbCollect()` 过滤)
  • 自检页 4 个 `K_RT` 行(Base URL / 模型 / Key / 连通性)与各目标「检测」按钮行
  • 源码树零引用的死代码方法:`VerityClient.createYACLScreen / originalParent / preserveConnTest`、`VerityAccountBridge.fetchValues / fetchFromConfig / checkNow / testAllModels`、`VerityConfigScreen.bt / selE / selS / sldD`
  • 「使用自定义克隆音频」开关,改由参考音色新增的「自定义」项决定
  • 初始化配置页面移除「AI 自动辅助填入」入口(涉及隐私先隐藏)
  • 小米 v1 后端 TTS 特殊字段拼接规则,统一走 OpenAI 兼容格式
  • 友好模式,默认即原版恐怖模式
  • 对 Cloth Config 与 GeckoLib 的外部依赖声明,前置要求大幅减少
  • 内置 TTS 语音模型,模组体积大幅减小;语音改用 小米 MiMo / Base URL / 音色克隆 / 官方代理 任一模式

v3.4

2026-08-21

NCM 音乐系统 + 联网搜索 + 多人性能优化

NCM 音乐系统(全新)

  • 歌曲搜索与播放:ncm_search 返回带编号的结果,AI 只需返回编号即可播放;搜索结果隐藏原始 ID,杜绝 LLM 编造歌曲
  • 保留 song_id 直接播放,用户明确给出 ID 时仍然可用
  • 多人游戏同步:主机音频去重不重复收听、新玩家中途加入自动同步播放进度与歌词、退出世界自动停止播放
  • 音乐音量 Ducking:TTS 播放时音乐 300ms 淡出至 15%,TTS 结束后 800ms 缓缓恢复

联网搜索配置(全新)

  • 新增「联网搜索」配置标签页,独立启用/禁用开关
  • 支持 Tavily、Brave、AnySearch 三种搜索引擎的 API Key 管理

Android 平台适配

  • NCM 音乐走 OpenAL 播放:流式缓冲 PCM 后转 WAV 播放,动态选择 stereo/mono 格式
  • 修复 alGenBuffers 残留错误导致的播放失败
  • Android 跳过流式 TTS 回退非流式路径;OpenAL 播放期间歌词位置精确同步

性能优化

  • 修复多人模式卡顿根因:记忆模块每 tick 扫描全世界实体,现改为 40 tick 节流 + 缓存最近玩家结果,扫描频率降低 98.75%

歌词与口型动画

  • 歌词闪烁修复:空歌词不再重置行索引;进度波动时行索引只向前跳,不来回跳变
  • 口型动画仅由 TTS 触发,听歌不再带动嘴巴;仅在剩余时间不足时延长,避免口型停不下来

指令系统

  • /cnv locate tp:一键传送到 Verity 位置(背包→玩家位置,实体→实体坐标)
  • /cnv mplay <songid>:直接播放指定歌曲 ID

稳定性修复

  • 麦克风 16000Hz 不支持时自动降级 44100Hz,修复部分设备崩溃
  • OpenAL 音频格式按声道数动态选择;停止音乐时彻底清理 OpenAL 播放

技术改进

  • 新增 NCM 同步体系:NcmNetwork / NcmBroadcastHelper / NcmClientPlayer / NcmSyncS2CPacket / NcmClientExit
  • 新增补丁:PatchMicrophoneFallback(麦克风降级)/ PatchVerityPlatformOpenAl(OpenAL 错误清除)/ PatchNcmClientPlayerAndroid(Android 歌词位置)
  • 重构 NcmHelper(编号搜索 + index 播放)、VerityPlatform(完整 OpenAL 播放)、LyricHudRenderer、VerityTalkState、MemoryHelper、PersonaHelper、CnvCommand 等核心文件

v3.3

2026-08

友好模式 + 游戏内工具调用 + 配置整理

友好模式(FRIENDLY_MODE · cn 版独有)

  • 屏蔽所有恶魔变身逻辑与恐怖内容
  • 性格完全由 karma 驱动:<7 冷淡、7-14 中立、14-20 友好、>20 极友好、≥9000 天使
  • 强制阻止击杀任何实体(含村民),真正成为「游戏助手」
  • 仍处于 beta 阶段,欢迎反馈

游戏内工具调用

  • 配方查询 get_recipe:LLM 被强制在玩家询问合成/烧炼时调用,实时返回真实游戏配方
  • 已安装 Mod 探查 get_all_mods:可列出当前游戏所有已安装模组

老版物品给予机制(DROP_ITEM_LEGACY_MODE)

  • 由 @埋藏心底的悲伤 提出并强烈请求恢复的能力
  • 开关 ON 时 LLM 可指定 item_id 给予各种物品;开关 OFF(默认)时仅给泥土

自定义克隆音频开关

  • 音色克隆支持自定义参考音频
  • 新增 USE_CUSTOM_CLONE_AUDIO 独立开关
  • 自定义音频目录:config/verity/sample_audio/

稳定性修复

  • LLM 请求 60 秒超时,防止永久阻塞
  • 音频通道互斥管理:一次只播一个声音
  • TTS 即时打断:新请求立即替换正在播放的 TTS
  • 断线自动停止发声

技术改进

  • 新增 VerityModFlags 独立标志位管理
  • 新增 PersonaHelper 动态人设辅助类
  • 新增 ModEventsMixin / VerityEntityMixin Mixin 注入
  • v3.3 起移除 YACL 依赖

v3.2

2026-07-28

语速按钮 + 流式响应 + 自定义音色 + 黑屏开关

TTS 语速按钮控制

  • 滑条改为按钮循环切换 7 档:极慢 → 放慢 → 原速 → 稍快 → 加快 → 很快 → 极快
  • 仅适配 MiMo 模型,通过音频标签控制语速
  • 新增 SpeedLevel 枚举与 SpeedHelper 桥接类

MiMo 流式响应

  • 边收边播真流式:收到第一个 SSE chunk 即开始播放
  • 仅 MiMo 端点生效,配置位置:Base URL 组底部「启用流式响应」

自定义音色克隆

  • 在 config/verity/sample_audio/ 目录放入 mp3 样本音频
  • 输入框填文件名(不带后缀)即可使用,留空回退预设音色
  • 音频建议 8-30 秒,单人单语言说话

主菜单黑屏背景开关

  • 新增「主菜单黑屏背景」配置,开启显示模组黑屏背景,关闭恢复 MC 原版全景
  • 修复 Mixin 长期未加载问题

v3.1

2026-07-24

修复 + 初始化配置向导

首次启动初始化配置向导

  • 开场动画后弹出全屏初始化配置界面
  • Verity Mod 授权提示 + 模型选择提示
  • OAuth 授权流程:5 秒全屏提示 → 自动打开浏览器 → 2 分钟超时
  • 授权成功后检测模型连通性

修复

  • 下落叫声开关修复:FALL_SOUND_ENABLED 现在覆盖 causeFallDamage
  • OAuth 授权状态判断修复:改为检查 status == complete
  • LLM/STT/代理默认启用

v3.0

2026-07-24

Verity Mod 网站深度集成

Verity Mod 网站深度集成(核心更新)

  • Bridge 服务架构:启用后所有 LLM/TTS/STT 请求统一走 Verity Bridge 服务
  • License Key 授权系统:密钥存储于 config/verity-client.toml
  • Trust-all SSL 客户端:兼容自签名证书与各类代理环境
  • LLM 请求 60 秒超时

TTS 语音系统增强

  • 即时中断机制:新 TTS 请求立即中断并替换正在播放的语音
  • OpenAL 播放路径修复
  • 返回主菜单/断开时自动停止播放

聊天消息本地化

  • I'm alone... → 我好孤单……你去哪了?
  • Ayo chat... → 喂喂喂,怎么就让我这样消失了
  • The darkness... → 黑暗……消散了。谢谢你。

v2.75

2026-07-21

模型自定义 + 皮肤系统

TTS/STT 模型名可配置

  • TTS 模型名:用户手动输入,默认 mimo-v2.5-tts
  • STT 模型名:用户手动输入,默认 mimo-v2.5-asr

自定义皮肤系统

  • 将 16 张变体贴图(1024×1024 PNG)打包为 ZIP 放入 config/verity/skins/
  • GUI 中输入 ZIP 文件名即可切换,切换瞬间生效
  • 智能回退:皮肤名无效时自动使用内置默认皮肤

v2.5

2026-07-21

中国化重构

AI 配置系统重构

  • LLM / TTS / STT 三板块独立配置
  • LLM:支持任意 OpenAI 兼容 API(DeepSeek、通义千问、硅基流动等)
  • TTS:三种模式 — 内置 Piper / Base URL / MiMo 音色克隆
  • STT:两种模式 — 本地 Whisper / Base URL

MiMo 深度集成

  • mimo-v2.5-tts + mimo-v2.5-tts-voiceclone + mimo-v2.5-asr
  • 预置 3 组参考音频:Verity 默认、阿神同款、老牧师

界面完全重写

  • YACL GUI 全中文:分组标题、选项名、描述全部本地化
  • TTS/STT 模式下拉菜单显示中文名称

v2.0

2026-07

安卓适配

TTS 语音合成

  • 安卓端:通过 LWJGL OpenAL 播放 MiMo TTS 音频,适配 OpenSL 后端
  • 桌面端:保持 javax.sound.SourceDataLine 不变

STT 语音识别

  • 安卓端:通过 LWJGL JNI 直接采集麦克风
  • 支持启动器:ZalithLauncher 2.4.9+、PojavLauncher、FCL、HMCL-PE

v1.0

2026-07

首个中文版

配置系统重构

  • 新增 VerityConfig.java:完整的 LLM/TTS/STT 三板块配置系统
  • 删除原版硬编码的 Groq API Key 和 OpenRouter 配置
  • 新增 AiProvider 枚举:添加 CUSTOM 选项,支持任意 OpenAI 兼容 API

界面汉化

  • YACL 配置 GUI 全量中文化
  • zh_cn.json 语言文件覆盖模组内所有可见文本
  • AI 系统提示词改为中文

修复

  • 中文用户名麦克风崩溃修复
  • 首次启动 TTS 模型解压路径修复