跳到正文
烈焰甘蔗Wiki

Soybean Crop(pamsoybeanCrop)

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

基本信息

属性 值 来源
注册名 harvestcraft:pamsoybeanCrop BlockRegistry.java:782
源码类 BlockPamCrop(extends BlockCrops implements IPlantable) BlockPamCrop.java:24-26
字段 BlockRegistry.pamsoybeanCrop BlockRegistry.java:592
构造 new BlockPamCrop().func_149658_d("soybean").func_149663_c("pamsoybeanCrop") BlockRegistry.java:592
纹理基名 soybean func_149658_d 实参
生长贴图 harvestcraft:soybeancrop_0 ~ soybeancrop_3,共 4 张 BlockPamCrop.java:658-661
显示名 tile.pamsoybeanCrop.name = Soybean Crop en_US.lang:189
创造标签 未调用 func_149647_a(创造标签 setter),继承原版 BlockCrops —
TileEntity 无(BlockPamCrop 未实现任何 TileEntity) —
多方块 否,单方块,无朝向覆写 —

生长

项 值 来源
生长阶段数 8(metadata 0–7) BlockPamCrop.java:32-38
成熟判定 metadata == 7 BlockPamCrop.java:43、:51
阶段 → 贴图 0,1→icons[0];2,3→icons[1];4,5→icons[2];6→先改写为 5 再 >>1 故也是 icons[2];≥7→icons[3] BlockPamCrop.java:31-39
贴图数组长度 new IIcon[4] BlockPamCrop.java:658
成熟所需时间 / 随机刻 源码未定义(HarvestCraft 未覆写随机刻生长) 见下
是否需要浇水 源码未定义(HarvestCraft 不干预,继承原版 BlockCrops) 见下
适宜季节 1.7.10 源码中不存在季节机制 见下
适宜温度 1.7.10 源码中不存在温度机制 见下
适宜地面 农田 Blocks.field_150458_ak(func_149854_a 的默认返回,BlockPamCrop.java:86) BlockPamCrop.java:86
getPlantType EnumPlantType.Crop BlockPamCrop.java:682
方块硬度 源码未定义(60 处作物构造均未调用任何硬度 setter) 见下
破坏掉落数量 rightclickharvestCrop 为 true 时返回 0,为 false 时返回 1 BlockPamCrop.java:58-63

为什么上面有 5 行是「源码未定义」

这些不是漏写,而是 1.7.10 GTNH 版的源码里确实不存在对应数据。逐项核查方式:

项 核查方式 结论
生长阶段数 HarvestCraft 自身的贴图映射与成熟判定 8,可证(见上表)
成熟时间 / 随机刻 全源码树 grep -rn "func_149874_m"(随机刻生长覆写) 命中 0 —— 生长完全继承原版 BlockCrops,原版源码不在本仓库内,故不编造刻数
浇水判定 同上,无任何相关覆写 HarvestCraft 不干预,判定继承原版 BlockCrops
季节 / 温度 全源码树 grep -rniE "season|temperature|cropSeason" 命中 0 —— 1.7.10 版没有作物季节或温度系统
硬度 60 处 new BlockPamCrop() 构造调用均无 func_149711_c 未调用任何硬度 setter;实际数值由原版 BlockCrops + Material.crops 决定,本仓库无原版源码,故不写数值

⚠️ 「季节 / 温度机制」是 1.12.2 fork 才有的东西。1.7.10 GTNH 版里全部 60 个作物共用同一套 BlockPamCrop,没有任何按作物区分的季节或温度。

收获产出

项 种子物品(种下去的那个) 产出物品(成熟后收获的那个)
注册名 harvestcraft:soybeanseedItem harvestcraft:soybeanItem
字段 ItemRegistry.soybeanseedItem ItemRegistry.soybeanItem
物品类 ItemSeeds ItemPamSeedFood(extends ItemFood)
构造 new ItemSeeds(BlockRegistry.pamsoybeanCrop, Blocks.field_150458_ak) new ItemPamSeedFood(cropfoodRestore, cropsaturationRestore, BlockRegistry.pamsoybeanCrop, Blocks.field_150458_ak)
来源 ItemRegistry.java:1147 ItemRegistry.java:1083
物品注册 ItemRegistry.java:1833 ItemRegistry.java:1937
显示名 Soybean Seed Soybean
食物值 — cropfoodRestore(默认 1)
饱和度 — cropsaturationRestore(默认 0.6)

