跳到正文
烈焰甘蔗Wiki

WorldGenPamFruitLogTree(原木果树生成)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

基本信息

属性 值 来源
类 com.pam.harvestcraft.WorldGenPamFruitLogTree WorldGenPamFruitLogTree.java:15
父类 WorldGenAbstractTree WorldGenPamFruitLogTree.java:16
构造器 (boolean, int minTreeHeight, int metaWood, int metaLeaves, Block fruitType) :22-28
实例化方 PamTreeGenerator.generateSurface PamTreeGenerator.java:119,194,243
直接注册 否 —

谁在用它

只有 3 种果树使用本类:

果树 生态组 实参 调用点
肉桂(pamCinnamon) 热带(25 路表) new WorldGenPamFruitLogTree(true, 5, 3, 3, BlockRegistry.pamCinnamon) PamTreeGenerator.java:119
纸皮树(pamPaperbark) 热带(25 路表) new WorldGenPamFruitLogTree(true, 5, 3, 3, BlockRegistry.pamPaperbark) PamTreeGenerator.java:194
枫树(pamMaple) 针叶(CONIFEROUS) new WorldGenPamFruitLogTree(true, 5, 1, 1, BlockRegistry.pamMaple) PamTreeGenerator.java:243

枫树的 meta 与其它两种不同(1, 1 而非 3, 3)。

与 WorldGenPamFruitTree 的差异

本类与 WorldGenPamFruitTree 几乎逐行相同(同为 93 / 91 行的孪生实现),只有两处实质差异:

差异点 WorldGenPamFruitTree WorldGenPamFruitLogTree 行
树干用哪种方块 Blocks.field_150364_r(原木),meta = metaWood this.fruitType(即"果实方块"本身当树干),meta = metaWood FruitTree:84 / LogTree:82
是否挂果 满足条件时在 y-1 放 fruitType 完全没有挂果逻辑 FruitTree:76-77 / LogTree 无

其余完全一致:树高 nextInt(3) + minTreeHeight、边界校验 par4 >= 1 && par4 + l + 1 <= 256、逐层 b0 = 0/1/2 的空间校验、canSustainPlant(..., ForgeDirection.UP, Blocks.field_150345_g) 土壤校验、onPlantGrow(...)、树冠半径 l1 = 1 - i3/2、角上 50% 概率跳过。

设计意图(由源码可推):这三种树的"果实方块"本身外观就像整根柱子/树皮(肉桂棒、纸皮、枫树皮),所以直接拿它当树干,不再额外挂果实方块。

生成流程(func_76484_a,:30-89)

步骤 行
树高 l = rand.nextInt(3) + minTreeHeight :31
高度校验 par4 >= 1 && par4 + l + 1 <= 256 :33
空间校验(b0 逐层 0/1/2,isReplaceable) :37-56
土壤校验 canSustainPlant(..., ForgeDirection.UP, Blocks.field_150345_g) + onPlantGrow :60-63
树冠:Blocks.field_150362_t,meta = metaLeaves :64-78
树干:this.fruitType,meta = metaWood :79-83
return true :84

SRG 名(全部未解析)

本文件出现的 SRG 名与 WorldGenPamFruitTree 相同且用法一致:Blocks.field_150362_t(树叶)、Blocks.field_150364_r(在本类中不用于树干,仅在 isAir/isLeaves 判定之外未出现)、Blocks.field_150345_g(IPlantable)、func_147439_a、func_150516_a、func_76484_a。

注意:本类的 Blocks.field_150364_r 只在树干那行被替换掉了;文件中剩余的 field_150364_r 出现在"是否空气/树叶"的判定上下文里。详见源码 :81。

源码缺陷 / 观察

  • 与 WorldGenPamFruitTree 相同的冗余写法:循环条件里带 flag(:45-46)、flag = false; continue; 后紧跟重复赋值(:50-52)。均不改变行为。
  • 本类不需要 fruitType 之外的果实挂载逻辑,但字段名 fruitType 被复用为"树干方块",属于命名与用途不符,易误读。

相关条目

浏览全部模组