玩家传感器

基本信息

属性 值
注册名 malisisdoors:player_sensor
显示名(en_US) Player Sensor
类 net.malisis.doors.block.PlayerSensor(继承 Block)
TileEntity 无
检查间隔 每 5 tick(PlayerSensor.java:213-216)
材质 Material.circuits(PlayerSensor.java:26)
创造标签 Malisis' Doors(PlayerSensor.java:27)
注册方式 GameRegistry.registerBlock(playerSensor, ...)(Registers.java:252-255)

基本信息补充

属性 值
方块名 setBlockName("player_sensor")(PlayerSensor.java:28)
完整方块 否——isOpaqueCube / renderAsNormalBlock 均返回 false(PlayerSensor.java:41-47)
碰撞箱 getCollisionBoundingBoxFromPool 返回 null(PlayerSensor.java:49-51)
供电 canProvidePower 返回 true(PlayerSensor.java:118-120)
弱电输出 激活时 15,否则 0(PlayerSensor.java:106-108)
强电输出 激活且询问面等于朝向时 15,否则 0(PlayerSensor.java:110-112)

功能

悬挂在墙面上、朝向一侧的红石玩家探测器:检测范围内是否站有玩家,输出红石信号。

  • 朝向:onBlockPlaced 返回 side + (world.getBlockMetadata(x, y, z) & FLAG_POWERED),即用 meta 低 3 位存放置面,最高位 FLAG_POWERED(8)存激活状态(PlayerSensor.java:69-72)
  • 贴附面校验:canPlaceBlockOnSide 要求相对放置面的反方向方块为实心(PlayerSensor.java:53-57);canPlaceBlockAt 遍历 ForgeDirection.VALID_DIRECTIONS,任意一面贴着实心即可(PlayerSensor.java:59-64)
  • 失去支撑自毁:onNeighborBlockChange 检测贴附面不再实心,则掉落自身并置空气(PlayerSensor.java:89-95)
  • 碰撞通知:状态变化时 notifyPower 同时通知自身与朝向的反方向方块(PlayerSensor.java:203-208)

探测范围

getDetectionBox(PlayerSensor.java:126-163)按朝向构造 AABB:

朝向 水平范围 垂直范围
东 / 西 3 格长 × 1 格宽(x-1 至 x+2) 见下
北 / 南 1 格宽 × 3 格长(z-1 至 z+2) 见下
上 / 下 1 × 1 见下

垂直方向:先检查紧邻的一格是否空气,若是则沿朝向方向继续向上扫描,最多 6 格(yOffset < 6,PlayerSensor.java:155-156);扫描结果取 min/max 作为 AABB 的 Y 边界(PlayerSensor.java:159-161)。若紧邻格不是空气,探测区高度为 0(无法探测)。

检测循环

updateTick(PlayerSensor.java:168-197)仅在服务端执行,且每 tick 末尾重新调度下一次更新(PlayerSensor.java:173,间隔取 tickRate = 5):

  1. 取 AABB 内所有 EntityPlayer(PlayerSensor.java:175)
  2. 列表非空且当前未激活 → 置 FLAG_POWERED,写 meta,通知供电(PlayerSensor.java:178-183)
  3. 列表为空且当前已激活 → 清除 FLAG_POWERED,写 meta,通知供电(PlayerSensor.java:184-190)
  4. 状态不变时提前返回,不重复通知(PlayerSensor.java:179、PlayerSensor.java:187)

方块首次加入世界时即调度一次更新(PlayerSensor.java:123-125)。破坏时若处于激活状态会先补发一次断电通知再走父类流程(PlayerSensor.java:98-103)。

数值

数值名 值 出处
检查间隔 5 tick PlayerSensor.java:213-216
水平探测跨度 3 格 PlayerSensor.java:136-151
垂直探测跨度 最多 6 格 PlayerSensor.java:155-156
激活信号强度 15 PlayerSensor.java:106-108
碰撞箱 null PlayerSensor.java:49-51

合成配方

(Registers.java:258-268,唯一使用物品字典 blockGlassColorless 的非门类配方)

ABA
CCC
字符 物品
A 铁锭 Items.iron_ingot ×2(左右上三格中的两侧)
B 红石 Items.redstone ×1
C 物品字典 blockGlassColorless ×3

配方使用 ShapedOreRecipe 构造(Registers.java:259),因此 B/C 走物品字典替换。

相关条目