跳到正文
烈焰甘蔗Wiki

Oven(烤炉)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

基本信息

Oven 有两个注册名(关/开两种状态),共用同一个类。

属性 关闭态 开启态 来源
注册名 harvestcraft:oven harvestcraft:ovenon BlockRegistry.java:645 / :646
构造参数 new BlockPamOven(false) new BlockPamOven(true) BlockRegistry.java:456 / :457
字段 pamOven pamOvenon BlockRegistry.java:43 / :42
贴图 oven_front_off oven_front_on BlockPamOven.java:47
公共属性 值 来源
类 BlockPamOven extends BlockContainer implements IFuelHandler BlockPamOven.java:29-30
显示名 tile.oven.name / tile.ovenon.name 均为 Oven en_US.lang:48-49
硬度 / 抗爆 1.5f / 10.0f BlockRegistry.java:456-457
TileEntity TileEntityOven BlockPamOven.java:40
GUI ID 5 BlockPamOven.java:55
多方块 否,源码未定义任何多方块结构 —
朝向 放置时按玩家朝向设 4 个 metadata(0–3) BlockPamOven.java:78-83

槽位布局(TileEntityOven.java:15,inventory = new ItemStack[3])

槽位 内容 容器槽(ContainerOven.java:32-35)
0 待烧制原料(上) GUI (80,17)
1 燃料(下) GUI (80,53)
2 成品(SlotOven,只允许取出,不可放入) GUI (80,35)

每槽堆叠上限 64(TileEntityOven.java:16)。玩家背包 36 槽(3–29 主背包,30–38 快捷栏)。

处理什么 / 产什么

  • 配方表 OvenRecipes.getSmeltingResult(ItemStack);经验值 OvenRecipes.getSmeltExperience(ItemStack)(TileEntityOven.java:173-175)。
  • 匹配使用通配符比较:PamUtils.areItemStacksEqualWithWildcard,Short.MAX_VALUE 元数据视为通配(PamUtils.java:9-14)。

配方条数(集合运算,非调用点计数)

来源 条数 位置
字面 this.addSmelting(Item, ...) 48 OvenRecipes.java 构造器
字面 this.addSmeltingRecipeForBlock(...) 3 OvenRecipes.java:27,32,33
ItemFishFood.FishType.values() 循环 = FishType 中 func_150973_i() 为真的常量个数 OvenRecipes.java:51-54
绞肉 meta 循环 迭代 mincedmeatrawItem.func_77612_l() = 8 OvenRecipes.java:79-83
  • 前两项合计 51 条为静态可数。
  • FishType 循环的确切条数无法从本仓库核实(仓库内无 Minecraft 源码与 MCP 映射),只记录循环条件本身。
  • 绞肉循环被 BlockRegistry.enablemeatGrinder && ItemRegistry.forcecookinginmeatrecipes 双重开关门控(OvenRecipes.java:79),且存在缺陷,见下。

处理耗时 / 速率

参数 值 来源
烹饪判定 ovenCookTime == 100 → 100 tick = 5 秒 TileEntityOven.java:180
每 tick 燃料消耗 -1 TileEntityOven.java:164
冷却降速 可容纳物品数 > 1 时每次同时烤 2 个 TileEntityOven.java:176-178
进度条分母 200(ovenCookTime * 200 / 200) TileEntityOven.java:143
GUI 进度条像素宽度 48 GuiOven.java:43

Oven 是本作最快的烹饪机器:100 tick,而 Churn 与 Quern 均为 200 tick。

耗什么(燃料)

  • 专属燃料:ItemRegistry.oliveoilItem(橄榄油)→ 1600 tick(TileEntityOven.java:172-175)。
  • 通用燃料:GameRegistry.getFuelValue(stack);本类实现 IFuelHandler,getFuelTime 在返回 0(TileEntityOven.java:167-170),即不额外提供燃料值。

交互

触发 行为 来源
右键 openGui(..., 5, ...) BlockPamOven.java:55
放置 按 player.func_70048_d().field_70179_ys 设 0–3 朝向 BlockPamOven.java:78-83
破坏 掉落 Item.func_150898_a(BlockRegistry.pamOven) —— 注意是关闭态方块 BlockPamOven.java:59-61

源码缺陷

  1. 进度条永远只填一半。GuiOven.java:43 用 getCookProgressScaled(48),而公式 ovenCookTime * 48 / 200(TileEntityOven.java:143)在 ovenCookTime 达到 100 时只得到 24 像素。分母 200 与实际完成阈值 100 不一致,箭头动画停在半途。对比 GuiChurn.java:43 / GuiQuern.java:43 传 24 而完成阈值为 200(TileEntityChurn.java:… 同理匹配),三台机器中只有 Oven 不匹配。
  2. 绞肉配方元数据丢失。OvenRecipes.java:81 在循环内调用 .func_77973_b() 取回 Item(丢掉 meta),随后 addSmelting 以 new ItemStack(input, 1, Short.MAX_VALUE) 建键(OvenRecipes.java 私有 addSmelting)。8 个 meta 因此写入同一个键,互相覆盖;叠加 PamUtils.areItemStacksEqualWithWildcard 把 Short.MAX_VALUE 当通配,任意绞肉元都会被匹配到最后一次写入的输出(meta 7,鹿肉)。8 次迭代只产生 1 条有效映射。
  3. 「开启态」方块掉落的是「关闭态」物品。BlockPamOven.java:59-61 的 func_149650_a 写死返回 Item.getItemFromBlock(BlockRegistry.pamOven),没有区分 this。pamOvenon 是独立注册的方块(BlockRegistry.java:646),有自己的注册名 ovenon,但破坏它只会掉一个 oven 物品;harvestcraft:ovenon 的物品形式在正常玩法中拿不到。Churn、Quern 三者同型(各自 :59-61)。
  4. 无多方块、无控制器、可否旋转:源码未定义(BlockPamOven.java 无任何 canConnect/结构判定)。

相关条目

订正记录

  • 本条目为新增。旧版 wiki 的机器类条目基于 MC 1.12.2 fork(TileEntityPamOven 等 1.12.2 类名体系),行号与类名不适用于 1.7.10,本条目一律以 harvestcraft-1.7.10-GTNH 反编译行号为准。
浏览全部模组