SkyBlock 物品列表 + 增强存储兼容性

SkyBlock 物品列表 + 增强存储兼容性

一个简单的SkyBlock物品列表模组与增强存储的集成

工具

SkyBlock Item List + Enhanced Storage 兼容

📌 重要提示
此模组需要安装 旧版本 的 Enhanced Storage(0.8.2 或更低版本),因为新版本对其代码库进行了彻底重写“以提高可靠性和可维护性”。此模组不会更新以支持新版本的 Enhanced Storage。

一个简单的模组,用于将 Enhanced Storage 与 SkyBlock Item List 集成。此模组实现两件事:

  • 实现一个物品列表插件,在 Enhanced Storage 的界面中添加排除区域。
  • 将 Enhanced Storage 的 UI 下移,防止其与 Item List 的翻页控件重叠。

“常见”问题

我是否需要同时安装 SkyBlock Item List 和 Enhanced Storage?

是的,此模组依赖这两个模组,因为它会修补 Enhanced Storage 并为 SkyBlock Item List 实现一个插件。如果你的游戏没有同时安装这两个模组,仍然可以正常运行,但此模组会在启动时检测到缺少任一所述模组而自行禁用。

为什么专门为此创建一个独立的模组?

我原本打算向 Enhanced Storage GitHub 仓库 发起拉取请求。可惜的是,由于以下原因,我不得不放弃这个计划。

简短回答: Enhanced Storage 的源代码……嗯,我们只能说“比较独特”。尝试为其贡献代码体验不佳,且不值得我投入精力,因此我得出结论,最好的做法就是为此创建一个独立的模组。

详细(技术性)回答:

Enhanced Storage 已经与其他模组完成了一些集成(特别是 Reliable Recipe Viewer 和 Skyblocker)。自然地,我想遵循类似的代码模式以符合维护者的习惯。

然而,上述这些集成是通过反射实现的,目的是将集成的模组保持为软依赖(顺便说一句,这种做法并不必要,因为有更合理的方法来实现这一点)。

要创建 SkyBlock Item List 的插件,你需要创建一个类来实现其 API 中的 Plugin 接口,并在你的模组 fabric.mod.json 中添加 skyblock-item-list 入口点。

考虑到这一点,如果我想向 Enhanced Storage 发起拉取请求,我有三个选择:

  1. 遵循 Enhanced Storage 维护者的集成方式,使用反射。这将需要使用 Proxy 来实现 SkyBlock Item List 的 Plugin 接口,对于这个用例来说太小题大做了。同时,还需要以某种方式通知 Item List 应用该插件,而不在模组的元数据文件中添加入口点,因为我认为维护者会希望避免这样。显然,我没有选择这个选项。

  2. 放弃 SkyBlock Item List 的插件 API 系统,直接通过反射注册排除区域。我不想这样做,因为这是一个非常 hacky 的解决方案,而且一旦 SkyBlock Item List 更新其内部排除区域注册系统,更容易出现不兼容问题。

  3. 忽略维护者的习惯,直接将 SkyBlock Item List 作为依赖项(这仍然属于软依赖)。在贡献项目时,这种做法非常糟糕,因此出于原则,我不能选择这个选项。

由于这些选项都无法令我满意,我尝试通过模组主页提供的 Discord 服务器联系维护者。但该服务器的结构非常混乱,我不想参与其中。因此,我决定创建这个模组。

你为什么不创建一个新的储物覆盖模组?

我不想承诺启动一个具有如此重要功能的新项目,尤其是已经有模组(基本)能做好这件事了。也许将来会考虑。

你会允许将此模组直接集成到 Enhanced Storage 中吗?

当然可以,前提是实现符合 GPL-3.0 许可证的要求,这也是本项目采用的许可证。

Enhanced Storage 的维护者或贡献者也可以随时联系我,通过 Discord 私信或共享服务器,或其他讨论平台来共同解决这个问题。

为什么这个模组的名字这么拗口?

是的。