适用源码:
9da0beb8e8fdad85f50d7039408c3d98494e91c7。本文记录源码行为,默认配置不等于实服配置。
设计状态:按现状编写,具体业务批准记录未逐项核定;开发状态:下述能力有实现证据,限制单列;验证状态:完成定向源码核对,未执行自动测试或实服验收。
装配与模型
StationBootstrap 组装 PortTravelService、PortTransportExecutor、StationPostService、仓储、controller 和生命周期恢复。技术包 logic.port 保留实际源码名称,本文业务均为驿站。
Port、Ship、Transport、StationTravelCharges、MoneyAmount 分别表示站点、车辆、运输、费用拆分及带精度金额,不能按类名创造另一套玩法。
报价与受理
PortTravelService 收集来源/目的站、车辆和实际物品,再形成 Quote。确认时重新比较物品件数、总价、模式和费用拆分;变化返回替代报价,不把展示报价当永久扣款授权。
StationTariff 使用 BigDecimal,将基础、水平距离、件数和两站附加费合计后取整;MoneyAmount 显式保存精度。默认参数见玩家指南,不在此重复数值表。精度与经济接口不一致时拒绝,不静默换算历史冻结金额。
执行与失败
PortTransportExecutor 区分异步传送完成、玩家文件凭据和 SQL 成功;三者不能等同。PortTravelGuard、互斥和外部操作账本约束未完成请求。未知扣款或传送结果先冻结核查,不让原传送与返程并发,不猜测“异常=未发生”。
PortTasks 提供数据库队列、全局适配和玩家调度。安全落点、目的站复核、世界和核心检查有独立职责;远端区块加载成功也不等于运输成功。
手动包裹数据流
send → inspect(operating=true) → 比较选中槽位快照 → prepareSend → handoff → saveData → requireSaved → finish。
领取先验证目的站、收件人 UUID、READY 和整包容纳,再 prepareClaim。包裹保存完整物品字节,不使用普通材质库存。
requireSaved 只证明本次交接有存档凭据,不证明当前背包永远持有物品。重启恢复核对原请求,未知保持 pending;不使用过期背包快照覆盖新资产。
资格与范围
普通寄货 inspect 验本人站点区块、权限、存活和非旁观、原城镇归属;发件/领取另验运行与和平。旅行有自己的 requireLocal、member、precision 等检查,不将两种资格混用。自动物流接口不等于自动排班已接入。
来源
代码根 folia_plugin/src/main/java/com/flrv/:bootstrap/StationBootstrap.java;logic/port/service/PortTravelService.java#confirm/requireLocal、PortTransportExecutor.java、StationPostService.java#send/claim/handoff(同 service);logic/port/core/StationTariff.java、StationTravelCharges.java(同 core);infrastructure/platform/player/SavedPlayerReceipt.java、infrastructure/scheduler/PortTasks.java。
相关:玩家驿站指南、持久化、权限矩阵。