Mod 自带条带切换(Mod Self-Drawn Bar)

基本信息

属性 值
实现类 com.caedis.duradisplay.utils.ModSelfDrawnBar
关联 mod GregTech(GT5-Unofficial)、EnderIO
调用时机 每次 ConfigDurabilityLike.postLoadConfig 与配置热重载时

功能

当 DuraDisplay 的某个 overlay 接管耐久度/能量显示后,必须同步关闭 GT 自带的 mRenderItemDurabilityBar / mRenderItemChargeBar 与 EIO 自带的 Config.renderDurabilityBar / Config.renderChargeBar,否则会双重显示。ModSelfDrawnBar 用 Optional<Boolean> 缓存原 mod 的开关值,关闭 DuraDisplay 时还原。

实现上是反射访问 GTMod.gregtechproxy 与 crazypants.enderio.config.Config 的 static 字段;任一 mod 不存在时对应字段为 Optional.empty(),且该次切换整体 try/catch NoClassDefFoundError 跳过,不影响其他 mod。

## 静态字段 目标 含义
GTDurabilitybar GTMod.gregtechproxy.mRenderItemDurabilityBar GT 自带耐久度条开关
GTChargebar GTMod.gregtechproxy.mRenderItemChargeBar GT 自带能量条开关
EIOChargebar crazypants.enderio.config.Config.renderChargeBar EIO 自带能量条开关
EIODurabilitybar crazypants.enderio.config.Config.renderDurabilityBar EIO 自带耐久度条开关

公共 API

方法 行为
changeEIOChargebar(boolean) 把 EIOChargebar 设为传入值;首次调用时把当前值快照到 Optional
changeEIODurabilitybar(boolean) 同上,耐久度条
changeGTDurabilitybar(boolean) 同上,GT 耐久度条
changeGTChargebar(boolean) 同上,GT 能量条
restoreEIOChargebar() 若快照存在,恢复 EIO 能量条
restoreEIODurabilitybar() 恢复 EIO 耐久度条
restoreGTDurabilitybar() 恢复 GT 耐久度条
restoreGTChargebar() 恢复 GT 能量条
changeChargebar(boolean) changeEIOChargebar + changeGTChargebar
changeDurabilitybar(boolean) changeEIODurabilitybar + changeGTDurabilitybar
restoreChargebar() restoreEIOChargebar + restoreGTChargebar
restoreDurabilitybar() restoreEIODurabilitybar + restoreGTDurabilitybar
change(boolean) changeChargebar + changeDurabilitybar
restore() restoreChargebar + restoreDurabilitybar

调用映射(来自 ConfigDurabilityLike.postLoadConfig 覆盖点)

配置项 overlay 启用且 DuraDisplayConfig.Enable=true 否则
durability.Enable OverlayDurability changeDurabilitybar(false) restoreDurabilitybar()
charge.Enable OverlayCharge changeChargebar(false) restoreChargebar()
container.Enable OverlayContainer changeDurabilitybar(false) restoreDurabilitybar()
gadgets.Enable OverlayGadgets 无(不切换) 无
potion_brew.Enable OverlayPotionBrew 无(不切换) 无

错误处理

每个方法体内:

try {
    // 反射/字段访问
} catch (NoClassDefFoundError e) {
    DuraDisplay.LOG.info("GT not found, skipping ...");
}

无对应 mod 时输出 INFO 日志,不抛错。Optional.empty() 状态下 restore* 也是 no-op,避免 NullPointer。

相关条目