物品收集器
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | RandomThings:itemCollector |
| 类 | lumien.randomthings.Blocks.BlockItemCollector |
| TileEntity | TileEntityItemCollector(ModTileEntities.java:25,注册名 itemcollector) |
| 材质 | Material.rock |
| 硬度 | 1.5F(BlockItemCollector.java:20) |
| 碰撞箱 | 极小:(0.35, 0, 0.35) → (0.65, 0.3, 0.65)(:23) |
| 碰撞实体 | 无(getCollisionBoundingBoxFromPool 返回 null,:62-65) |
| 渲染类型 | -1(getRenderType,:52) |
| GUI ID | GuiIds.ITEM_FILTER = 1 / ADVANCED_ITEMCOLLECTOR = 2 |
| 开关 | Blocks.ItemCollector |
功能
物品收集器是朝向下方的极小方块模型,用来自动吸取掉落物。它的放置规则与破除规则由 metadata 决定朝向(BlockItemCollector.java:26-38):
onNeighborBlockChange 先用 BlockDispenser.func_149937_b(Facing.oppositeSide[metadata]) 反解出朝向,再检查该朝向的相邻格 —— 若为空气则自毁并掉落自身:
if (worldObj.isAirBlock(targetX, targetY, targetZ)) {
this.dropBlockAsItem(...);
worldObj.setBlockToAir(...);
}
canPlaceBlockOnSide 用同一套朝向计算,要求目标格不是空气才允许放置(:41-49)。两者共用 BlockDispenser.func_149937_b(Facing.oppositeSide[side]) 这一取反技巧,因此放置面与吸取面相反 —— 必须把它放在某个容器/漏斗上方。
它没有自己的存储槽:容器 ContainerItemCollector 只绑定了 1 个过滤器槽加玩家背包(ContainerItemCollector.java:18 一条 SlotFilter,:25 与 :30 为玩家 27+9 格)。物品直接被推向下方方块。
数值
| 数值名 | 值 |
|---|---|
| 过滤器槽位 | 1(ContainerItemCollector.java:18) |
| 自身存储 | 0 |
| 碰撞箱高度 | 0.3 格 |
| 朝向来源 | metadata(Facing.oppositeSide 取反) |
交互
| 触发 | 行为 |
|---|---|
| 右键 | 打开过滤器 GUI,需放入过滤器 |
| 放置 | canPlaceBlockOnSide 要求吸取方向不是空气 |
| 朝向格变空气 | 自毁 + 掉落(:26-38) |
| 吸取 | 将范围内掉落物推向下方方块 |
合成配方
xhx
rer
xox
| 字符 | 物品 |
|---|---|
h |
漏斗(Blocks.hopper) |
r |
红石粉(dustRedstone) |
e |
末影珍珠(Items.ender_pearl) |
x / o |
黑曜石棒(stickObsidian,即 ingredient meta 1) |
来源:Library/Recipes.java:181-194。
升级配方(Recipes.java:195-205):
xdx
gig
d = 钻石(gemDiamond),g = 荧石粉(dustGlowstone),i = 本方块 → 高级物品收集器。