ValheimChestNaming
給箱子起名字:打開箱子按 N(可在遊戲設置裏改鍵),用遊戲原生輸入框改名,名字顯示在懸停提示與箱子界面標題上。Lets you name containers with the games native text dialog; hotkey configurable in-game.
模組介紹 作者原文
ValheimChestNaming
給箱子起名字。
打開箱子後按一個快捷鍵,就會彈出遊戲原生的文字輸入框(和給告示牌、傳送門起名用的是同一個),
輸入什麼,箱子就叫什麼。名字會顯示在準星懸停提示和箱子界面標題上,
準星對着箱子時還能看到一行操作提示,告訴你按哪個鍵改名。
名字存在箱子自己身上,隨存檔保存、多人遊戲自動同步——不需要配置文件,
也不依賴主機或某個玩家在線。
本 mod 只增加「起名」這一件事:不改任何配方、產量、容器容量或遊戲規則。
功能
- 快捷鍵改名:準星對着箱子按 N(可在遊戲「設置 → 鍵盤與鼠標」裏改鍵)即可改名——
開沒開箱子都行;彈出遊戲原生輸入框,輸入即生效;留空則恢復默認名字。
- 懸停提示:看着箱子時顯示自定義名字,並在原版「按 E 打開」下方追加一行快捷鍵提示。
- 界面標題:箱子界面頂部的標題顯示自定義名字。
- 多人同步:名字寫進箱子的 ZDO,隨存檔與聯機同步,所有玩家都能看到。
- 私有區域內纔可改名:默認與原版告示牌一致,防止別人給你的箱子亂起名字。
操作
| 按鍵 | 作用 |
| --- | --- |
| E | 打開箱子(原版) |
| N | 打開改名輸入框(開着箱子或準星對着箱子都行;可在遊戲設置裏改鍵) |
| 回車 | 確認改名 |
| Esc | 取消改名 |
準星對着箱子時會看到:
礦石箱
[E] 打開 (長按全部堆疊)
[N] 重命名
安裝
方式一:r2modman Mod Manager(推薦)
- 在 mod 管理器裏搜索 ValheimChestNaming 安裝(會自動帶上 BepInEx 依賴)。
- 本地導入:把 dist/SuperVikingDepartment-ValheimChestNaming-.zip 拖進
Settings → Import local mod。
方式二:手動安裝(直接啓動遊戲)
- 先裝好 BepInExPack for Valheim(denikson-BepInExPack_Valheim)。
- 把 ValheimChestNaming.dll 放進 BepInEx/plugins/。
- 啓動遊戲。
用 r2modman 啓動時,遊戲根目錄的 BepInEx 會被配置文件的目錄覆蓋,
手動放進根目錄的插件在 r2modman 下不會生效——請裝進對應配置裏。
配置
配置文件:BepInEx/config/SuperVikingDepartment.ValheimChestNaming.cfg
| 配置項 | 默認值 | 說明 |
| --- | --- | --- |
| Enabled | true | 總開關。關閉後不顯示提示、不能改名,完全恢復原版。 |
| CharacterLimit | 30 | 名字最大長度,同時作爲輸入框的輸入上限。 |
| ShowHoverHint | true | 是否在懸停提示裏顯示快捷鍵那一行。 |
| ShowInContainerTitle | true | 是否把箱子界面頂部標題換成自定義名字。 |
| RequireAccess | true | 是否只在私人區域內才能改名。 |
| DebugLogging | false | 輸出排查日誌,正常遊玩建議關閉。 |
改名快捷鍵不在配置文件裏:它註冊進了遊戲原版鍵位系統,默認 N,
在遊戲內「設置 → 鍵盤與鼠標」列表最下方的「重命名箱子」一行修改,
綁定隨遊戲自動持久化,「重置按鍵」會恢復默認 N。
會不會影響成就
不會。本 mod 不設置 Game.isModded、不觸碰 m_usedCheats,也不改動任何遊戲規則,
只讀寫箱子自身的名字數據。
兼容範圍
- 所有容器:普通箱子、私人箱子、鐵箱、木桶、手推車(只要它本質上是 Container)。
- 多人遊戲:名字由 ZDO 同步,所有客戶端可見。
- 與原版告示牌/傳送門的輸入框共存:複用同一套 UI,行爲一致。
工作原理(簡述)
- 存名字:把名字寫進箱子自己的 ZDO(遊戲用來存世界對象數據的機制),
做法與原版告示牌 Sign.SetText 完全一致。多人遊戲裏先取得該箱子的所有權再寫,
之後由遊戲自身的 ZDO 同步機制廣播給其他玩家。
- 改名字:調用原版 TextInput.instance.RequestText(...),傳入本 mod 實現的一個
TextReceiver。玩家按回車後,遊戲回調這個對象,本 mod 再寫進 ZDO。
完全複用原版輸入框,不自己造輪子。
- 顯示名字:
- 懸停提示:補丁追加在原版 Container.GetHoverText() 的結果後面。
- 界面標題:補丁掛在 InventoryGui.UpdateContainer() 上——原版正是在這裏每幀
重寫標題的,補在同一個方法裏才能穩定覆蓋。
- 不改 Container.m_name:那是 prefab 上的序列化字段,改了不會存進存檔,
還會污染同 prefab 的其它箱子,所以只走 ZDO。
- 快捷鍵接入原版鍵位系統:啓動時通過反射把按鈕註冊進 ZInput(默認綁 /n,
標記爲可改鍵),並在設置界面 KeyboardMouseSettings.SetupKeys() 後克隆一行原版按鍵行
加進 m_keys 列表,改鍵、衝突提示、重置默認、保存/加載全部複用原版邏輯。
- 兩條改名觸發路徑,天然互斥:
- 開着箱子:補丁掛在 InventoryGui.Update 上,檢測到按鍵就彈輸入框(界面開着時才跑);
- 沒開箱子:插件自身的 Update() 用原版聚合判定 Player.TakeInput() 過濾掉
聊天/控制台/菜單/死亡/傳送等場景,再取準星所指的箱子彈輸入框;
- 背包界面開着時 TakeInput() 恆爲 false,界面關着時開箱路徑拿不到容器,
所以同一按鍵不會一幀裏彈兩次框。
- 按鍵提示顯示當前綁定名:走 Localization.GetBoundKeyString,
在設置界面改鍵後,懸停提示會自動顯示新按鍵名。
從源碼構建
需要.NET SDK 與 Node(打包器用 Node 寫)。
cd ValheimChestNaming
dotnet build -c Release # 產物:bin/Release/netstandard2.1/ValheimChestNaming.dll./build-package.sh # 打包:dist/SuperVikingDepartment-ValheimChestNaming-.zip
node tools/make-icon.js # 重新生成 icon.png(可選)
工程默認假定本目錄位於遊戲根目錄下(.. 即 Valheim 安裝目錄)。
若在別處構建,可覆蓋路徑:
dotnet build -c Release -p:ValheimDir="C:\...\steamapps\common\Valheim\"
上傳到
zip 內結構如下( 要求元數據在根目錄、DLL 走 plugins/ 路由):
manifest.json
README.md
CHANGELOG.md
LICENSE
icon.png
plugins/ValheimChestNaming.dll
已知問題 / 說明
- 手柄玩家:改名快捷鍵默認沒有對應的手柄綁定(提示行會回落顯示鍵鼠鍵名)。
可以在設置界面的改鍵對話框裏給該行綁一個手柄鍵;暫時不用手柄改名的話忽略即可。
- 若 N 與你的其它 mod 衝突,在遊戲「設置 → 鍵盤與鼠標」裏改鍵即可,無需重啓。
- 名字過長會擠佔懸停提示的寬度,建議保持在 30 字符以內。
排查
改裝後沒反應時,看 BepInEx/LogOutput.log:
- 啓動時會打印每個補丁掛載情況,例如
[ChestNaming][diag] Container.GetHoverText: prefix=0, postfix=1。
postfix=1 表示補丁已生效;若爲 0 或出現 未找到... 的錯誤,說明遊戲版本不兼容。
- 把 DebugLogging 設爲 true 可看到改名讀寫的細節日誌。
來源與許可
MIT License,詳見倉庫內 LICENSE。
安裝與使用 安裝:BepInEx 外掛
- 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
- 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
- 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
- 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。
帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。 多人連線時,主機與所有用戶端需要安裝一致的模組。
下面這些內容需要先安裝,否則該模組不會生效: