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被复用为"树干方块",属于命名与用途不符,易误读。
相关条目
- WorldGenPamFruitTree —— 主干实现
- PamTreeGenerator —— 谁创建本类
- 兄弟维度:网络包 · 配置 · 兼容层