发电机家族(Generator / Substation / Power Plant)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | utilitiesinexcess:<type>_generator / _substation / _powerplant |
| 基类 | com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockBaseGenerator(abstract,extends BlockContainer) |
| 子类数 | 12 个(BlockEnderGenerator … BlockNetherStarGenerator) |
| 注册方块总数 | 36(12 × 3 档) |
| 材质 | Material.iron,硬度 5.0(BlockBaseGenerator.java:22-25) |
| 实体方块 | 否(isOpaqueCube() / renderAsNormalBlock() 均 false,BlockBaseGenerator.java:56-63) |
| 渲染类型 | ModelISBRH.JSON_ISBRH_ID(BlockBaseGenerator.java:66-68) |
| 创造标签 | utilitiesinexcess(ModBlocks.java:193) |
| GUI | ModularUI2,服务器端构建面板后同步(BlockBaseGenerator.java:32-33) |
功能
这是本模组最大的一组方块:12 种能源 × 3 个功率档 = 36 个方块,全部继承同一个抽象基类 BlockBaseGenerator。三档不是三种机制,而是同一机制的 multiplier 倍率:
| 档位 | 注册名后缀 | multiplier |
含义 |
|---|---|---|---|
| Generator | _generator |
1 | 基准产能 |
| Substation | _substation |
8 | 8 倍产能,消耗燃料也慢 8 倍 |
| Power Plant | _powerplant |
64 | 64 倍产能 |
倍率定义在 ModBlocks.java 的枚举常量第三/四个参数,例如 LOW_TEMPERATURE_FURNACE_GENERATOR / _SUBSTATION / _POWERPLANT 分别传入 1 / 8 / 64(ModBlocks.java:123-125);12 组完全同构(ModBlocks.java:123-158)。
TileEntity 侧在首次 updateEntity() 时从所在方块读回倍率并缓存到 TileEntityBaseGenerator.multiplier(TileEntityBaseGenerator.java:69-73),之后产出按 currentRFPerTick * multiplier 计算(TileEntityBaseGenerator.java:81),燃料燃烧时长按 currentFuelBurnTime / multiplier 计算(TileEntityBaseGenerator.java:89)。因此高倍率档在相同燃料下总产出相同、但输出速率与瞬时容量更高。
所有发电机实现 CoFH Energy 的 IEnergyProvider,内置 EnergyStorage,并主动向 6 个方向的 IEnergyReceiver 推送能量(TileEntityBaseGenerator.java:101-120)。接收方列表在方块邻接变化或 validate() 时标脏重建(TileEntityBaseGenerator.java:122-146)。
破坏时会把 IInventory 内容全部掉落(BlockBaseGenerator.java:39-45)。
数值
全部 12 种发电机的默认参数都在 config/blocks/GeneratorConfig.java(没有一个是硬编码常量):
| 发电机 | RF 容量 | 燃料 | 产出 RF/t | 备注 |
|---|---|---|---|---|
| Low-Temp Furnace Generator | 100,000 | 任意燃料,燃烧时间 × 0.5 | 5 | GeneratorConfig.java:16-30 |
| Furnace Generator | 100,000 | 任意燃料,燃烧时间 × 0.3125 | 40 | GeneratorConfig.java:37-51 |
| High-Temp Furnace Generator | 100,000 | 任意燃料,燃烧时间 × 0.0075 | 400 | GeneratorConfig.java:58-72 |
| Lava Generator | 100,000 | 岩浆 50 mB / 次 | 40 | GeneratorConfig.java:79-93;流体罐 4000 mB(TileEntityLavaGenerator.java) |
| Ender Generator | 100,000 | 末影珍珠 800 / 末影之眼 3000 / 末影莲种子 12000 tick | 40 | GeneratorConfig.java:100-124 |
| Redstone Generator | 100,000 | 岩浆 125 mB + 红石粉 1 个 | 80 | GeneratorConfig.java:131-145 |
| Food Generator | 100,000 | ItemFood,燃烧时间 = 饱和度 × 900 |
饥饿值 × 4 | GeneratorConfig.java:152-166 |
| Potion Generator | 100,000 | ItemPotion,固定 800 tick |
2^复杂度 × 20 |
GeneratorConfig.java:173-187 |
| Solar Generator | 100,000 | 无燃料(光照曲线) | 峰值 40 | GeneratorConfig.java:194-208 |
| TNT Generator | 1,000,000 | TNT 或火药(getFuelBurnTime 恒为 1 tick) |
TNT 480,000 / 火药 32,000 | GeneratorConfig.java:215-229 |
| Pink Generator | 100,000 | PinkFuelHelper 扫描出的粉色燃料 | 40 | GeneratorConfig.java:240-254 |
| Nether Star Generator | 100,000 | 下界之星 | 40,000 | GeneratorConfig.java:261-275 |
几点必须单独说明的行为差异:
- Low/Furnace/High-Temp 三种共用
TileEntityBaseGeneratorWithItemFuel,燃料判定为TileEntityFurnace.isItemFuel(stack)(如TileEntityFurnaceGenerator.java的isItemValidForSlot),燃烧时间 = 原版燃烧时间 × 各自FuelUsageRatio。 - Lava Generator 实现
IFluidHandler但只进不出:drain(...)两个重载都返回null,canDrain返回false(TileEntityLavaGenerator.java)。只能用桶或管道灌入。 - Redstone Generator 继承自
TileEntityLavaGenerator,额外实现IInventory存放 1 个红石粉,每次消耗 1 个(TileEntityRedstoneGenerator.java)。 - Solar Generator 完全重写
updateEntity(),不走燃烧计时;产出由世界时间插值决定,time在 14095–21905 之间为 0,4925–7075 之间为峰值(TileEntitySolarGenerator.java的interpolate)。必须被红石信号激活才会对外推能(canExtract()判断isBlockIndirectlyGettingPowered)。无天空维度(如末地)恒定输出solarGeneratorNoSkyGeneration。 - TNT Generator 的
onBurnTick()在TNTGeneratorExplosions为真时会在自身 10 格范围内随机位置生成 4.0 强度爆炸(TileEntityTNTGenerator.java)。该开关默认 true(GeneratorConfig.java:231-233)。 - Potion Generator 的"复杂度"算法见
TileEntityPotionGenerator.java:每个效果 +1、每级等级 +1、持续时间 > 3600 tick +1、 harm/invisibility 额外 +1、喷溅 +1;空效果(荒芜药水)也算 1。产出 =2^复杂度 × 20。 - Pink Generator 的燃料不是配置列表,而是在
preInit里由PinkFuelHelper.scanRecipesForPinkFuel()扫描全部合成配方动态得出的(CommonProxy.java:129)。
交互
| 触发 | 行为 |
|---|---|
| 右键 | 打开 ModularUI2 生成的发电机面板(BlockBaseGenerator.java:29-36),显示能量条、燃烧剩余时间、当前产出速率 |
| 邻接方块变化 | 标记能量接收方列表为脏,下 tick 重建(TileEntityBaseGenerator.java:122-124) |
| 对外输能 | canExtract() 为真时向 6 面 IEnergyReceiver 推送(TileEntityBaseGenerator.java:94, 101-120) |
| 破坏 | 掉落内部 IInventory 全部物品(BlockBaseGenerator.java:39-45) |
| GUI 内 | Solar 不显示燃烧时间(showBurnTime() 返回 false);Lava 多一个流体槽,Redstone 多一个红石粉槽 |
NBT 持久化字段:BurnTime、currentFuelBurnTime、CurrentRFPerTick,外加 EnergyStorage 自身数据(TileEntityBaseGenerator.java:148-164);Lava 额外存 Fluid,Redstone 额外存 RedstoneStack。
合成配方
12 种发电机各有一个独立配置开关(GeneratorConfig 里的 enable*Generator),全部默认 true。配方由 RecipeLoader.loadGeneratorRecipes() 统一注册,开关为 RecipeConfig.enableGeneratorRecipes(默认 true)。每种发电机的 Generator / Substation / Power Plant 三档配方材料相同,仅产出数量不同——具体配比由 RecipeLoader.java 的 loadGeneratorRecipes() 定义,逐条以 RecipeConfig.enableGeneratorRecipes 为总开关。
相关条目
- 配置总览 - 6 个配置类的加载时机与文件位置
- 方块注册总表 - 全部 101 个方块及其实例类
- TileEntity 注册总表 - 12 个发电机 TileEntity 及其基类层次
- 物品注册总表 - 全部 32 个物品
- 兼容模组 - CoFH Energy API 等硬依赖的来源