Skip to content

MiniHUD 与农夫乐事模组兼容性崩溃 #404

@yandujun363

Description

@yandujun363

MiniHUD 与农夫乐事模组兼容性崩溃

问题描述

模组: MiniHUD
冲突模组: Farmer's Delight (农夫乐事)
Minecraft版本: 1.21.8
Fabric Loader: 0.17.3

当按住 Alt 键(容器内容渲染)指向农夫乐事模组的加工方块时,游戏立即崩溃。

崩溃详情

崩溃模组: MiniHUD 0.36.4 + MaLiLib 0.25.5
错误类型: IllegalStateException: No key id in MapLike
崩溃线程: Render thread

复现步骤

  1. 安装 MiniHUD 和 Farmer's Delight 模组
  2. 在世界中放置农夫乐事的加工方块(砧板、烹饪锅等)
  3. 在加工方块中放入物品(如橡木原木)
  4. 按住 Alt 键并将准星指向该方块
  5. 游戏立即崩溃

崩溃日志摘要

java.lang.IllegalStateException: No key id in MapLike[{Items:[{Slot:4b,count:64,id:"minecraft:oak_log"}]}]
	at fi.dy.masa.malilib.util.nbt.NbtInventory.fromNbtSingle(NbtInventory.java:392)
	at fi.dy.masa.minihud.renderer.InventoryOverlayHandler.getTargetInventoryFromBlock(InventoryOverlayHandler.java:415)

受影响的方块

  • 砧板 (Cutting Board)
  • 烹饪锅 (Cooking Pot)
  • 其他农夫乐事加工容器

根本原因分析

农夫乐事模组使用自定义的NBT格式存储容器物品数据,而 MiniHUD 的 NbtInventory.fromNbtSingle() 方法期望标准容器的NBT格式,导致解析失败。

建议的修复方案

  1. 添加异常处理(推荐):
// 在 NbtInventory.fromNbt() 或 InventoryOverlayHandler 中添加 try-catch
try {
    inventoryData = NbtInventory.fromNbt(nbtData);
} catch (IllegalStateException e) {
    logger.warn("无法解析容器NBT数据,跳过渲染: " + e.getMessage());
    return null; // 或空的库存数据
}
  1. 兼容农夫乐事的NBT格式

    • 检测农夫乐事方块的NBT结构
    • 实现专门的解析逻辑
  2. 配置选项

    • 添加农夫乐事方块的黑名单
    • 允许用户禁用特定方块的容器渲染

临时解决方案

用户目前可以通过以下方式避免崩溃:

  • 取消 Alt 键的容器渲染绑定
  • 完全禁用容器内容渲染功能

环境信息

  • Minecraft: 1.21.8
  • Fabric API: 0.134.0
  • MiniHUD: 0.36.4
  • MaLiLib: 0.25.5
  • Farmer's Delight: 1.21.8-3.3.1+refabricated

附加信息

这个问题影响了用户体验,因为:

  • 崩溃发生在渲染线程,直接导致游戏退出
  • 没有优雅的错误处理,用户无法恢复
  • 影响了农夫乐事模组的正常使用

请考虑在下一个版本中修复这个兼容性问题,谢谢!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions