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 模型解壓路徑修復