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。
相关条目
- 耐久度 Overlay -
postLoadConfig调changeDurabilitybar - 充能 Overlay -
postLoadConfig调changeChargebar - 容器 Overlay -
postLoadConfig调changeDurabilitybar - 配置系统 -
Enable=false路径调restore()