经典状态条(Classic Bar)

基本信息

属性 值
启用开关 ClassicBarConfig.ClassicBarEnable,默认 false(关闭)
缩放 ClassicBarConfig.ClassicBarScale,默认 1.0F,范围 0.5–2.0
入口 classicbar/ClassicBar.java:10-13 initEvent()
渲染器 classicbar/renderer/ProgressBarRenderer.java + ProgressBarBuilder.java
事件 classicbar/event/ClassicBarRenderEvent.java + VanillaRenderEvent.java
数据源 classicbar/core/PlayerStats.java
条数 最多 7 根(生命 / 饥饿 / 饱和 / 空气 / 护甲 / 饥饿预览 / 饱和预览)

功能:把 1.8+ 移除的原版「饥饿条 + 饱和条」样式在 1.7.10 上还原。

事件注册

public static void initEvent() {
    MinecraftForge.EVENT_BUS.register(new VanillaRenderEvent());
    MinecraftForge.EVENT_BUS.register(new ClassicBarRenderEvent());
}

(classicbar/ClassicBar.java:10-13)

两个事件处理器:

事件类 行 作用
VanillaRenderEvent classicbar/event/VanillaRenderEvent.java:16 取消原版 HUD 元素(if (!ClassicBarConfig.ClassicBarEnable) return;)
ClassicBarRenderEvent classicbar/event/ClassicBarRenderEvent.java:50 onRender(RenderGameOverlayEvent.Post) 绘制经典条

两者都由同一个开关门控(VanillaRenderEvent.java:16、 ClassicBarRenderEvent.java:50)——关闭时不取消原版也不绘制,即完全无效果。

7 根条

ClassicBarRenderEvent.java 的创建与更新:

条 创建行 填充色 数据 条件
armorBar 101 — playerStats.getArmor() / 20F(192-194) getArmor() > 0(239)
healthBar 113 0xFFFF5555 currentHealth / maxHealth(187) 始终
foodBar 125 0xFFFFAA00 playerStats.getFood() / 20F(189) 始终
airBar 137 0xFF4488FF playerStats.getAir() / 300F(199) getArmor() > 0 || getAir() < 300(291)
foodPreviewBar 148 0xFFFFAA00 setMinProgress(currentFood / 20F) + setProgress(futureFood, 20F)(220-221) 见下
saturationBar 159 0xFFFFEE44 getSaturation() / 20F(190) 始终
saturationPreviewBar 168 0xFFFFEE44 setMinProgress(currentSaturation / 20F) + setProgress(futureSaturation, 20F)(223-224) 见下

生命条颜色是动态的(ClassicBarRenderEvent.java:185-186):

healthBar.setFillColor(healthColor);
healthBar.setTextColor(healthColor);

预览条的淡入淡出

foodPreviewBar / saturationPreviewBar 用 setTargetAlpha 做淡入淡出 (ClassicBarRenderEvent.java:228-233):

foodPreviewBar.setTargetAlpha(0.5f);
saturationPreviewBar.setTargetAlpha(0.5f);
...
foodPreviewBar.setTargetAlpha(0f);
saturationPreviewBar.setTargetAlpha(0f);

目标是半透明 0.5(显示「即将恢复的量」),条件不满足时淡出到 0。 setMinProgress(...) 画出已填充段,setProgress(...) 画出潜在总量段。

渲染顺序(ClassicBarRenderEvent.java:240-250)

armorBar(条件)
healthBar
foodBar
foodPreviewBar
saturationBar
saturationPreviewBar
airBar(条件)

布局常量

常量 用途 行
BAR_HEIGHT 条高 101–168 共用
BAR_WIDTH 条宽 同上
GAP 条间距 101、137
leftX / rightX 左右两组起点 101、125 等

左侧(armorBar = leftX, barY - BAR_HEIGHT - GAP、 healthBar = leftX, barY), 右侧(foodBar / saturationBar = rightX, barY、 airBar = rightX, barY - BAR_HEIGHT - GAP)。

整组按 ClassicBarConfig.ClassicBarScale 缩放(ClassicBarRenderEvent.java:61 float scale = ClassicBarConfig.ClassicBarScale;)。

ProgressBarBuilder 的可配置项

classicbar/renderer/ProgressBarBuilder.java,构造器 ProgressBarBuilder(int x, int y, int width, int height)(48)。

3 个枚举

枚举 值 行
Side LEFT, RIGHT, NONE 7-11
NumberFormat FRACTION, PERCENTAGE, CURRENT, MAX, NONE 13-19
AnimationStyle NONE, SMOOTH, BOUNCE, ELASTIC 21-26

链式 setter

方法 行
setProgress(float current, float max) 80
setProgress(float progress) 95
setMinProgress(float min) 99
setAlpha(float) 104
setFade(boolean) 109
setTargetAlpha(float) 115
setEnableDamageFlash(boolean) 120
setBackgroundColor(int) 125
setFillColor(int) 130
setBorderColor(int) 135
setTextColor(int) 140
setTextSide(Side) 145
setNumberFormat(NumberFormat) 150
setIcon(ResourceLocation, int, int, float, float, float, float) 155
setIconSide(Side) 167

内部字段(ProgressBarBuilder.java:28-47)

进度:progress / displayProgress / maxProgress / currentProgress / minProgress。 颜色:backgroundColor / fillColor / borderColor / textColor。 图标:icon + iconWidth/Height + iconU/V/U2/V2(手写 UV 坐标)。 开关:showBackground / showBorder / showGradient / borderWidth / firstRender。 动画:animationStyle / animationSpeed / lastUpdateTime / damageFlash / enableDamageFlash。 透明度:alpha / targetAlpha / fadeEnabled。

AnimationStyle 有 4 种(NONE/SMOOTH/BOUNCE/ELASTIC), 但 ClassicBarRenderEvent 没有调用任何设置动画风格的 setter ——grep 确认只有 setFillColor / setTextColor / setProgress / setMinProgress / setTargetAlpha 被用到。AnimationStyle 枚举在经典条路径上是未使用的。

数据源 PlayerStats

classicbar/core/PlayerStats.java。ClassicBarRenderEvent 读的属性:

属性 上限 行
getFood() 20F 189
getSaturation() 20F 190
getArmor() 20F 192
getAir() 300F 199

(上限均为源码里 setProgress(x, 上限) 的第二参。)

关联