能量系统

基本信息

属性 值
核心单位 energyDrainUnit = 0.12F,minSignificantEnergy = 0.0001F(mechanics/energy/EnergyChunkData.java:14-15)
定价表 EnergyValues:32 个物品 + 7 个生物类
能量簇状态 4 档(EnergyClusterHealth 枚举)
能量储存方块 energy_cluster / corrupted_energy_high / corrupted_energy_low
数据源 mechanics/energy/(7 个类)

功能

末地是一块持续「充电」的区域。EnergyChunkData 把末地按区块(16×16)划分为能量格,每格有自己的能量上下限,会自然回充、也会自然泄放,泄放时在末地随机高度生成 corrupted_energy_low 方块。玩家用 energy_wand 从能量簇抽取能量,再把物品丢进 energy_extraction_table 按 EnergyValues 定价换成 essence。

区块能量模型(EnergyChunkData.java:23-55)

区块最大能量按到末地原点的距离 dist 线性取值(EnergyChunkData.java:27-31):

float dist = (float) MathUtil.distance(x, z);
float lowerBound = 4F + 2F * (dist / 6000F), upperBound = 10F + 6F * (dist / 6000F);
maxEnergyLevel = lowerBound + rand.nextFloat() * (upperBound - lowerBound);
energyLevel   = maxEnergyLevel - maxEnergyLevel * rand.nextFloat() * rand.nextFloat();

回充(:35-40):

  • 增量 min(0.025F, sqrt(maxEnergyLevel) * 0.007F)
  • 下一次回充冷却 9 + rand(12 + rand(6)) + floor(16 × 当前/最大 + 最大 × 0.2) tick

泄放(:42-54):

  • 触发条件:energyLevel > maxEnergyLevel,或 energyLevel > 0.8 × maxEnergyLevel 且 rand.nextInt(10) == 0
  • 泄放量 (0.2F + rand.nextFloat() * 0.5F) * maxEnergyLevel * 0.0625F
  • 泄放冷却 4 + rand(7) tick
  • 在 x + rand(16), 8 + rand(116), z + rand(16) 处放置 corrupted_energy_low,meta 为 clamp(floor(1 + release × 12), 2, 8)

相邻区块互相作用:onAdjacentInteract 在 rand.nextInt(42) == 0 且双方能量差 > 0.4F + rand.nextFloat() * 2.5F 时触发(EnergyChunkData.java:57-60)。主世界另有一份数据类 EnergyChunkDataOverworld。

数值

能量簇状态(mechanics/energy/EnergyClusterHealth.java:8-11)

常量 颜色 生成权重 回充冷却 回充倍率 转弱概率 lang key
HEALTHY 0x54ff54 10 15 1.0F 90 energy.status.healthy
WEAKENED 0xffc454 7 32 0.75F 40 energy.status.weakened
TIRED 0xff7a54 3 58 0.4F 10 energy.status.tired
UNSTABLE 0xff5454 1 −1 0.0F 0 energy.status.unstable

字段与构造签名见 EnergyClusterHealth.java:16-31(color, spawnWeight, regenTimer, regenMultiplier, chanceToWeaken, translationText)。UNSTABLE 的 regenTimer 为 -1、regenMultiplier 为 0 —— 不回充。

WeightedList<EnergyClusterHealth> spawnWeightedList = new WeightedList<>(values)(:14)用于按权重随机初始状态。

完整物品定价表(mechanics/energy/EnergyValues.java:29-60)

实际能量 = 0.12F × energyUnits。

energyUnits 对象 行
0.40 Blocks.end_stone 29
0.50 BlockList.end_terrain 30
0.50 adventurers_diary 31
0.55 persegrit 32
0.65 silverfish_blood 33
0.75 stardust 34
0.80 end_powder 35
0.90 igneous_rock 36
1.10 endium_ingot 37
1.20 knowledge_note 38
1.50 Items.ender_pearl 39
1.65 enhanced_ender_pearl 40
1.65 BlockList.enhanced_brewing_stand 41
1.65 BlockList.enhanced_tnt 42
1.95 Items.ender_eye 43
2.60 instability_orb 44
3.10 BlockList.spooky_log 45
3.10 BlockList.spooky_leaves 46
3.25 rune 47
3.40 auricion 48
3.75 Blocks.ender_chest 49
4.00 temple_caller 50
4.20 ectoplasm 51
4.20 spectral_tear 52
4.30 BlockList.void_chest 53
4.80 charm 54
5.50 spatial_dash_gem 55
6.20 energy_wand_core 56
6.40 energy_wand 57
7.80 transference_gem 58
10.10 BlockList.endium_block 59
10.50 living_matter 60

定价 API:getItemEnergy(ItemStack) 遍历 items 的 key 调 idp.check(is)(EnergyValues.java:86-92),未命中返回 0F。IMC 可通过 setItemEnergy(ItemDamagePair, float) 追加定价,但只在原值为 0 时才允许写入(EnergyValues.java:79-84)。生物侧 setMobEnergy 拒绝重复 key(:94-98)。

交互

  • 能量转化粒子:C10ParticleEnergyTransfer(packets/client/)
  • 事件:EnergyEvents,注册于 HardcoreEnderExpansion.java:143
  • 相关类:EnergyClusterData(簇状态持久化)、EnergyChunkDataOverworld(主世界版)
  • essence 祭坛与抽取台共享 TileEntityAbstractEnergyInventory 基类(tileentity/TileEntityAbstractEnergyInventory.java)

合成配方

产物 配方 位置
energy_wand_core 3×3 auricion,中心 endium_block mechanics/RecipeList.java:243-251
energy_wand " C" / " R " / "R "(C=energy_wand_core R=obsidian_rod) mechanics/RecipeList.java:253-261
energy_extraction_table PBP / SCS / INI,中心 C=living_matter mechanics/RecipeList.java:116-132

energy_cluster 与 corrupted_energy_high / corrupted_energy_low 没有合成配方:前者由 WorldGenEnergyCluster 生成,后两者由 EnergyChunkData.onUpdate 泄放与战斗逻辑放置。

相关条目