煤炭奇点燃料处理

基本信息

属性 值
控制项 配置 coalSingularityEasterEgg(默认 true)
注册位置 CommonProxy.addToRecipeInput() 末尾(:779-780)
实现 私有静态内部类 CommonProxy.CoalSingularityFuelHandler(:789-803)
接口 cpw.mods.fml.common.IFuelHandler

注册条件(双重门控)

if (coalSingularityEasterEgg && allowed.containsKey("vanilla") && allowed.get("vanilla").contains("coal"))
    GameRegistry.registerFuelHandler(new CoalSingularityFuelHandler(getSingularityByName("vanilla")));

注意 coal 的默认配置是 false(CommonProxy.java:55 末位 false)。所以这个「彩蛋」默认不生效——玩家必须先在配置里把 vanilla.coal 改为 true,并保持 vanilla 分组本身 enabled=true,才会注册燃料处理。

三个条件缺一不可:配置项为真 → vanilla 分组存在 → coal 变体在 allowed 中。

燃烧时间

this.burnTime = 16000 * CompressorManager.getCost(new ItemStack(Blocks.coal_block));

getCost 在 Avaritia 中会遍历已注册配方,找 validInput 匹配的返回 getCost()。由于本模组自己在 postInit 里注册了压缩配方,煤块的奇点化配方(若 coal 已启用且矿辞 blockCoal 存在)也在这批配方里。

因此 burnTime = 煤块奇点化所需数量 × 16000 tick(= 1 煤块 1600 tick 的 10 倍)。16000 是硬编码字面量;乘数来自 Avaritia 配方表,不是源码常量——若此时查不到煤块配方,getCost 返回 0,燃烧时间即为 0。

生效判定

public int getBurnTime(final ItemStack fuel) {
    return fuel != null && fuel.getItem() == vanillaSingularity && fuel.getItemDamage() == 0 ? burnTime : 0;
}

三重条件:非空 → 物品实例等于 vanilla 奇点物品(== 引用比较)→ metadata == 0。

vanilla 分组的 meta 0 正是 coal(构造顺序:coal, emerald, diamond, water)。所以只有煤炭奇点是燃料,同一物品的 meta 1/2/3 都不燃烧。

限制

  • 注册用的是 GameRegistry.registerFuelHandler,全局单例;若 postInit 跑多次会重复注册(本模组只跑一次,无实际风险)。
  • 燃烧时间依赖 Avaritia 配方表在 postInit 时的状态,属于隐式顺序依赖,源码未做空值/非零校验。

相关条目