ValheimCraftFromContainers
制作台直接使用附近箱子里的材料:工作台/熔炉/切石机等制作类建筑与锤子建造,都能自动从周围容器取料并扣料,无需把材料背在身上。Craft and build using resources from nearby chests.ValheimCraftFromContainers
让制作台直接使用附近箱子里的材料:打开工作台 / 熔炉 / 切石机 / 工匠台 / 黑锻炉 / 铁锅等任意制作类建筑时,只要箱子在范围内,就无需先把材料搬到身上;拿锤子建造时也一样。扣料顺序为「先背包、后箱子」,材料数量完全按原版计算。
只改变"从哪里拿材料",不改任何配方、产量或材料数量。
功能
- 制作台取料:制作、升级任意物品时,自动把玩家周围(以及制作台周围)容器里的同种材料计入"可用材料"。材料足够即可点击制作。
- 锤子建造取料:放置建筑时,身上的材料不够会自动从附近箱子扣除。
- 建造按物体位置判定制作台:手持锤子放置时,判断"是否在对应制作台范围内"以物体(幽灵)所在位置为准;只要物体落在某个制作台范围内即可建造,即使人站在台子范围外。制作台范围重叠时两个都会检测,其范围内箱子里的材料都能用上。
- 不再误报材料不足:建造 UI / 制作面板里,材料其实在箱子里时不再播放红色闪烁动画。
- 智能扣料:永远优先扣玩家背包,不足的部分才从箱子补扣,且不会多扣。
- 多人安全:默认只使用你有权访问的容器,私人箱子(仅建造者可用)不会被他人误用。
- 范围可调:默认以玩家为中心 10 米,并额外以当前制作台、以及"物体所处制作台"为中心按其建造半径搜索;把箱子放在工作台旁边即可。
兼容范围
- 覆盖所有
CraftingStation:工作台、锻造台(熔炉)、切石机、工匠台、黑锻炉、铁锅、以及各类扩展(StationExtension)提升等级后的范围。 - 锤子 / 锄头等建造工具的放置同样生效。
- 不覆盖冶炼炉 / 炭窑的「放矿、放燃料」操作——那是另一套交互(把矿石装进熔炉),本 mod 不涉及。
- 不覆盖「只取一种材料」类特殊配方(该类配方需要材料在背包中才能判定与消耗,保持原版行为)。
操作
无需按键,装上即生效。打开制作台或手持锤子建造时自动从附近箱子取料。
安装
方式一:r2modman / Thunderstore Mod Manager(推荐)
- 在 mod 管理器里搜索
ValheimCraftFromContainers安装即可(会自动带入 BepInEx 依赖)。 - 本地包导入:下载
dist/SuperVikingDepartment-ValheimCraftFromContainers-1.0.0.zip,在 r2modman 中 Settings → Import local mod(或 Install from file)选择该 zip。 - 手动放入 profile:把
ValheimCraftFromContainers.dll放到%APPDATA%\r2modmanPlus-local\Valheim\profiles\<你的Profile>\BepInEx\plugins\下(可放在任意子文件夹)。
方式二:手动安装(直接启动游戏)
- 先安装 BepInExPack for Valheim(
denikson-BepInExPack_Valheim)。 - 把
ValheimCraftFromContainers.dll放入游戏根目录的BepInEx/plugins/。 - 启动游戏。
配置
首次启动后生成 BepInEx/config/SuperVikingDepartment.ValheimCraftFromContainers.cfg:
| 配置项 | 默认值 | 说明 |
|---|---|---|
Enabled |
true |
总开关。关闭后完全恢复原版(材料必须带在身上)。 |
Range |
10 |
以玩家为中心搜索容器的半径(米)。 |
UseStationBuildRange |
true |
是否额外使用制作台自身的建造半径(随等级/扩展变大)作为搜索范围。 |
RequireAccess |
true |
只使用你有权访问的容器;私人箱子仅其建造者可用。 |
DebugLogging |
false |
输出补丁细节日志,用于排查。 |
改完需重启游戏。
会不会影响成就
不会。本 mod 不设置 Game.isModded、不触碰人物的 m_usedCheats、不给物品打作弊标记。材料的判定与扣除完全走游戏自身的 HaveRequirements / ConsumeResources 管线,只是把"附近容器"也纳入统计。若你同时使用控制台作弊命令或其他主动标记 mod 的插件,则属于那些功能自身的影响。
工作原理(简述)
- 需求判定:给
Player.HaveRequirementItems(配方)与Player.HaveRequirements(Piece, mode)(建造)挂后置补丁。当原版判定"材料不足"时,把附近容器的库存也算进来;满足则放行。 - 建造的制作台判定:
Piece需要制作台时,判断位置改为"玩家位置或物体位置任一命中",从而支持"人站在台外、把物体放进台内";HaveBuildStationInRange本身会扫过全部同类制作台,所以范围重叠时两个都会命中。 - 建造 UI 文本:
InventoryGui.SetupRequirement后置补丁在"背包 + 容器"够数时把材料数量文本恢复为白色,不再播放红色闪烁;Hud.SetupPieceInfo后置补丁在"物体位置"命中制作台时恢复制作台指示的颜色与区域标记。 - 实际扣料:给
Player.ConsumeResources挂前置+后置补丁。前置记录"玩家背包缺多少",原版优先从背包扣除(保持原版手感),后置再把剩余缺口从附近容器里扣除。 - 容器查找:每 5 秒扫描一次场景中的容器并缓存,同帧内的多次查询直接复用结果,避免性能开销。
- 逐个挂载:补丁逐个手动挂载(而非
PatchAll),某个目标方法若因游戏版本变动而改名,只会跳过它并记录日志,不会导致其余补丁一起失效。 - 多人同步:改动容器前若容器归其他客户端所有,先
ClaimOwnership,保证扣料会正确同步。
因此材料数量与原版严格一致:不会多扣、不会凭空产生,也不会绕过制作台等级、屋顶、火焰等原版限制。
从源码构建
-
安装 .NET SDK(目标
netstandard2.1)与 Node.js(打包脚本用)。 -
把本仓库放到 Valheim 安装目录下(默认假定
..就是游戏根目录)。 -
游戏根目录需已安装 BepInEx(
BepInEx/core/BepInEx.dll、BepInEx/core/0Harmony.dll)。 -
构建并生成发布包:
./build-package.sh 你的ThunderstoreTeam名 # 产物:dist/你的Team名-ValheimCraftFromContainers-版本号.zip
仓库不在游戏目录下时,用属性覆盖路径:
dotnet build -c Release -p:ValheimDir="C:\Steam\steamapps\common\Valheim\"
上传到 Thunderstore
- 运行
./build-package.sh SuperVikingDepartment生成dist/SuperVikingDepartment-ValheimCraftFromContainers-1.0.0.zip。 - 打开 https://thunderstore.io/c/valheim/create/,登录后选择该 zip 上传。
zip 内容(Thunderstore 要求):
manifest.json 包元数据
README.md 商店页正文
CHANGELOG.md 更新日志
icon.png 256x256 图标
LICENSE 许可证
plugins/ValheimCraftFromContainers.dll ← 会自动路由到 BepInEx/plugins/
已知问题 / 说明
- 修改配置后需要重启游戏,无法热插拔。
- 用 r2modman 启动时,插件与配置都在 profile 目录下,游戏安装根目录的
BepInEx不参与加载。 - 箱子在范围内但隔着墙也同样生效(按距离判定,不做视线检测),与原版制作台"看得到看不到都算"的判定一致。
- 若按键/功能无效,把
BepInEx/LogOutput.log发到问题区。加载成功会有ValheimCraftFromContainers loaded一行,并附带各补丁的 prefix/postfix 计数。
来源与许可
MIT License,详见仓库内 LICENSE。欢迎提 issue / PR。


