跳到正文
烈焰甘蔗Wiki

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_aP meta 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(两分支相加),但任一配置下只加载其中一个分支。

源码缺陷

  1. isStackValidForSlot / func_94041_b 恒返回 false(:240-242 / :244-246)→ 完全不支持漏斗/管道自动化。
  2. countFlowers() 名实不符:统计液体,与花无关(:123);同名方法在 TileEntityPamAnimalTrap 中统计泥土/草,语义完全相反。
  3. 方法名残留:取产物方法名为 getComb(),复制自 Apiary。
  4. 局部变量未改名:queenBee(:148)指代鱼饵。
  5. 岩浆等同水源:无流体类型区分,属实现粗糙而非崩溃级缺陷。
  6. 多方块 / 控制器 / 可否旋转:源码未定义。

相关条目

浏览全部模组