EnergyStage
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| 类型 | public enum EnergyStage(嵌套枚举) |
core/lib/engines/TileEngineBase.java:60 |
| 全限定名 | buildcraft.core.lib.engines.TileEngineBase.EnergyStage |
同上 |
| 所属 modid | BuildCraft|Core(文件在 buildcraft.core.lib.engines) |
BuildCraftCore.java:174 |
| 是否 TileEntity | 否——这是 TileEngineBase 内的枚举类型,不注册为 TileEntity |
— |
⚠️ 放在 tile/ 维度是因为它是引擎 TileEntity 独占的状态枚举,
不是独立注册的游戏对象。它没有注册名、没有 registerTileEntity 调用。
枚举成员(集合运算:恰好 5 个)
core/lib/engines/TileEngineBase.java:60-68 原文:
public enum EnergyStage {
BLUE,
GREEN,
YELLOW,
RED,
OVERHEAT;
public static final EnergyStage[] VALUES = values();
}
| 序号 | 成员 | 含义 |
|---|---|---|
| 0 | BLUE |
能量 < 33% |
| 1 | GREEN |
能量 < 66% |
| 2 | YELLOW |
能量 < 75% |
| 3 | RED |
能量 ≥ 75%,接近过热 |
| 4 | OVERHEAT |
温度过高,引擎停机 |
VALUES 静态字段(:68)= values() 的缓存数组,长度 5。
用途见 :170-171:客户端只有当 getEnergyStage() == EnergyStage.OVERHEAT 且玩家不是 fake player
时才重算 energyStage,避免客户端擅自改状态。
贴图对应(每阶段一张「树干」贴图)
core/lib/engines/TileEngineBase.java:37-45 共 5 个 ResourceLocation 常量:
TRUNK_BLUE_TEXTURE(:37)、TRUNK_GREEN_TEXTURE(:39)、TRUNK_YELLOW_TEXTURE(:41)、
TRUNK_RED_TEXTURE(:43)、TRUNK_OVERHEAT_TEXTURE(:45)。
分档算法(各引擎可覆写)
TileEngineBase.computeEnergyStage() 是 protected(:187),子类可覆写。
TileEngineWood 覆写版(core/TileEngineWood.java:27-39):
| 条件 | 返回 |
|---|---|
energyLevel < 0.33f |
BLUE |
energyLevel < 0.66f |
GREEN |
energyLevel < 0.75f |
YELLOW |
| 其余 | RED |
⚠️ Wood 覆写版没有返回 OVERHEAT 的分支——到 0.75 以上一律 RED。
OVERHEAT 由基类的温度路径产生,不是 Wood 的能量分档结果。
TileEngineWood 还覆写了 getTrunkTexture(EnergyStage)(core/TileEngineWood.java:22-25),
在 stage == RED && progress < 0.5 时降级显示为 YELLOW 贴图(半程动画)。
TileEngineCreative 的 computeEnergyStage() 则是 return EnergyStage.BLUE;
(energy/TileEngineCreative.java:29)——恒为 BLUE,因为创造引擎不消耗也不过热。
与热度常量的关系
TileEngineBase 的热度常量(core/lib/engines/TileEngineBase.java:71-73):
| 常量 | 值 |
|---|---|
MIN_HEAT |
20 |
IDEAL_HEAT |
100 |
MAX_HEAT |
250 |
⚠️ EnergyStage 的分档用的是「能量比例」(0.33 / 0.66 / 0.75),
而过热用的是上述「热度」阈值(20 / 100 / 250)——两套量纲,不要混写成一个百分比。