提交站 (Submit Station, OSS)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | betterquesting:submit_station |
| 类 | betterquesting.blocks.BlockSubmitStation |
| TileEntity | betterquesting.blocks.TileSubmitStation(注册于 BetterQuesting.java:107) |
| 中文名 | tile.betterquesting.submit_station.name=提交站(OSS)(assets/betterquesting/lang/zh_CN.lang) |
| 材质 | Material.wood |
| 硬度 | 1.0(setHardness(1),无爆炸抗性覆盖) |
| 材质贴图 | betterquesting:submit_station_top / submit_station_side(BlockSubmitStation.java:106-109) |
| 创造标签 | BetterQuesting.tabQuesting |
| GUI ID | 0(BlockSubmitStation.onBlockActivated → player.openGui(..., 0, ...),BlockSubmitStation.java:43) |
| 界面 | ContainerSubmitStation + GuiSubmitStation(handlers/GuiHandler.java:19-31) |
功能
提交站是 BetterQuesting 核心模组(modid betterquesting)注册的两个方块之一。玩家把它放在世界里,右键打开界面,把物品或流体投进槽位,即可用"实体"方式完成一个 IItemTask / IFluidTask 类型的任务 —— 这是给自动化流水线用的;玩家的常规勾选式任务完成走 IQuest 的任务逻辑,不需要经过方块。
方块本体不保存任何任务数据。它只是一个"投递口":任务与任务 ID 由网络包在右键时写入 TileEntity(TileSubmitStation 持有 UUID questID 与 int taskID 字段,TileSubmitStation.java:48-50)。也就是说,提交站的能力完全由"某个任务节点"临时赋予,节点离开后它退回一个空架子。
TileSubmitStation 同时实现 IFluidHandler 与 ISidedInventory(TileSubmitStation.java:37),因此漏斗、管道、物品 hopper 都能自动往里送。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 槽位总数 | 2 | SIZE_INVENTORY = 2(TileSubmitStation.java:43) |
| 槽位 0 | 输入(物品投递) | SLOT_INPUT = 0 |
| 槽位 1 | 输出(decrStackSize 之外的回收位) |
SLOT_OUTPUT = 1 |
| 面向许可表 | { SLOT_INPUT, SLOT_OUTPUT } |
SLOTS_FOR_FACE(TileSubmitStation.java:45) |
| 流体任务单次堆叠上限 | 1 | getInventoryStackLimit() → 流体任务时返回 1(TileSubmitStation.java:157-159) |
| 物品任务单次堆叠上限 | 64 | 物品任务时返回 64(TileSubmitStation.java:160-161) |
| 未设置任务时堆叠上限 | 0 | 无任务时返回 0,等于完全拒绝 |
| 使用距离上限 | 平方距离 256(即 16 格) | isUseableByPlayer(TileSubmitStation.java:165-167) |
交互
| 触发 | 行为 |
|---|---|
| 右键 | 打开 GUI ID 0;仅服务端执行(if (!world.isRemote),BlockSubmitStation.java:42) |
| 放入物品 | 仅当 questID/taskID 已指向一个 IItemTask,槽 0 为空,任务未完成,且 t.canAcceptItem(...) 为真时才接受(isItemValidForSlot,TileSubmitStation.java:174-181) |
| 槽 1 | isItemValidForSlot 对 idx != SLOT_INPUT 直接返回 false,即槽 1 不可由 GUI 手动放入 |
| 管道注液 | fill() 走 IFluidTask.submitFluid(owner, quest, fluid),返回 remainder 决定消耗量;任务完成时置 needsUpdate = true(TileSubmitStation.java:189-200) |
| 破坏 | 逐槽把物品以高斯偏移(0.05F)抛出为 EntityItem,并深拷贝 NBT;掉落量随机为 10–30 的整数(BlockSubmitStation.java:49-95) |
| 未初始化访问 | getInventoryStackLimit 在 !isSetup() 时返回 0,箱子 GUI 表现为不可用 |
合成配方
无序(shapeless),且仅在 DreamCraft 未加载时注册(BetterQuesting.java:112):
| 产物 | 材料 |
|---|---|
| 提交站 | 书 + 玻璃 + 箱子 |
| 提交站 | 书 + 箱子 + 玻璃(第二个无序排列) |
两配方分别写在 BetterQuesting.java:113-122,if (!Loader.isModLoaded("dreamcraft")) 包裹整段。DreamCraft 环境(Hardcore 生存)下改由其任务系统发放。