适用源码:
9da0beb8e8fdad85f50d7039408c3d98494e91c7。本文记录源码行为,默认配置不等于实服配置。
设计状态:按现状编写,具体业务批准记录未逐项核定;开发状态:下述能力有实现证据,限制单列;验证状态:完成定向源码核对,未执行自动测试或实服验收。
定位
设计定位已由人工确认:战争是开发中的测试功能。下述 TestWar 有代码实现,但不代表正式国家战争、围城、占领或领土转移已开放。本文面向开发者和测试人员,不是玩家战争指南,也不介绍存在业务冲突的火炮玩法。
入口与前置
命令 /war <城镇A> <城镇B> <战争类型>,参数必须恰好3个;类型为已注册项如 TestWar。WarCommand 检查 flrv.war.admin,plugin.yml 默认 op,控制台可调用。缺服务时拒绝,命令提示依赖设施、Towny、CraftEngine。
名称是城镇而非玩家。TownWarController 负责定位目标中心并检查资格,WarService 再检查不同城镇/中心、类型存在和没有参与其他战争。不会因为有命令就允许跳过中心有效性。
数据与生命周期
WarService 在内存保存 Battle、Snapshot、Health、城镇/中心索引,关键转换同步保护;开始/结束监听在安全回调边界执行。Health 限制0到最大值;damage 只接受交战对方城镇,双方归零判定由类型实现。
TestWar.defeatedTown 检查一方临时生命归零;自身不修改方块、所有权或设施运行状态。服务关闭清理内存战争,不是持久化正式战役系统。
测试范围
默认中心血量和命中数值来自 facility.town-center-combat,不在本文复制数值表。验证需覆盖第三方/本镇攻击拒绝、两个目标有效性、并发致命命中只结算一次、中心失效/删镇/关闭时取消,以及 UI 血条清理。
存在 WarRegression 只证明测试入口,不代表此次执行通过;实际客户端、Towny 与区域加载组合仍需验收。不能用此测试给玩家宣传缴获、围城或国战奖励。
来源
folia_plugin/src/main/resources/plugin.yml、config.yml(同 resources);
代码根 folia_plugin/src/main/java/com/flrv/:event/command/WarCommand.java、logic/war/WarService.java#start/damage、TestWar.java#defeatedTown、TownWarController.java(同 logic/war)、bootstrap/PluginBootstrap.java注册链;folia_plugin/src/test/java/com/flrv/logic/war/WarRegression.java;人工审核战争定位。
相关:权限矩阵、设施模型。