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)——两套量纲,不要混写成一个百分比。

相关条目