经典状态条(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, 上限) 的第二参。)