观测站 (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):

  1. 若 owner == null、世界处于 NativeProps.EDIT_MODE 编辑模式、非服务端,或 worldObj.getTotalWorldTime() % 20 != 0,直接返回(每秒检查一次)。
  2. 按 owner UUID 从在线玩家列表中找回 EntityPlayerMP;找不到即返回(离线时不做任何事)。
  3. 遍历 ForgeDirection.VALID_DIRECTIONS 六个方向,取邻居的 TileEntity:
    • 若是 IInventory,遍历全部槽位收集非空 ItemStack
    • 若是 IFluidTank,取 getFluid()
    • 若是 IFluidHandler,遍历 getTankInfo(ForgeDirection.UNKNOWN) 收集所有储罐
  4. 若既没有物品也没有流体则返回。
  5. 取出 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):

产物 材料
观测站 提交站 + 比较器

相关条目