TileEntityPamFishTrap
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamFishTrap |
HarvestCraft.java:101 |
| 类 | TileEntityPamFishTrap |
— |
| 关联方块 | Fish Trap(harvestcraft:fishtrap) |
BlockRegistry.java:651 |
| GUI ID | 9 |
BlockPamFishTrap.java:77 |
| 容器类 | ContainerPamFishTrap |
GuiHandler.java:76 |
| GUI 类 | GuiPamFishTrap |
GuiHandler.java:116 |
槽位数量与布局
private ItemStack[] inventory = new ItemStack[19](TileEntityPamFishTrap.java:29)
| 槽位 | 内容 | 数量 |
|---|---|---|
| 0–17 | 捕获物(产物区,自动填充) | 18 |
| 18 | 鱼饵 ItemRegistry.fishtrapbaitItem |
1 |
run() 每次取 0–17 中第一个空槽放入产物,并调 func_70298_a(18, 1) 扣 1 个鱼饵(:201)。
可处理的操作
| 操作 | 判定 | 行 |
|---|---|---|
canRun() |
(槽18 是 fishtrapbaitItem) && countFlowers() >= 5 |
:185 |
countFlowers() |
半径 2 圆内、同 Y 层的 BlockLiquid 数量 |
:123-132 |
| 抽取产物 | TrapRecipes.getRandomOutputForBait(FISH_TRAP_RECIPES, fishtrapbaitItem) → 加权随机 |
:191 |
BlockLiquid 不区分水与岩浆 —— 在岩浆中放置鱼陷阱同样满足条件(源码无流体类型判定)。
半径判定为半径 2 的圆并排除 4 个角格(:132),最多 20 格。
处理耗时 / 速率(两个数字,勿混)
| 概念 | 公式 | 行 | 含义 |
|---|---|---|---|
getRunTime() 环境速率 |
起始 3500 tick;每个 BlockLiquid ×0.95;每个相邻 pamfishTrap ÷0.85 |
:102-117 |
越小越快 |
getRunTime(ItemStack) 鱼饵续航 |
鱼饵 → 3200 tick | :207-212 |
鱼饵提供的总工作时长 |
产出判定 produceTime >= Math.floor(getRunTime())(:165)。runTime 归零且 canRun() 时按 getRunTime(bait) 续期(:147-148)。
推算(源码常量):20 格全是液体 → 3500 × 0.95^20 ≈ 2357 tick ≈ 118 秒/件;空旷处 3500 tick = 175 秒/件。
与 Animal Trap 完全同构:3500 / 0.95 / 0.85 / 3200 四个数字一模一样,只把统计对象从泥土草换成液体。
产物条数取决于配置(TrapRecipes.java:47-83)
TrapRecipes.FISH_TRAP_RECIPES 由 if (ItemRegistry.enableharvestcraftfish) 分成两个互斥分支:
| 分支 | 条件 | 条数 | 行 |
|---|---|---|---|
| HarvestCraft 鱼 | enableharvestcraftfish == true |
30 | TrapRecipes.java:48-77 |
| 仅原版鱼 | enableharvestcraftfish == false |
4 | TrapRecipes.java:79-82 |
| 默认值 | ItemRegistry.java:989 → config.get(…, true).getBoolean(true) |
→ 默认 30 条 | ItemRegistry.java:989 |
true分支:4 个原版鱼元数据变体(Items.field_151115_aPmeta 0/1/2/3,meta 0 权重 7)+ 26 个 HarvestCraft 鱼类(anchovyrawItem、bassrawItem、…、walleyerawItem)。false分支:仅 4 个原版鱼元数据变体,权重 7 / 2 / 1 / 1。- 两参重载
addFishRecipe(bait, out)默认权重 1(TrapRecipes.java:94-96)。
「枚举/分支注册导致调用点严重虚高」的直接例子:
grep得到 34(两分支相加),但任一配置下只加载其中一个分支。
源码缺陷
isStackValidForSlot/func_94041_b恒返回 false(:240-242/:244-246)→ 完全不支持漏斗/管道自动化。countFlowers()名实不符:统计液体,与花无关(:123);同名方法在TileEntityPamAnimalTrap中统计泥土/草,语义完全相反。- 方法名残留:取产物方法名为
getComb(),复制自 Apiary。 - 局部变量未改名:
queenBee(:148)指代鱼饵。 - 岩浆等同水源:无流体类型区分,属实现粗糙而非崩溃级缺陷。
- 多方块 / 控制器 / 可否旋转:源码未定义。
相关条目
- 方块:Fish Trap
- 兄弟:Animal Trap、Apiary