TileEntityPamGrinder
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamGrinder |
HarvestCraft.java:102 |
| 类 | TileEntityPamGrinder |
— |
| 关联方块 | Grinder / Mincer(harvestcraft:grinder) |
BlockRegistry.java:640-641 |
| GUI ID | 10 |
BlockPamGrinder.java:91 |
| 容器类 | ContainerPamGrinder |
GuiHandler.java:79 |
| GUI 类 | GuiPamGrinder |
GuiHandler.java:119 |
⚠ 本 TileEntity 的注册是无条件的(
HarvestCraft.java:102),而方块harvestcraft:grinder只在enablemeatGrinder为真时才注册(BlockRegistry.java:640,默认值false)。默认配置下这是一条指向不存在方块的孤儿注册。要看到机器必须开启backports.enablemeatGrinder。
槽位数量与布局
private ItemStack[] grinderItemStacks = new ItemStack[3](TileEntityPamGrinder.java:27)
| 槽位 | 内容 | 槽位类 | GUI 坐标(ContainerPamGrinder.java:28-30) |
|---|---|---|---|
| 0 | 待绞的原料 | SlotPamGrinder |
(80, 23) |
| 1 | 产物 1 | SlotPamResult(只可取出) |
(62, 54) |
| 2 | 产物 2 | SlotPamResult(只可取出) |
(98, 54) |
共 3 槽,与 Presser 布局逐槽相同。SlotPamGrinder 只接受 ItemMincedMeat 实例。
注意:两个产物槽的内容相同 —— 同一 meta 的 mincedmeatcookedItem,不是两种不同产物。
可处理的操作
| 操作 | 说明 |
|---|---|
| 查询配方 | GrinderRecipes.getGrindingResult(ItemStack) → ItemStack[2] |
| 输入类型 | ItemMincedMeat 的 8 个 meta(beef / pork / chicken / fish / mutton / rabbit / turkey / venison) |
配方条数:无法静态确定(动态注册)
GrinderRecipes 在类初始化时从矿辞典动态构建:
for (meta = 0; meta < 8; ++meta) // ItemMincedMeat.meatTypes.length
for (ItemStack oreStack : OreDictionary.getOres("listAll" + meatTypes[meta] + "raw"))
if (oreStack 的 Item 是 ItemMincedMeat) continue
registerItemRecipe(oreStack, 绞熟肉 meta, 绞熟肉 meta)
| 参数 | 值 | 来源 |
|---|---|---|
| 肉类种类数 | 8 | base/item/ItemMincedMeat.java 的 meatTypes |
| 矿辞典名模式 | "listAll" + 种类名 + "raw" |
GrinderRecipes 构造器 |
| 单种类条数 | = 该矿辞典名在 OreDictionary 中的条目数,由其它模组决定 | — |
总条数 = Σ(8 个矿辞典名各自的条目数),在纯净 1.7.10 下远小于跨模组整合包。本仓库无法给出确定数字。
这是「枚举/循环注册」陷阱的反向例子:
grep registerItemRecipe会得到 0(全部在循环内),而真实条数是一个随整合包变化的正整数。
随包文档 HarvestCraft 1.7.10Lb Recipes.txt 没有 //GRINDER RECIPES 段落,与它作为默认关闭的 backport 一致。
处理耗时 / 速率
| 参数 | 值 | 行 |
|---|---|---|
| 完成判定 | grinderCookTime >= 125 → 125 tick = 6.25 秒 |
TileEntityPamGrinder.java:109 |
| 进度条换算 | grinderCookTime * par1 / 125 |
:97 |
| GUI 进度条像素 | 24 | GuiPamGrinder.java:36 |
| 燃料 | 无 | :20 类声明 |
与 Presser 数值完全相同(125 tick、无燃料、3 槽、双产出)。
源码缺陷
- 孤儿 TileEntity 注册:
HarvestCraft.java:102无条件注册,而方块受enablemeatGrinder(默认false)门控 —— 默认配置下这条注册指向一个不存在的方块。 - 方块放置时抛
ClassCastException(在方块类,非本类):BlockPamGrinder.java:65把刚创建的TileEntityPamGrinder强转为TileEntityOven;同文件:70已正确写作(TileEntityPamGrinder)。触发条件:手持改名物品放置。 - 双产出内容重复:
registerItemRecipe(oreStack, 绞熟肉 meta, 绞熟肉 meta)把同一物品同时写入两个槽,「双产出」名不副实。 - 多方块 / 控制器 / 可否旋转:源码未定义。
相关条目
- 方块:Grinder / Mincer
- 兄弟:Presser(同参数、无条件可用)