TileEntityOven
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamOven |
HarvestCraft.java:97 |
| 类 | TileEntityOven implements IFuelHandler |
TileEntityOven.java:20 |
| 关联方块 | Oven(harvestcraft:oven) |
BlockRegistry.java:645 |
| GUI ID | 5 |
BlockPamOven.java:55 |
| 容器类 | ContainerOven |
GuiHandler.java:64 |
| GUI 类 | GuiOven |
GuiHandler.java:104 |
槽位数量与布局
private ItemStack[] inventory = new ItemStack[3](TileEntityOven.java:15)
| 槽位 | 内容 | 槽位类 | GUI 坐标(ContainerOven.java:32-35) |
|---|---|---|---|
| 0 | 待烧制原料 | Slot |
(80, 17) |
| 1 | 燃料 | Slot |
(80, 53) |
| 2 | 成品 | SlotOven(只可取出) |
(80, 35) |
共 3 槽,每槽堆叠上限 64(TileEntityOven.java:16)。加上玩家背包 36 槽,容器共 39 槽。
可处理的操作
| 操作 | 说明 | 行 |
|---|---|---|
| 查产物 | OvenRecipes.getSmeltingResult(ItemStack) |
:173 |
| 查经验 | OvenRecipes.getSmeltExperience(ItemStack) |
:175 |
| 匹配方式 | PamUtils.areItemStacksEqualWithWildcard(Short.MAX_VALUE 元数据 = 通配) |
PamUtils.java:9-14 |
燃料判定 isItemFuel |
先查橄榄油,再 GameRegistry.getFuelValue |
:167-176 |
getFuelTime |
作为 IFuelHandler 实现,橄榄油 = 1600,否则 0 |
:167-170 |
配方条数(集合运算)
| 来源 | 条数 | 位置 |
|---|---|---|
字面 this.addSmelting(Item, …) |
48 | OvenRecipes 私有构造器(:23-88) |
字面 this.addSmeltingRecipeForBlock(…) |
3 | OvenRecipes.java:27,32,33 |
ItemFishFood.FishType.values() 循环 |
= 该枚举中 func_150973_i() 为真的常量数 |
OvenRecipes.java:51-54 |
| 绞肉 meta 循环 | 迭代 8 次,实际只产生 1 条有效映射 | OvenRecipes.java:79-83 |
静态可数 = 51 条。FishType 循环的常量个数无法从本仓库核实(无 Minecraft 源码与 MCP 映射)。
处理耗时 / 速率
| 参数 | 值 | 行 |
|---|---|---|
| 完成判定 | ovenCookTime == 100 → 100 tick = 5 秒 |
TileEntityOven.java:180 |
| 每 tick 燃料消耗 | -1 |
:164 |
| 并行产能 | 可容纳物品数 > 1 时每轮同时烤 2 件 | :176-178 |
| 进度条分母 | 200 | :143 |
| GUI 进度条像素 | 48 | GuiOven.java:43 |
| 燃料值 | 橄榄油 1600 tick | :172 |
Oven 是本作最快的烹饪机器(100 tick),比 Churn / Quern(均 200 tick)快一倍。
源码缺陷
- 进度条永远只填一半。
GuiOven.java:43传getCookProgressScaled(48),公式为ovenCookTime * 48 / 200(TileEntityOven.java:143),而完成阈值是 100(:180)—— 分母 200 与阈值 100 不一致,箭头动画停在 24/48 像素处。Churn/Quern 的分母与阈值都是 200,无此问题。 - 绞肉配方元数据丢失。
OvenRecipes.java:81在循环内调.func_77973_b()取回 Item(丢掉meta),而addSmelting以new ItemStack(input, 1, Short.MAX_VALUE)建键。8 个 meta 写入同一个键互相覆盖;叠加areItemStacksEqualWithWildcard把Short.MAX_VALUE当通配 → 任意绞肉元都匹配到最后写入的那一条输出(meta 7,鹿肉)。8 次迭代 → 1 条有效映射。该分支还需enablemeatGrinder与forcecookinginmeatrecipes同时开启。 - 多方块 / 控制器 / 可否旋转:源码未定义。