发电机家族(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 为总开关。

相关条目