太空宝宝库存系统

太空宝宝库存系统

用于添加多个人物背包的框架

最初创建这个框架是为了让我的垂直工具栏能够与其他物品栏模组良好配合,我开发了这个框架,使模组作者能够添加多个个人物品栏。
什么是 SV_InventorySystem?
SV_InventorySystem 是一个星露谷物语 SMAPI 模组框架,支持每个农夫拥有多个物品栏。不再局限于单个 36 格物品栏(或你的背包模组提供的任何数量的槽位),模组现在可以挂钩到这个系统,提供额外的独立物品栏,与游戏工具系统无缝协作。
工作原理
该框架使用 Harmony 运行时修补来拦截 Farmer 类的 CurrentItemActiveItemCurrentToolIndex 属性。这意味着:
- 当你从任何物品栏(包括额外物品栏)选择工具时,游戏会无缝地从正确的物品栏中获取它
- 工具使用、装备和交互与基础游戏物品栏的表现完全一致
- 无需视觉故障或变通方法——这是游戏引擎级别的真正集成
- 多个模组可以各自提供自己的物品栏,它们都能协同工作
主要特性
- 多物品栏管理器:提供简洁的 API,用于跨多个物品栏添加、检索和管理物品
- Harmony 补丁:自动拦截 Farmer 属性访问,以路由到正确的物品栏
- SMAPI 反射回退:包含一个基于 SMAPI 的替代辅助工具,以兼容不同的系统配置
- 全局索引转换:无缝地将全局工具索引转换为(物品栏、局部)配对,确保游戏始终找到正确的物品
- 可配置:使用简单的 config.json 在 Harmony 和 SMAPI 反射方法之间切换
给模组作者
要在你的模组中使用此系统:
1. 在 manifest.json 中添加 SV_InventorySystem 作为依赖项
2. 调用 Helper.ModRegistry.GetApi<IMultiInventoryManager>("SpaceBaby.SV_InventorySystem") 以获取管理器
3. 使用 AddInventory(farmer, size) 添加物品栏
4. 使用 GetInventory(farmer, index) 访问任何物品栏
5. 使用 TranslateGlobalIndex(farmer, index) 将工具槽位转换为物品栏引用
6. 当农夫选择不同工具时,调用 OnToolIndexChanged()
集成示例
附带的垂直工具栏模组展示了完整集成——它提供了 5 个额外的工具槽位,与多物品栏系统无缝协作。物品可以在基础物品栏和垂直工具栏槽位之间拖拽,从任何槽位选择的工具都会正常激活和运行。
技术细节
- 应用的补丁:Farmer.CurrentItem(获取器)、Farmer.ActiveItem(获取器/设置器)、Farmer.CurrentToolIndex(设置器)
- 物品栏跟踪:按农夫使用 UniqueMultiplayerID 以确保多人游戏安全
- 性能:使用高效的字典缓存,开销极小
- 兼容性:适用于 SMAPI 4.0+、星露谷物语 1.6+
这个框架减轻了多物品栏支持带来的麻烦,让模组作者可以专注于他们的实际功能,同时保持完整的游戏兼容性。