Presser(压榨机)
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
基本信息
| 属性 | 值 | 来源 |
|---|---|---|
| 注册名 | harvestcraft:presser |
BlockRegistry.java:639 |
| 方块类 | BlockPamPresser extends BlockContainer |
BlockPamPresser.java:29-30 |
| 字段 | BlockRegistry.pamPresser |
BlockRegistry.java:50 |
| 构造 | new BlockPamPresser() |
BlockRegistry.java:450 |
| 显示名 | tile.presser.name = Presser |
en_US.lang:34 |
| 硬度 | 1.0f |
BlockRegistry.java:450 |
| 爆炸抗性 | 未设置(默认 2.0F) | — |
| TileEntity | TileEntityPamPresser | BlockPamPresser.java:42-44 |
| GUI ID | 1 |
BlockPamPresser.java:91 |
| 条件注册 | 无,无条件注册 | BlockRegistry.java:639 |
| 多方块 | 否,源码未定义任何多方块结构 | — |
| 朝向 | 放置时按玩家朝向设 0–3 metadata | BlockPamPresser.java:51-63 |
槽位布局(TileEntityPamPresser.java:27,combPresserItemStacks = new ItemStack[3])
| 槽位 | 内容 | 槽位类 | GUI 坐标(ContainerPamPresser.java:28-30) |
|---|---|---|---|
| 0 | 待压榨原料 | SlotPamPresser |
(80,23) |
| 1 | 主产物 | SlotPamResult(只可取出) |
(62,54) |
| 2 | 副产物 | SlotPamResult(只可取出) |
(98,54) |
Presser 是双产出机器:一次压榨同时给出两件产物(如果实 → 果汁 + 果饵)。
处理什么 / 产什么
配方表 PresserRecipes,查询入口 PresserRecipes.getPressingResult(ItemStack),返回 ItemStack[](长度 2)。
配方条数 = 43(集合运算)
私有构造器 PresserRecipes.java:19-64 内 this.registerItemRecipe(...) 调用连续出现在 :20–:62,共 43 处;无枚举/循环注册。
必须排除的干扰项::70 是 registerItemRecipe(Block, ItemStack, ItemStack) 辅助方法的方法体,不是配方点;:73 与 :82 是另两个辅助方法声明。
43 条与随包文档 HarvestCraft 1.7.10Lb Recipes.txt 的 //PRESSER RECIPES 段落(42 行条目)基本吻合。
产出类型分布(按源码调用参数统计):
| 副产物 | 条数 | 代表行 |
|---|---|---|
果饵 fruitbaitItem |
19 | :22–:31,35-40,46-51,61-62 |
谷物饵 grainbaitItem |
13 | :33,34,52,53,54,56,58,59,60 等 |
蔬菜饵 veggiebaitItem |
4 | :42,55,57 |
无副产物(null) |
4 | :20,41,43,44 |
蜂蜡 beeswaxItem |
1 | :21 |
处理耗时 / 速率
| 参数 | 值 | 来源 |
|---|---|---|
| 完成判定 | combPresserCookTime >= 125 → 125 tick = 6.25 秒 |
TileEntityPamPresser.java:109 |
| 进度条分母 | combPresserCookTime * par1 / 125 |
TileEntityPamPresser.java:97 |
| GUI 进度条像素宽度 | 24 | GuiPamPresser.java:36 |
| 燃料 | 无。不实现 IFuelHandler,不需要燃料槽 |
TileEntityPamPresser.java:20 |
| 驱动方式 | 持续 tick,无需玩家在旁 | TileEntityPamPresser.java:107 |
Presser(125 tick)比 Oven(100 tick)与 Churn/Quern(200 tick)都快,且省去燃料槽。
交互
| 触发 | 行为 | 来源 |
|---|---|---|
| 右键 | openGui(..., 1, ...);player.func_70093_af() 为真时不打开 |
BlockPamPresser.java:86-93 |
| 放置 | 设 0–3 朝向 | BlockPamPresser.java:51-63 |
| 破坏 | 掉落 Item.func_150898_a(BlockRegistry.pamPresser),并散落容器内物品 |
BlockPamPresser.java:46-48,69-84 |
源码缺陷
- 重命名放置时抛
ClassCastException。BlockPamPresser.java:65:
刚放置的 Presser 的 TileEntity 是if (par6Ist.func_82837_s()) { ((TileEntityOven)par1World.func_147438_o(xcoord, ycoord, zcoord)).func_145951_a(par6Ist.func_82833_r()); }
TileEntityPamPresser,却被强转为TileEntityOven。触发条件是手持物品带自定义名称(铁砧改名,func_82837_s()= hasDisplayName)。这显然是从BlockPamOven复制粘贴后忘了改类型——同文件:70处的同类代码已正确写作(TileEntityPamPresser)。 - 多方块 / 控制器 / 可否旋转:源码未定义。
相关条目
订正记录
- 本条目完全重写。旧版基于 MC 1.12.2 的
MatrexsVigil/harvestcraftfork(master分支),引用了该 fork 的类名与行号。旧版行号一律作废,现全部改以harvestcraft-1.7.10-GTNH反编译源码行号为准。