TileEntityPamApiary
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamApiary |
HarvestCraft.java:94 |
| 类 | TileEntityPamApiary |
— |
| 关联方块 | Apiary(harvestcraft:apiary) |
BlockRegistry.java:638 |
| 注册是否条件化 | 否,9 个 TileEntity 全部无条件注册 | HarvestCraft.java:94-102 |
| GUI ID | 0 |
BlockPamApiary.java:77 |
| 容器类 | ContainerPamApiary |
GuiHandler.java:49 |
| GUI 类 | GuiPamApiary |
GuiHandler.java:89 |
槽位数量与布局
private ItemStack[] inventory = new ItemStack[19](TileEntityPamApiary.java:32)
索引常量在源码中显式定义(TileEntityPamApiary.java:33-35):
| 常量 | 值 |
|---|---|
SLOT_WAX_MIN |
0 |
SLOT_WAX_MAX |
17 |
SLOT_QUEENBEE |
18 |
| 槽位 | 内容 | 数量 |
|---|---|---|
| 0–17 | 蜂产品(蜂蜡块 / 蜂巢 / 幼虫),自动产出 | 18 |
| 18 | 蜂王 ItemRegistry.queenbeeItem |
1 |
容器 GUI 排布(ContainerPamApiary):产物区 6 列 × 3 行(双层循环 x<6 / y<3,槽索引 y + x*3,落在 0–17),蜂王槽单独放在第 19 格。蜂王槽的堆叠上限被限制为 1(SlotPamApiary.func_75219_a)。
可处理的操作
| 操作 | 判定 | 行 |
|---|---|---|
能否运行 canRun() |
槽 18 是蜂王 且 getItemDamage() != getMaxDamage() |
:173-175 |
产出物 getComb() |
见下 | :180-194 |
执行一轮 run() |
取 1 件产物放入 0–17 的首个空槽,蜂王 damageItem(1) |
:200-… |
isStackValidForSlot 与 func_94041_b 均写作 slot == 18 && stack.func_77973_b() == ItemRegistry.queenbeeItem(:240、:244)—— 只接受槽 18 放蜂王,其余槽位一律拒绝。
处理耗时 / 速率(两个独立数字,勿混)
| 概念 | 公式 | 行 |
|---|---|---|
getRunTime() 环境速率 |
起始 3500 tick;半径 2 圆内每个 BlockFlower / BlockCrops / BlockPamCrop / BlockPamNormalGarden ×0.95;每个相邻 pamApiary ÷0.85 |
:109-123 |
getRunTime(ItemStack) 蜂王续航 |
queenbeeItem → 3200 tick |
:212-213 |
产出判定 produceTime >= Math.floor(getRunTime())(:167)。环境扫描为半径 2 的圆并排除 4 个角格(:117),最多 20 格。
推算(源码常量,非估算):20 格全是花/作物时 3500 × 0.95^20 ≈ 2357 tick ≈ 118 秒/件;空旷处 3500 tick = 175 秒/件。
产物概率(getComb(),:180-194)
| 条件 | 产物 | 概率 |
|---|---|---|
| 蜂王耐久 == 17 | ItemRegistry.grubItem |
100% |
否则 nextInt(100) < 50 |
ItemRegistry.waxcombItem |
50% |
否则 < 95 |
ItemRegistry.honeycombItem |
45% |
| 否则 | ItemRegistry.grubItem |
5% |
源码缺陷
- 「蜂王耗尽即移除」是死代码。
TileEntityPamApiary.java:143-147:
① 减的是 0,恒为无操作;②queenBee.field_77994_a -= 0; // 减 0 if (queenBee.field_77994_a == 0) queenBee = null; // 只改局部变量
queenBee是局部变量,置 null 不会写回inventory[18]。该分支永远无法清空蜂王槽。 - 蜂产品无法自动化取出。
func_94041_b对 0–17 槽恒返回 false(:244),漏斗/管道插入被完全拒绝。 - 局部变量名
queenBee(:145、:150)在三个陷阱/养蜂类中被广泛复制复用。
相关条目
- 方块:Apiary
- 兄弟:Animal Trap、Fish Trap —— 与本类同为 19 槽 + 3500/3200 结构