煤炭奇点燃料处理
基本信息
| 属性 | 值 |
|---|---|
| 控制项 | 配置 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时的状态,属于隐式顺序依赖,源码未做空值/非零校验。
相关条目
- 配方注册与矿辞门控 -
postInit中本处理器的注册位置 - 配置文件 -
coalSingularityEasterEgg与vanilla.coal两级开关 - Vanilla 奇点 - meta 0 即煤炭奇点