玩家传感器
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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):
- 取 AABB 内所有
EntityPlayer(PlayerSensor.java:175) - 列表非空且当前未激活 → 置
FLAG_POWERED,写 meta,通知供电(PlayerSensor.java:178-183) - 列表为空且当前已激活 → 清除
FLAG_POWERED,写 meta,通知供电(PlayerSensor.java:184-190) - 状态不变时提前返回,不重复通知(
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 走物品字典替换。
相关条目
- 消失框架 - 另一类红石响应型方块