观测站 (Observation Station, OOS)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | betterquesting:observation_station |
| 类 | betterquesting.blocks.BlockObservationStation |
| TileEntity | betterquesting.blocks.TileObservationStation(注册于 BetterQuesting.java:111) |
| 中文名 | tile.betterquesting.observation_station.name=观测站(OOS) |
| 材质 | Material.wood |
| 硬度 | 1.0(setHardness(1),无爆炸抗性覆盖) |
| 材质贴图 | betterquesting:observation_station_top / observation_station_side(BlockObservationStation.java:53-57) |
| 创造标签 | BetterQuesting.tabQuesting |
| 容器 | 无(继承 TileEntity,不实现 IInventory) |
| 绑定机制 | 放置时写入放置者 UUID,永久保存于 NBT owner |
功能
观测站是提交站(见 提交站)的自动化对应物:它没有 GUI、没有槽位、不接收任何输入,而是自己每 tick 去扫描六个相邻方块,把邻居容器里的物品和流体喂给拥有者名下的相关任务。
工作流程(TileObservationStation.updateEntity,TileObservationStation.java:37-107):
- 若
owner == null、世界处于NativeProps.EDIT_MODE编辑模式、非服务端,或worldObj.getTotalWorldTime() % 20 != 0,直接返回(每秒检查一次)。 - 按
ownerUUID 从在线玩家列表中找回EntityPlayerMP;找不到即返回(离线时不做任何事)。 - 遍历
ForgeDirection.VALID_DIRECTIONS六个方向,取邻居的 TileEntity:- 若是
IInventory,遍历全部槽位收集非空ItemStack - 若是
IFluidTank,取getFluid() - 若是
IFluidHandler,遍历getTankInfo(ForgeDirection.UNKNOWN)收集所有储罐
- 若是
- 若既没有物品也没有流体则返回。
- 取出
ApiReference.QUEST_DB,对该玩家getSharedQuests()涉及的每个任务的ITask:若为IItemTask则调retrieveItems(...),若为IFluidTask则调retrieveFluids(...)。
也就是说观测站做的是检索(retrieval)而非提交(submit) —— 它验证"这些东西曾经存在/可获得",而不是把它们消耗掉。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 扫描周期 | 每 20 tick(1 秒)一次 | worldObj.getTotalWorldTime() % 20 != 0 提前返回(TileObservationStation.java:41) |
| 扫描方向数 | 6 | ForgeDirection.VALID_DIRECTIONS |
| 自身槽位数 | 0 | 未实现 IInventory |
| 容量/上限 | 无 | 物品与流体均为引用,不做扣减;源码中不存在任何数量上限常量 |
交互
| 触发 | 行为 |
|---|---|
| 放置 | onBlockPlacedBy 写入放置者 player.getGameProfile().getId() 到 os.owner(BlockObservationStation.java:36-46);非服务端或放置者非 EntityPlayerMP 时不写入 |
| 右键 | 无 onBlockActivated 覆写,即无任何交互 |
| 编辑模式 | 世界 NativeProps.EDIT_MODE 为真时整个 updateEntity 短路(默认该属性为 true,见 任务属性) |
| 读档 | readFromNBT 解析字符串键 owner,UUID.fromString 失败则置 null(TileObservationStation.java:130-138) |
| 写档 | 仅在 owner != null 时写入 owner 字符串(TileObservationStation.java:140-144) |
| 破坏 | TileEntity 无 dropContents 覆写,物品不会散落(它本来也不存物品) |
合成配方
无序(shapeless),同样仅在 DreamCraft 未加载时注册(BetterQuesting.java:123-126):
| 产物 | 材料 |
|---|---|
| 观测站 | 提交站 + 比较器 |