CradleMC官方WIKI

适用源码:fd73c2ee0dac31c7b7a96560623207e15046cd1c。本页记录组织协议的持久化与履约实现。

数据

协议、确认、签署人、履约阶段、下一期时间、期数、和平期限、组织仓库和物资交接检查点全部保存到 SQLite organization_treaties。内部物资转移和任务推进同一快照原子提交;账本提交临时使用 synchronous=FULL,外部扣款/背包变动之前先持久化检查点,再恢复共享连接原有模式。服务器重启后续跑已签成合同,不重新执行完成的一次性条件。

执行顺序

  1. 签成时一次性物资先从双方可用仓库余额转入协议保留库存,避免签成后被取走。
  2. 后台先完成双方一次性金币扣款的持久化检查点。
  3. 再向任一方释放初始金币或保留物资。
  4. 定期条件在对应到期时分别执行;每次后台轮询最多处理每个定期任务的一期,不跳过欠付期数。
  5. 和平在初始交付后生效;转国排在和平之后。

外部系统间不存在数据库级原子事务,已完成部分不会自动撤回;失败会显示原因并暂停剩余履约。金币不足、物资不足或已知拒收记为“履约暂停/违约”,补足后只重试未完成任务;已扣款但已知尚未入账的任务仅重试入账。

协议仓库

库存以完整序列化物品的指纹区分,支持自定义装备及物品。条件中的样本不被消耗,实际交付来自仓库。物资存入时步骤是“从玩家手中移除”,取出时是“已发放给玩家”。

和平守卫

和平阻止 WarService.start(包括扩展 API)中的宣战,不只拦截命令。签成和和平执行时记录可由双方组织结束的当前战争 ID,按平局终止这些战争,原有方块复原流程继续。正数和平期会先发布宣战保护,再补查与宣战并发的新战争;到期后只重试已经列入的 ID。

异常核对

经济提供者没有幂等交易编号。扣款或入账进行中异常中断时,不自动猜测成功与否,而记为“待管理员核对”。flrv.treaty.admin 默认 OP,不能代签。

/treaty review
/treaty review money <任务ID> applied
/treaty review money <任务ID> not-applied
/treaty review inventory <交接ID> applied
/treaty review inventory <交接ID> not-applied
/treaty review town <协议ID>
/treaty review resume <协议ID>

applied 表示不确定的步骤确实已经完成,not-applied 表示确实未发生,不是重试按钮。核对操作记录操作者和参数到服务器日志。

与文字条款的边界

war/terms.yml 的模板仍仅生成文字记录;只有双方在结构化协议窗口确认的条件才会履约。文字条款不会自动导入成扣款指令,也不会因执行协议签成而自动替另一份文字协议签字。

来源

docs/organization-agreements.md;代码根 folia_plugin/src/main/java/com/flrv/:logic/treaty/、logic/war/negotiation/、infrastructure/persistence/war/TreatyRepository.java。