
You are viewing a potentially older version of this package. View Latest Version
ValheimChestSort
箱子一键整理:界面内新增「整理」按钮(在物品堆叠按钮左侧),合并零散堆叠并按类别/名称重新排布。Adds a Sort button to the container UI next to Stack All.ValheimChestSort
给箱子加一个「一键整理」:打开任意容器(箱子、推车等),点击容器界面里 「物品堆叠」按钮左侧的「整理」按钮,
(或按快捷键 R),箱内物品立刻被 合并零散堆叠 并 按类别 / 名称重新排布,去掉空格,整整齐齐。
只重新摆放箱子里已有的物品,不移动、不丢弃、不改动任何物品的属性或数量(总数守恒)。
功能
- 界面按钮:在容器界面的原版「物品堆叠」按钮左边,自动添加一个「整理」按钮(克隆原按钮制作, 外观 / 字体 / 过渡动画与游戏一致)。中文界面显示「整理」,其他语言显示「Sort」,也可在配置中自定义。
- 快捷键:打开容器后按
R(可配置),与按钮功能相同。 - 合并堆叠:同种物品的零散堆叠会自动补满(例如 3 个 50/50 的木炭合成 1 个 50 + 1 个 100)。 只合并「名称 + 品质 + 世界等级 + 变体 + 自定义数据」完全一致的物品。
- 按类别排序:默认顺序为 材料 → 消耗品 → 弹药 → 武器 → 盾牌 → 护甲 → 工具/杂项,同类再按名称、 品质从高到低排列。
- 去掉空格:整理后物品从左上角开始逐行紧凑排列,不再有空档。
- 对箱子、推车等所有使用游戏
Container组件的容器都有效。 - 关闭 / 不点击时完全是原版行为,不影响任何原版操作。
操作
| 按键 / 按钮 | 作用 |
|---|---|
| 「整理」按钮 | 容器界面中、原版「物品堆叠」按钮左侧,点击即整理当前箱子 |
R |
整理当前打开的箱子(默认快捷键,可在配置中修改) |
用法:走到箱子前按 E 打开 → 点击「整理」按钮(或按 R)→ 箱子自动整理好 → 按 Esc 关闭。
整理时若手里正拖着物品,会提示先放下,避免误操作。
安装
方式一:r2modman / Thunderstore Mod Manager(推荐)
- 已在 Thunderstore 上架:在 mod 管理器里搜索
ValheimChestSort安装即可(会自动带入 BepInEx 依赖)。 - 本地包导入:下载本仓库
dist/下的SuperVikingDepartment-ValheimChestSort-1.0.0.zip,在 r2modman 中 Settings → Import local mod(或 Install from file)选择该 zip。
方式二:手动安装(直接启动游戏)
- 先安装 BepInExPack for Valheim(
denikson-BepInExPack_Valheim)。 - 把
ValheimChestSort.dll放入游戏根目录的BepInEx/plugins/。 - 启动游戏。
注意:用 r2modman 启动游戏时,生效的是 profile 目录,而不是游戏安装根目录下的
BepInEx。
配置
首次启动后生成 BepInEx/config/SuperVikingDepartment.ValheimChestSort.cfg:
| 配置项 | 默认值 | 说明 |
|---|---|---|
SortKey |
R |
整理快捷键。填 KeyCode 名称(R、T、B、LeftAlt、Mouse3 等)。 |
SortMode |
Category |
Category = 先类别后名称;Name = 直接按名称排。 |
MergeStacks |
true |
是否合并零散堆叠。 |
AddButton |
true |
是否在箱子界面「物品堆叠」按钮左边添加「整理」按钮。 |
ButtonLabel |
(空) | 「整理」按钮上的文字。留空 = 自动:中文界面「整理」,其他语言「Sort」。 |
DebugLogging |
false |
输出整理细节日志,用于排查。 |
改完需重启游戏。
会不会影响成就
不会。本 mod 不设置 Game.isModded、不触碰人物的 m_usedCheats、不给物品打作弊标记,
只是重新摆放箱内已有物品并触发原版的「物品变更」流程,不产生新物品、不改变数量。
兼容性
- 游戏版本:Unity 6 时期的 Valheim。
- 依赖:BepInEx 5.x(HarmonyX 随 BepInEx 自带)。
- 不与「一键装满 / 一键种田」等功能冲突。
- 单一热键、不占用原版按钮;如与其它 mod 的按键冲突,改
SortKey即可。
工作原理(简述)
- 打开容器时,游戏会把该容器的 ZDO 所有权移交给打开的玩家(
Container.RPC_RequestOpen), 因此本地对容器的改动会被Container.Save()写回 ZDO 并同步给其他玩家。 - 「整理」按钮通过 克隆原版「物品堆叠」按钮 生成:外观、字体、过渡动画沿用原版,无需自带贴图与字体; 若按钮所在父节点带布局组,按钮靠兄弟顺序自动排到原按钮左侧,否则由一个轻量组件每帧按相对位置对齐。
- 本 mod 通过反射取到当前打开的容器(
InventoryGui.m_currentContainer),对其Inventory做: 合并堆叠 → 排序 → 按行优先重设每件物品的m_gridPos,最后调用一次原版Inventory.Changed()刷新界面并触发存盘。整个过程是原版数据结构的重排,不绕过任何游戏逻辑。
从源码构建
-
安装 .NET SDK(目标
netstandard2.1)与 Node.js(打包脚本用)。 -
把本仓库克隆到 Valheim 安装目录下(默认假定
..就是游戏根目录)。 -
游戏根目录需已安装 BepInEx(
BepInEx/core/BepInEx.dll、BepInEx/core/0Harmony.dll)。 -
构建并生成发布包:
./build-package.sh 你的ThunderstoreTeam名 # 产物:dist/你的Team名-ValheimChestSort-版本号.zip
仓库不在游戏目录下时,用属性覆盖路径:
dotnet build -c Release -p:ValheimDir="C:\Steam\steamapps\common\Valheim\"
上传到 Thunderstore
- 运行
./build-package.sh SuperVikingDepartment生成dist/SuperVikingDepartment-ValheimChestSort-1.0.0.zip。 - 打开 https://thunderstore.io/c/valheim/create/,登录后选择该 zip 上传。
zip 内容(Thunderstore 要求):
manifest.json 包元数据
README.md 商店页正文
CHANGELOG.md 更新日志
icon.png 256x256 图标
LICENSE 许可证
plugins/ValheimChestSort.dll ← 会自动路由到 BepInEx/plugins/
仓库结构:
ChestSortPlugin.cs 插件源码
ValheimChestSort.csproj 项目文件
manifest.json Thunderstore 元数据
README.md / CHANGELOG.md / LICENSE
icon.png Thunderstore 图标(256x256)
build-package.sh 一键构建 + 打包
tools/zip.js 无依赖 ZIP 打包器(保证 zip 内为正斜杠路径)
tools/make-icon.js 重新生成 icon.png
已知问题 / 说明
- 修改按键或开关插件后需要重启游戏,无法热插拔。
- 若按键无效,把
BepInEx/LogOutput.log发到问题区。加载成功会有ValheimChestSort loaded一行。 - 整理是「就地重排」,不会把玩家背包里的物品放进箱子;只整理当前打开的那个容器。
来源与许可
MIT License,详见仓库内 LICENSE。

