Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
ValheimChestNaming
给箱子起名字:打开箱子按 N(可在游戏设置里改键),用游戏原生输入框改名,名字显示在悬停提示与箱子界面标题上。Lets you name containers with the games native text dialog; hotkey configurable in-game.
| Date uploaded | a month ago |
| Version | 1.2.2 |
| Download link | SuperVikingDepartment-ValheimChestNaming-1.2.2.zip |
| Downloads | 183 |
| Dependency string | SuperVikingDepartment-ValheimChestNaming-1.2.2 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README
ValheimChestNaming
给箱子起名字。
打开箱子后按一个快捷键,就会弹出游戏原生的文字输入框(和给告示牌、传送门起名用的是同一个), 输入什么,箱子就叫什么。名字会显示在准星悬停提示和箱子界面标题上, 准星对着箱子时还能看到一行操作提示,告诉你按哪个键改名。
名字存在箱子自己身上,随存档保存、多人游戏自动同步——不需要配置文件, 也不依赖主机或某个玩家在线。
本 mod 只增加「起名」这一件事:不改任何配方、产量、容器容量或游戏规则。
功能
- 快捷键改名:准星对着箱子按
N(可在游戏「设置 → 键盘与鼠标」里改键)即可改名—— 开没开箱子都行;弹出游戏原生输入框,输入即生效;留空则恢复默认名字。 - 悬停提示:看着箱子时显示自定义名字,并在原版「按 E 打开」下方追加一行快捷键提示。
- 界面标题:箱子界面顶部的标题显示自定义名字。
- 多人同步:名字写进箱子的 ZDO,随存档与联机同步,所有玩家都能看到。
- 私有区域内才可改名:默认与原版告示牌一致,防止别人给你的箱子乱起名字。
操作
| 按键 | 作用 |
|---|---|
E |
打开箱子(原版) |
N |
打开改名输入框(开着箱子或准星对着箱子都行;可在游戏设置里改键) |
回车 |
确认改名 |
Esc |
取消改名 |
准星对着箱子时会看到:
矿石箱
[E] 打开 (长按全部堆叠)
[N] 重命名
安装
方式一:r2modman / Thunderstore 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(默认绑<Keyboard>/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\"
上传到 Thunderstore
zip 内结构如下(Thunderstore 要求元数据在根目录、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。
CHANGELOG
Changelog
1.2.2
- 更新图标:图标右下角键帽上的字形由
F2改为N,与 1.1.0 起已生效的默认快捷键一致。 仅改tools/make-icon.js的字形绘制,重新生成icon.png;键帽与图标其余部分未改动。
1.2.1
- 修复:设置页「键盘与鼠标」里看不到「重命名箱子」一行。
根因是设置页注入的补丁被挂成了 postfix,跑在游戏
SetupKeys()接线之后, 插进去的行赶不上注册点击监听,因而不可见/不可用;现已改为正确的 prefix 注入。 - 修复:按键注册状态在插件加载时被误判。插件加载远早于游戏的
ZInput初始化, 原先的启动诊断会必然打印「未注册」,属误导信息;现改为在ZInput.Reset补丁里 于注册成功时输出 Info 级日志,并在注入设置页前主动补一次注册作为兜底。 - 移除对静态方法
ZInput.Initialize的错误__instance补丁(已由ZInput.Reset覆盖)。
1.2.0
- 打开箱子前也能改名:没开任何界面时,准星对着箱子按
N即可直接弹出改名输入框, 不必先按E开箱。输入抑制沿用原版聚合判定(聊天/控制台/菜单/死亡/传送等场景不触发)。 - 开箱后按
N的原路径保持不变;两条路径互斥,不会重复弹框。
1.1.0
- 快捷键可在游戏内设置界面修改:按键注册进了原版键位系统(ZInput), 在「设置 → 键盘与鼠标」最下方新增「重命名箱子」一行,点击即可像原版按键一样改键; 绑定随游戏存档持久化,「重置按键」会恢复默认。
- 默认快捷键 F2 → N:N 不与原版任何按键冲突(V 已被 MassFarm mod 占用,故不用 V)。
- 悬停提示与箱子改键联动:改键后提示行会显示新按键名。
- 聊天栏有焦点时不再触发改名快捷键,避免误把 N 打进聊天框。
1.0.0
- 首个版本:给箱子起名字。
- 快捷键:打开箱子后按
F2(可配置),弹出游戏原生文字输入框改名;留空则恢复默认名字。 - 悬停提示:看着箱子时显示自定义名字,并在原版「按 E 打开」下方追加一行
[F2] 重命名提示。 - 界面标题:箱子界面顶部的标题显示自定义名字。
- 多人同步:名字存在箱子自身的 ZDO 里,随存档与多人联机一起同步。
- 权限:默认只能在自己的私人区域内改名,与原版告示牌一致。