HarvestCraft
[!INFO] 事实基准:
/Users/evlos/a/mc117src/harvestcraft-1.7.10-GTNH/Version:harvestcraft-1.3.14-GTNH| 重建: 2026-10-02
[!WARNING] 本分类的事实基准是反编译产物,不是开源源码
HarvestCraft 官方从未开源 1.7.10 分支。本 wiki 早期版本误用了
/Users/evlos/a/mirror/harvestcraft/—— 那是MatrexsVigil/harvestcraft, 检出master,MC 1.12.2 的非 GTNH fork。现以官方发布的 1.7.10 GTNH jar(2.4 MB / 151 class)经 CFR 0.152 反编译的 145 个 .java / 18945 行为唯一事实基准。
版本自证(四条独立证据)
证据 值 mcmod.infomcversion 1.7.10/ 依赖gtnhlib@[0.2.3,)主类注解 @Mod(modid="harvestcraft", acceptedMinecraftVersions="[1.7.10]")class 文件 major 0x34= 52 = Java 8META-INF/harvestcraft_AT.cfgEntityFishHook field_146039_d= 1.7.10 的 SRG 字段名
已删除的 1.12.2 幻影条目
旧版 27 个条目中,8 个文档化了 1.7.10 根本不存在的东西,已全部删除:
已删条目 1.7.10 实际 block/shippingbinShipping Bin 是 1.12.2 才有的方块 block/well「Brick Well」只是 BlockPamSink的 metadata 3(该类从不设 metadata,正常放置恒为 meta 0)block/waterfilter1.7.10 无此方块 item/crop-bag1.7.10 无此物品 block/frostgarden/shadedgarden/soggygarden/windygarden1.7.10 只有 12 种花园,无这四种 另有 2 个改名废止页一并删除:
groundtrap→animaltrap、watertrap→fishtrap(这两个注册名在 1.7.10 源码中出现 0 次,是 1.12.2 fork 的命名)。
身份
| 属性 | 值 |
|---|---|
| 分类名 | harvestcraft |
| modid | harvestcraft(全小写,与分类名一致) |
| 显示名 | Pam’s HarvestCraft |
| 作者 | Pamela Collins |
| 版本 | 1.3.14-GTNH |
| MC / Forge | 1.7.10 / 10.13.4.1614 |
| 强依赖 | gtnhlib@[0.2.3,) |
| 语言 | 145 个 .java / 18945 行;0 Scala、0 Kotlin |
| 源码目录 | /Users/evlos/a/mc117src/harvestcraft-1.7.10-GTNH/ |
注册普查(全部现算,集合运算)
| 对象 | 数量 | 注册真源 |
|---|---|---|
| 方块 | 188 | BlockRegistry.java registerBlock(两参 175 + 三参 13) |
| 物品 | 787 | ItemRegistry.java registerItem,787 个注册名全不重复 |
| TileEntity | 9 | HarvestCraft.java:94-102 |
| 网络包 | 3 个真注册(ID 0/1/2,均 Side.SERVER)+ 5 个死壳包 |
PacketHandler.init() |
| 世界生成器 | 4 个真注册(2 个有条件)+ 5 个辅助类(1 个死代码) | HarvestCraft.init() |
| 配置项 | 189 项 / 14 类 | Config + BlockRegistry/ItemRegistry 去重 |
| 兼容层 | 5 个(Thaumcraft / MFR / Crayfish / NEI / AppleCore) | 仅 Thaumcraft/MFR/AppleCore 走 Loader.isModLoaded;Crayfish 走配置项 + IMC,NEI 无条件 IMC |
方块 188 的构成(加总闭合):18 机器与陷阱 + 12 花园 + 36 树苗 + 36 果实 + 16 蜡烛 + 60 作物 + 10 蛋糕 = 188
维度与条目数
| 维度 | 文件数 | 说明 |
|---|---|---|
block/ |
191 | 185 个条目覆盖 188 个注册名(oven/churn/quern 各含一个 on 态注册名)+ 6 个索引/说明页 |
item/ |
794 | 787 个已注册物品 1:1 + 7 个家族索引页 |
tile/ |
9 | 9 个 TileEntity |
network/ |
6 | 3 个真包 + 1 通道页 + 2 死壳页 |
worldgen/ |
10 | 9 个生成器类 + 1 注册总表 |
config/ |
15 | 1 总览 + 14 个配置分类,189 项全覆盖 |
integration/ |
5 | 1 总览 + 4 个独立兼容层条目(AppleCore 在总览页内单列一节,无独立文件) |
| 合计 | 1030 |
机器与陷阱方块(18)
grinder受配置backports.enablemeatGrinder门控,默认 false; 但它的 TileEntity 却无条件注册,默认配置下产生指向不存在方块的孤儿 TE。
花园方块(12)
全部是 1×1×1 单方块:BlockGarden extends BlockFlower,碰撞箱 0.8×0.8。
无多方块结构、无控制器、无可旋转性判定。
| 条目 | 条目 | 条目 |
|---|---|---|
| Berry Garden | Desert Garden | Gourd Garden |
| Grass Garden | Ground Garden | Herb Garden |
| Leafy Garden | Mushroom Garden | Stalk Garden |
| Textile Garden | Tropical Garden | Water Garden |
另有 Arid Garden 说明页: 旧条目名
aridgarden在 1.7.10 的 12 个注册名中不存在, 对应的是desertgarden。
蜡烛方块(16)
索引:Candle(蜡烛)
果树方块(36 果实 + 36 树苗)
总对照表:Fruit Trees(果树总览)
树苗按温度分 3 组(用集合运算确定,非调用点计数): 温带 9(全橡木 metadata 0)/ 暖带 24(全丛林 metadata 3)/ 产木 3(云杉 1 + 丛林 3×2)。 分类与木材 metadata 严格对应,说明分组不是任意的。
36 果实方块(33 个是 BlockPamFruit + 3 个 BlockPamFruitingLog):
36 树苗方块:
三个产木型都能右键产出,但
setDropItem分散在两个文件:pamPaperbark→Items.field_151121_aF(纸,BlockRegistry.java:523);pamCinnamon→cinnamonItem(ItemRegistry.java:1171);pamMaple→maplesyrupItem(ItemRegistry.java:1181,掉的是糖浆不是鲜果)。⚠️ 只 grep
BlockRegistry.java会得出「只有 paperbark 有产出」的错误结论。 本页初稿就是这样写错的,由一条「伪缺陷」演变成 3 条错误断言。 跨文件断言必须用集合运算,不能只查一个文件就下全模结论。
作物方块(60)
生长阶段 8(meta 0–7),每作物 4 张贴图(meta 6 复用 meta 5 的图)。 地面分布:农田 54 / 水 4 / 沙 1 / 原版方块 1。 1.7.10 没有季节/温度系统(
season/temperature/cropSeason全文命中 0)。 生长继承原版BlockCrops,HarvestCraft 无覆写 ⇒ 成熟时间/浇水判定源码未定义。
蛋糕方块(10)
索引:Cake(蛋糕方块总览)
缺陷:
setEdibleAtMaxHunger(BlockPamCake.java:93-95)全 mod 零调用者 ⇒isEdibleAtMaxHunger恒 false,饥饿满时永远吃不了蛋糕。
蜂产品:1.7.10 没有方块形态
Bee Products(蜂产品)— 1.7.10 GTNH 版不存在方块形态
🔴 订正:旧版有条目声称存在蜂产品方块。1.7.10 没有 ——
BeeBlock.java不存在,BlockRegistry里honey/honeycomb/waxcomb/pressedwax全部未注册,en_US.lang也无tile.beeproducts。ItemPamBee确实存在,但它只被实例化 1 次(ItemRegistry.java:1011→queenbeeItem), 是蜂王物品而非蜂产品。蜂产品在 1.7.10 一律是物品,见 蜂王。
TileEntity(9)
| 条目 | 条目 | 条目 |
|---|---|---|
| TileEntityPamAnimalTrap | TileEntityPamApiary | TileEntityChurn |
| TileEntityPamFishTrap | TileEntityPamGrinder | TileEntityMarket |
| TileEntityOven | TileEntityPamPresser | TileEntityQuern |
全部无条件注册(
HarvestCraft.java:94-102)。 陷阱与市场完全不支持漏斗:两个陷阱类写死isStackValidForSlot→return false(TileEntityPamAnimalTrap.java:240-242、TileEntityPamFishTrap.java:238-240); 市场的同名方法在反编译产物里是未解析 SRG 名func_94041_b→return false(TileEntityMarket.java:131-133),且该类只实现IInventory、不实现ISidedInventory。 Apiary 有 19 个槽位,但 0–17 槽同样恒 false ⇒ 蜂产品无法自动取出。
网络包(6)
| 条目 | 条目 | 条目 |
|---|---|---|
| AbstractPacket(未使用的旧版包基类) | 旧版空壳包(5 个) | MessageMarketBrowse(市场翻页请求) |
| MessageMarketBuy(市场购买请求) | MessageMarketClosed(关闭市场 GUI) | PacketHandler(网络通道与注册表) |
3 个真注册(
MessageMarketBrowse/MessageMarketBuy/MessageMarketClosed,ID 0/1/2, 全部Side.SERVER)+ 5 个死壳包(PacketAnimalTrap/PacketApairy/PacketFishTrap/PacketMarket/PacketPresser,四个方法全空,从无实例化点)。缺陷:
HarvestCraft.java:162在已被占用的名字"harvestcraft"上再建一个通道,该通道从未被使用。
世界生成(10)
4 个真注册(2 个有条件),权重 1/0/0/0;
WorldGenPamFruitPalmTree是死代码。已用真字节码裁定(不是反编译伪影):
PamBeeGenerator、PamTreeGenerator、PamGardenGenerator的外层维度 switch 确实缺break,是真缺陷; 而PamTreeGenerator.generateSurface的内层 switch 是 javac 省略冗余break,语义等价。其它:
PamGardenGenerator:47的rand.nextInt(1)恒返回 0(所有花园形态固定);WorldGenPamFruitPalmTree:41内层循环误用x而非z;WorldGenPamSalt:30的nextInt(max-min)永远达不到声明的maxVeinSize=6。
配置(15,189 项全覆盖)
兼容层(5)
| 条目 | 条目 | 条目 |
|---|---|---|
| MrCrayfish’s Furniture Mod 兼容 | 兼容层总览 | MineFactoryReloaded 兼容 |
| NotEnoughItems 兼容 | Thaumcraft 兼容 |
注入规模(集合运算,非调用点计数):MFR 348 个有效注册(源码只有 13 个字面调用点, 其余由 4 个循环按 60/9/24/3 展开)、Thaumcraft 95 个作物、Crayfish 92 条配方、NEI 隐藏 109 个物品。
两份
NEIHarvestcraftConfig副本均未接线(无@Mod、无加载点)。HarvestCraft.java:131-134的 6 条 IMC 消息没有isModLoaded守卫。
物品(794 文件 = 787 个已注册物品 + 7 个家族索引页)
787 个注册名与条目 1:1 对应,已独立验证:0 个注册名未在任何条目正文中出现。
家族索引页:Pam Bee(蜂类与诱饵家族索引) · Pam Cake Food(蛋糕物品形态家族索引) · Pam Food(普通食物家族索引) · Pam Potion Food(饮品家族索引) · Pam Seed Food(可食用作物 / 种子家族索引) · Pam Tool(工具与装备家族索引) · ItemPamTopTierFood(顶级食物)—— 本类在本 jar 中不存在
<details><summary>展开全部 787 个单物品条目</summary>
</details>
覆盖状态
| 维度 | 分母(注册真源集合) | 已成文 | 覆盖率 |
|---|---|---|---|
| 方块 | 188 | 188 | 100% |
| 物品 | 787 | 787 | 100% |
| TileEntity | 9 | 9 | 100% |
| 网络包 | 3 真 + 5 死壳 | 8 | 100% |
| 世界生成 | 4 真 + 5 辅助 | 9 | 100% |
| 配置项 | 189 / 14 类 | 189 / 14 | 100% |
| 兼容层 | 5 | 5 | 100%(按注入对象逐条枚举) |
📌 本机没有 MCP 反混淆映射表,所有原版 SRG 名(
field_151045_i等)一律标注 「未解析」并附源码内的语义佐证,没有凭记忆替换成Items.xxx。 凡依赖解析才能确定的数值(如最终饱食度)均写「源码未定义」,未填默认值。