跳到正文
烈焰甘蔗Wiki

Animal Trap(动物陷阱)

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

基本信息

属性 值 来源
注册名 harvestcraft:animaltrap BlockRegistry.java:652
方块类 BlockPamAnimalTrap extends BlockContainer BlockPamAnimalTrap.java:24-25
字段 BlockRegistry.pamanimalTrap BlockRegistry.java:54
构造 new BlockPamAnimalTrap() BlockRegistry.java:463
显示名 tile.animaltrap.name = Animal Trap en_US.lang:56
硬度 1.0f BlockRegistry.java:463
TileEntity TileEntityPamAnimalTrap BlockPamAnimalTrap.java:37-39
GUI ID 8 BlockPamAnimalTrap.java:77
条件注册 无,无条件注册 BlockRegistry.java:652
多方块 否,源码未定义任何多方块结构 —
朝向 不支持(无 func_149689_a),贴图上/中/下均为同一张 harvestcraft:animaltrap BlockPamAnimalTrap.java:82-86

文件更名说明:旧 wiki 的 block/groundtrap.md 记录的是一个在 1.7.10 中不存在注册名的方块(harvestcraft:groundtrap)。本条目已改名为 animaltrap.md,与真实注册名 animaltrap 一致。旧文件名已改写为废止说明页。

槽位布局(TileEntityPamAnimalTrap.java:30,inventory = new ItemStack[19])

槽位 内容 说明
0–17 捕获物(18 个产物槽) 自动填充,不需玩家操作
18 诱饵 需玩家放入,机器运行时会消耗
  • 容器:ContainerPamAnimalTrap,玩家背包 36 槽。
  • 产物槽在 run() 中按 0 → 17 取第一个空槽放入(TileEntityPamAnimalTrap.java run())。

工作条件(三者同时满足才运行,TileEntityPamAnimalTrap.java:187)

(槽18 是 grainbaitItem 或 fruitbaitItem 或 veggiebaitItem) && countFlowers() >= 5
条件 判定 来源
有诱饵 槽 18 为谷物饵 / 果饵 / 菜饵三者之一 :187
周围够“肥沃” countFlowers() >= 5 :187
countFlowers() 统计什么 半径 2 圆内、同一 Y 层的 BlockDirt 或 BlockGrass 数量 :124-134

命名缺陷:countFlowers()(TileEntityPamAnimalTrap.java:124)在陷阱里统计的是泥土/草方块,与花无关。同样被复制到 TileEntityPamFishTrap.countFlowers()(TileEntityPamFishTrap.java:123),但那里统计的却是液体。两个同名方法统计的东西完全不同。

半径判定(:112):圆内并排除 4 个角格(±(radius-1), ±(radius-1)),即半径 2 圆去掉四角 → 最多 20 格。

速率:两个数字,别搞混

陷阱有两个独立的「时间」概念,TileEntityPamAnimalTrap.java:

概念 公式 含义
getRunTime()(环境速率,:103-118) 起始 3500 tick;每个 BlockDirt/BlockGrass ×0.95;每个相邻 pamanimalTrap ÷0.85 越小越快 —— 泥土越多、邻接陷阱越多,产出间隔越短
getRunTime(ItemStack)(诱饵续航,:209-214) 诱饵为三种饵之一 → 3200 tick 诱饵提供的总工作时长

产出判定:produceTime >= Math.floor(getRunTime())(:167)—— 即每累计满一个环境间隔产出一件。诱饵耗尽时 runTime 归零并按 getRunTime(bait) 重新续期(:149-150)。

⚠ 语义容易写反:3500 是「间隔」不是「冷却」。周围 20 格全是泥土/草时,环境速率 = 3500 × 0.95^20 ≈ 2357 tick(≈118 秒)一件;空旷处则是 3500 tick(175 秒)一件。摆放得越「肥沃」产得越快。

run() 每次产出后调用 func_70298_a(18, 1) 扣除 1 个诱饵(:203)。

产物(TrapRecipes.ANIMAL_TRAP_RECIPES)

加权随机;同一诱饵下多条配方按权重抽取。addAnimalRecipe(bait, out) 的两参重载把权重默认设为 1(TrapRecipes.java:86-88)。

诱饵 条数 行
grainbaitItem 7 TrapRecipes.java:26-32
fruitbaitItem 6 TrapRecipes.java:33-38
veggiebaitItem 8 TrapRecipes.java:39-46
合计 21 TrapRecipes.java:26-46
  • 权重分布举例::28 鸡肉权重 3、:30/:36/:44 权重 2、其余权重 1。
  • 其中 5 个产物是未反混淆的原版物品 Items.field_151082_bd / field_151076_bf / field_151116_aA / field_151008_G / field_151110_aK / field_151103_aS(含 field_151147_al)。本仓库无 MCP 映射,无法确定这些具体是哪种原版肉/物品,此处不做断言。
  • 可识别的本作产物:turkeyrawItem、rabbitrawItem、venisonrawItem、muttonrawItem。
  • 诱饵显示名:item.grainbaitItem.name=Grain Bait、item.fruitbaitItem.name=Fruit Bait、item.veggiebaitItem.name=Veggie Bait(en_US.lang:260-262)。

交互

触发 行为 来源
右键 openGui(..., 8, ...);player.func_70093_af() 为真时不打开 BlockPamAnimalTrap.java:72-79
破坏 散落全部 19 槽内容为掉落物实体(随机撒布,带初速度) :41-70

源码缺陷

  1. isStackValidForSlot 恒返回 false(TileEntityPamAnimalTrap.java:240-242)、func_94041_b 恒返回 false(:244-246)。→ 陷阱完全不支持漏斗/管道自动化,只能手动开 GUI 取货。
  2. getRandomOutputForBait 之后的取物方法被命名为 getComb() —— 与 Apiary 的蜂蜡产物方法同名,纯复制粘贴残留(TileEntityPamAnimalTrap.java)。
  3. 局部变量 queenBee(:150)在动物陷阱里指代的是诱饵而非蜂王,是从蜂箱 TileEntity 复制来的未改名变量。
  4. countFlowers() 名实不符(见上)。
  5. 多方块 / 控制器 / 可否旋转:源码未定义。

相关条目

订正记录

  • 本条目完全重写并更名。旧 block/groundtrap.md 基于 MC 1.12.2 fork,记录了 harvestcraft:groundtrap 这一 1.7.10 中不存在的注册名(系该 fork 的方块命名),并引用了 1.12.2 的行号。旧版行号一律作废。
浏览全部模组