Fruit Trees(果树总览)
计数(本页是汇总索引,不是第 37 个方块)
| 项 | 数量 | 证据 |
|---|---|---|
| 果实/结果方块 | 36 | BlockRegistry.java:703-738 连续 36 行 registerBlock |
| 树苗方块 | 36 | BlockRegistry.java:667-702 连续 36 行 registerBlock |
其中 BlockPamFruit(会结果实) |
33 | 构造处 new BlockPamFruit(...) |
其中 BlockPamFruitingLog(产木型) |
3 | pamCinnamon / pamMaple / pamPaperbark |
| 温度分类合计 | 9 + 24 + 3 = 36 | BlockRegistry.java:825-827 |
语言文件交叉验证:
en_US.lang中tile.pam*Sapling.name键恰好 36 条(:109-144)。
温度/湿度分类的确定方法
分类不是数调用点得出的,而是对三个数组做集合运算得到:
BlockRegistry.java:825 PamTemperateSaplings = { apple, avocado, cherry, chestnut, nutmeg, pear, plum, walnut, gooseberry } // 9 个
BlockRegistry.java:826 PamWarmSaplings = { almond, apricot, banana, cashew, coconut, date, dragonfruit, durian, fig, grapefruit, lemon, lime, mango, olive, orange, papaya, peach, pecan, peppercorn, persimmon, pistachio, pomegranate, starfruit, vanillabean }
// 24 个
BlockRegistry.java:827 PamLogSaplings = { cinnamon, maple, paperbark } // 3 个
集合运算结果:
| 校验 | 结果 |
|---|---|
| 36 个已注册树苗 ∩ 三组并集 的差集 | 空(没有游离树苗) |
| 三组并集 − 36 个已注册树苗 | 空(没有幽灵成员) |
| 三组两两交集 | 全空(无重复归属) |
| 9 + 24 + 3 | 36 |
独立交叉验证:分类与木材 metadata 完全对应,说明分组不是随意的 ——
| 分类 | 数量 | 木材 metadata | 原版树种 |
|---|---|---|---|
| 温带 Temperate | 9 | 0 | 全部橡木 Oak |
| 暖带 Warm | 24 | 3 | 全部丛林木 Jungle |
| 产木 Log | 3 | 1 / 3 / 3 | 云杉(枫树) + 丛林(肉桂、纸皮树) |
完整对照表:果实 ↔ 树苗 ↔ 原版树种
「成熟果实」列即 PamTemperateFruits / PamWarmFruits / PamLogFruits 三个数组的对应元素(ItemRegistry.java:2597-2599),与树苗数组同下标平行。
但要注意:温带与暖带的配方是按下标循环写的(
PamFoodRecipes.java:29、:32),产木型 3 条却是手写的(:34、:35、:36,树苗 meta 分别是 3/3/1)。所以「同下标 ⇒ 同一条配方」只对温带与暖带成立,详见各树苗条目。
| # | 树种 | 果实方块 | 树苗方块 | 分类 | 原版树种(木/叶 metadata) | 成熟果实物品 | 自然生成 |
|---|---|---|---|---|---|---|---|
| 1 | Almond | pamAlmond |
pamalmondSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Almond | 是 |
| 2 | Apple | pamApple |
pamappleSapling |
温带 Temperate | 橡木 Oak(0/0) | Apple(原版) | 是 |
| 3 | Apricot | pamApricot |
pamapricotSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Apricot | 是 |
| 4 | Avocado | pamAvocado |
pamavocadoSapling |
温带 Temperate | 橡木 Oak(0/0) | Avocado | 是 |
| 5 | Banana | pamBanana |
pambananaSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Banana | 是 |
| 6 | Cashew | pamCashew |
pamcashewSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Cashew | 是 |
| 7 | Cherry | pamCherry |
pamcherrySapling |
温带 Temperate | 橡木 Oak(0/0) | Cherry | 是 |
| 8 | Chestnut | pamChestnut |
pamchestnutSapling |
温带 Temperate | 橡木 Oak(0/0) | Chestnut | 是 |
| 9 | Cinnamon | pamCinnamon |
pamcinnamonSapling |
产木型 Log | 丛林 Jungle(3/3) | Cinnamon | 是 |
| 10 | Coconut | pamCoconut |
pamcoconutSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Coconut | 是 |
| 11 | Date | pamDate |
pamdateSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Date | 是 |
| 12 | Dragonfruit | pamDragonfruit |
pamdragonfruitSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Dragonfruit | 是 |
| 13 | Durian | pamDurian |
pamdurianSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Durian | 是 |
| 14 | Fig | pamFig |
pamfigSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Fig | 是 |
| 15 | Gooseberry | pamGooseberry |
pamgooseberrySapling |
温带 Temperate | 橡木 Oak(0/0) | Gooseberry | 是 |
| 16 | Grapefruit | pamGrapefruit |
pamgrapefruitSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Grapefruit | 是 |
| 17 | Lemon | pamLemon |
pamlemonSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Lemon | 是 |
| 18 | Lime | pamLime |
pamlimeSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Lime | 是 |
| 19 | Mango | pamMango |
pammangoSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Mango | 是 |
| 20 | Maple | pamMaple |
pammapleSapling |
产木型 Log | 云杉 Spruce(1/1) | Maple Syrup | 是 |
| 21 | Nutmeg | pamNutmeg |
pamnutmegSapling |
温带 Temperate | 橡木 Oak(0/0) | Nutmeg | 是 |
| 22 | Olive | pamOlive |
pamoliveSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Olive | 否 |
| 23 | Orange | pamOrange |
pamorangeSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Orange | 是 |
| 24 | Papaya | pamPapaya |
pampapayaSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Papaya | 是 |
| 25 | Paperbark | pamPaperbark |
pampaperbarkSapling |
产木型 Log | 丛林 Jungle(3/3) | Paper(原版) | 是 |
| 26 | Peach | pamPeach |
pampeachSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Peach | 是 |
| 27 | Pear | pamPear |
pampearSapling |
温带 Temperate | 橡木 Oak(0/0) | Pear | 是 |
| 28 | Pecan | pamPecan |
pampecanSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Pecan | 是 |
| 29 | Peppercorn | pamPeppercorn |
pampeppercornSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Peppercorn | 是 |
| 30 | Persimmon | pamPersimmon |
pampersimmonSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Persimmon | 是 |
| 31 | Pistachio | pamPistachio |
pampistachioSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Pistachio | 是 |
| 32 | Plum | pamPlum |
pamplumSapling |
温带 Temperate | 橡木 Oak(0/0) | Plum | 是 |
| 33 | Pomegranate | pamPomegranate |
pampomegranateSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Pomegranate | 是 |
| 34 | Starfruit | pamStarfruit |
pamstarfruitSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Starfruit | 是 |
| 35 | Vanillabean | pamVanillabean |
pamvanillabeanSapling |
暖带/热带 Warm | 丛林 Jungle(3/3) | Vanilla Bean | 是 |
| 36 | Walnut | pamWalnut |
pamwalnutSapling |
温带 Temperate | 橡木 Oak(0/0) | Walnut | 是 |
果实方块 ↔ 树苗 的 1:1 对应
- 36 个果实方块的注册名是
pam+ 首字母大写(pamApple、pamAlmond…pamWalnut),36 个树苗是pam+ 全小写 +Sapling(pamappleSapling、pamalmondSapling…pamgooseberrySapling) - 两者只差首字母大小写与
Sapling后缀,树种集合完全相同(36 ↔ 36,无一遗漏、无一多余)
产木型(BlockPamFruitingLog)与普通果树的差异
BlockPamFruitingLog 继承 BlockRotatedPillar(有朝向),metadata 的含义是 stage = meta & 3(0 空 / 1 / 2 生长 / 3 成熟)与 angle = meta & 0xC。
| 树种 | setDropItem |
右键能否产出 | 备注 |
|---|---|---|---|
pamPaperbark |
有 —— Items.field_151121_aF(纸),BlockRegistry.java:523 |
能,成熟时点击掉落纸 | 掉纸 |
pamCinnamon |
有 —— cinnamonItem,ItemRegistry.java:1171 |
能,成熟时点击掉落 Cinnamon | 掉肉桂 |
pamMaple |
有 —— maplesyrupItem,ItemRegistry.java:1181 |
能,成熟时点击掉落 Maple Syrup | 掉糖浆,不是鲜果 |
- 硬度 2.0F、
setRequiresTool(true)(BlockPamFruitingLog.java:33-35) canSustainLeaves与isWood均返回true,可作为树叶/木材被 Forge 识别- 破坏时会对周围 ±4 的树叶调用
beginLeavesDecay(BlockPamFruitingLog.java:52-67) - 骨粉
fertilize前进 2~5 点,上限钳制在 3(BlockPamFruitingLog.java:106-112)
已核实的源码缺陷
- 橄榄树(
pamOlive)永远不会自然生成。BlockRegistry.java:287-322声明了全部 36 个*treeGeneration开关,BlockRegistry.java:413读取olivetreeGeneration,但PamTreeGenerator.java全文没有BlockRegistry.pamOlive的任何引用 —— 暖带生成器的 25 个 case 里也没有橄榄。后果:该配置项无效,橄榄只能靠树苗获得。 - 三个
BlockPamFruitingLog的setDropItem分散在两个文件:pamPaperbark在BlockRegistry.java:523,pamCinnamon在ItemRegistry.java:1171,pamMaple在ItemRegistry.java:1181。 ⚠️ 只 grepBlockRegistry.java会得出「只有 paperbark 有产出」的错误结论 —— 本条目初稿就是这样写错的, 由「产木型只有纸会掉东西」的伪缺陷演变成 3 条错误断言。跨文件 grep 必须用集合运算。 三者的产出物与PamMFRCompatibility.java:47的PamLogFruitItems = {cinnamonItem, maplesyrupItem, Items.field_151121_aF}顺序一致,可作第三方佐证。 - 反编译伪影(非 mod 缺陷):
PamTreeGenerator.java里各switch的case块在 CFR 0.152 输出中没有break,看起来像贯穿 fall-through。原始字节码的break由跳转表实现,这是 CFR 的还原缺陷,不是 mod 的 bug。本条目按「随机挑 1 个树种」的语义理解。
相关条目
- Market - 市场(
MarketItems.java:84-205按三个分类数组成批登记树苗交易)