食物值 / 饱和度取自配置项(ItemRegistry.java:912-913,默认 cropfoodRestore = 1、cropsaturationRestore = 0.6),不是源码里写死的数值。

到底掉种子还是掉产出:由 cropsdropSeeds 决定

BlockPamCrop 有两个覆写方法,各自受不同配置控制 —— 这是本组方块最容易误读的地方:

覆写方法 cropsdropSeeds = false(默认) cropsdropSeeds = true
func_149866_i()(BlockPamCrop.java:89-470) 返回产出物品 soybeanItem 返回种子物品 soybeanseedItem
func_149865_P()(BlockPamCrop.java:472-692) 返回产出物品 soybeanItem(不受该配置影响) 同样返回产出物品 soybeanItem
  • 默认配置下(cropsdropSeeds 默认 false,BlockRegistry.java:429):成熟后收获得到的是产出物品。
  • func_149866_i 末尾兜底返回 Items.field_151014_N(BlockPamCrop.java:469);func_149865_P 末尾兜底返回 Items.field_151015_O(BlockPamCrop.java:651)。

交互

触发 行为 来源
右键(meta == 7,rightclickharvestCrop 默认 true) 直接收获:调 func_149697_b 后把方块换成空气 BlockPamCrop.java:51-54
右键(rightclickmatureshowcropHearts 默认 false) 在成熟作物上方生成心形粒子 BlockPamCrop.java:43-50
随机刻生长 未覆写,继承原版 全源码树无 func_149874_m
骨粉 未覆写,继承原版 BlockCrops —

rightclickharvestCrop 为 true 时 func_149745_a 返回 0(BlockPamCrop.java:58-63),即左键破坏成熟作物不掉落,必须右键收获。

相关配置项

配置项 所属 默认值 对本方块的作用 来源
crops / cropsdropSeeds BlockRegistry false 决定收获给种子还是给产出物品 BlockRegistry.java:429
crops / enablecropspecialplanting BlockRegistry true 开启与否对农田类作物无影响 BlockRegistry.java:435
crops / rightclickharvestCrop BlockRegistry true 是否允许右键收获;关闭后左键破坏才掉落 BlockRegistry.java:432
crops / rightclickmatureshowcropHearts BlockRegistry false 右键时是否冒心形粒子 BlockRegistry.java:431
crops / cropfoodRestore ItemRegistry 1 产出物品的食物值 ItemRegistry.java:912
crops / cropsaturationRestore ItemRegistry 0.6 产出物品的饱和度 ItemRegistry.java:913
miscellaneous recipes / enablecropitemsasseeds ItemRegistry true 产出物品能否当种子直接种下 ItemRegistry.java:923

种子还可否从草丛掉落,由 PamCropSeedDropRegistry 中同名 <crop>seeddropfromgrass 开关控制(PamCropSeedDropRegistry.java),稀有度取 seedrarity(默认 1,ItemRegistry.java:922)。

源码缺陷与注意事项

  1. func_149866_i 的 cropsdropSeeds = false 分支与 func_149865_P 内容完全重复(两处各 60 条同序映射,共 120 条),源码层面存在冗余。
  2. BlockPamCrop.func_149727_a 里 meta 被赋值后紧接着又判 meta == 7 (BlockPamCrop.java:51)—— 这是 CFR 对同一局部变量的重复还原,不是缺陷。
  3. func_149691_a(BlockPamCrop.java:31-39)中的 if (meta == 6) meta = 5; 使第 6 阶段与第 4/5 阶段共用同一张贴图,因此 8 个阶段只对应 4 张贴图。这是有意为之的贴图复用,不是 bug。

相关条目

浏览全部模组