TileEntityPamPresser
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamPresser |
HarvestCraft.java:95 |
| 类 | TileEntityPamPresser |
— |
| 关联方块 | Presser(harvestcraft:presser) |
BlockRegistry.java:639 |
| GUI ID | 1 |
BlockPamPresser.java:91 |
| 容器类 | ContainerPamPresser |
GuiHandler.java:52 |
| GUI 类 | GuiPamPresser |
GuiHandler.java:92 |
槽位数量与布局
private ItemStack[] combPresserItemStacks = new ItemStack[3](TileEntityPamPresser.java:27)
| 槽位 | 内容 | 槽位类 | GUI 坐标(ContainerPamPresser.java:28-30) |
|---|---|---|---|
| 0 | 待压榨原料 | SlotPamPresser |
(80, 23) |
| 1 | 主产物 | SlotPamResult(只可取出) |
(62, 54) |
| 2 | 副产物 | SlotPamResult(只可取出) |
(98, 54) |
共 3 槽,是双产出布局:一次压榨同时给出 2 件物品(可为空 —— 配方允许 output2 == null)。
可处理的操作
| 操作 | 说明 | 行 |
|---|---|---|
| 查询配方 | PresserRecipes.getPressingResult(ItemStack) → ItemStack[2] |
:131 附近 |
canRun() |
原料存在 且 两个产物槽均可接收产物 | :131-… |
| 执行 | 扣 1 原料,产物入槽 | :157 附近 |
处理耗时 / 速率
| 参数 | 值 | 行 |
|---|---|---|
| 完成判定 | combPresserCookTime >= 125 → 125 tick = 6.25 秒 |
TileEntityPamPresser.java:109 |
| 进度条换算 | combPresserCookTime * par1 / 125 |
:97 |
| GUI 进度条像素 | 24 | GuiPamPresser.java:36 |
| 燃料 | 无(不实现 IFuelHandler,没有燃料槽) |
:20 类声明 |
| 驱动 | 持续 tick,无需玩家在旁 | :107 |
配方条数 = 43(PresserRecipes.java:20-62 连续 43 处 registerItemRecipe,无循环注册;:70 是辅助方法体,不计)。
Presser 是本作最快的机器之一(125 tick),快于 Oven(100 tick 之外唯一省燃料的)与 Churn/Quern(200 tick)。
源码缺陷
canRun()使用>=比较产物堆叠余量(TileEntityPamPresser.java)。判据形如products[0].stackSize + results[0].stackSize >= func_77976_d()(结果最大堆叠量)。当产物槽剩余容量恰好等于产出量时,条件成立,属边界包含而非 off-by-one bug,但与「必须严格大于 0 才可放入」的直觉不同,且两个产物槽是「与」关系,任一槽满即整轮停摆。- 多方块 / 控制器 / 可否旋转:源码未定义(本类无结构判定代码)。