适用源码:
fd73c2ee0dac31c7b7a96560623207e15046cd1c。本页描述当前实现,默认配置不等于实服配置。
入口与角色
玩家输入 /war 打开战争大厅。根命令权限 flrv.war.use 默认开放,不包含 flrv.war.admin;管理员开战、list、stop 命令保留并单独校验管理员权限。
大厅提供“发起战争”“宣战申请”“当前战争”“谈判与组织协议”“战争历史”。普通居民可查看本镇参战战况与相关历史;组织宣战、接受申请和协议签署要求当前镇长或国王。管理员可以查看全部申请和历史,但不能代替双方签署。
图形化宣战
流程:选择自己代表的组织 → 选择对方 → 选择战争方案 → 核对完整规则 → 发出申请 → 对方接受 → 检查双方设施 → 开战。
- 只展示玩家有权代表的组织,仅有一个时自动选择。城镇只能选择同类城镇及城镇战争方案,国家只能选择国家。
- 目标列表支持搜索、分页、刷新,展示约 5 秒内采样的在线人数及暂不可开战原因。和平限制显示剩余分钟数;已参战、上场方块未恢复、中心缺失等会阻止发起。
- 方案读取已注册战争类型及对应配置的
WAR.display-name、WAR.description;最终页展示积分/中心胜负模式、时限、破坏/复原/容器/PVP/友伤/火焰/传送规则、国家盟友参与策略和申请有效期。 - 申请按组织 UUID 绑定。接受前和设施检查后都会再次核对当前双方领导、组织/国家首都身份、方案指纹、有效期、和平期和城镇可用状态;更换领导或规则变化时需重新申请。
- 每个组织同时最多发出 10 份申请;同一双方同方案的未处理申请不能反向重复创建。
declaration.require-both-sides=true 会禁止管理员旧命令直接开战,要求改走申请;request-expire-seconds 默认 300,范围 1~604800。
战况与积分板
战况展示双方比分、剩余时间、设施控制方、争夺/占领进度与坐标。设施条目仅展示位置,不提供传送,不绕过战时传送规则。
积分与战争进度不占用 ActionBar。参战居民在领地之外也能看到右侧计分板:绿色己方、红色敌方,显示双方总分及击杀/占领/持续控制得分、目标分、剩余时间与控制设施数量。计分板通过独立的 Mojang 映射 26.2 数据包适配器实现,不调用 Folia 不支持的 Bukkit 独立计分板接口;服务器版本不兼容时记录明确错误,不退回 ActionBar。
设施面板每行一个 Towny 城镇,己方绿色、敌方红色,右侧显示该城镇的设施。每行最多八个设施,每页五行,可翻页,兼容国家战多城镇及盟友;每两秒在原箱子内更新,不重复打开窗口。
启用占领时,设施上方显示控制方、挑战方、进度条、占领秒数、半径与奖励。双方同时在范围内暂停占领和持续计分;无人时未完成进度回退,守方返回会清除未完成进度。同一阵营首次完成该设施占领才获得占领奖励;控制原属敌方的设施后,每完整一分钟获得持续控制分。
击杀归属在真实伤害事件中记录,要求双方为敌军、双方位于参战领地,并遵守重复目标计分冷却(默认 300 秒);创造/旁观不计分。
组织协议与历史
/war agreements 打开协议箱子大厅,包含发起协议、协议与谈判记录、组织协议仓库和操作说明;/treaty 和 /treaty list 是兼容入口。详见组织协议。
war_history 保存本版本运行后的战争结果、双方组织、参战城镇、比分、胜负/取消和起止时间;历史页面按组织权限过滤。历史保存失败时本次运行保留记录并后台重试,不会凭空补出此前版本未保存的战争历史。
数据与恢复
宣战申请保存在 war_invitations。待确认申请重启后在原期限内保留;开战检查中的申请重启后标记失败,不自动重新开战。战斗会话不跨停服续跑。战前领地快照与战后恢复保存在 war_terrain_plots、war_terrain_batches,恢复完成前不能再次开战。
来源
docs/war-lobby.md、docs/war-architecture.md;代码根 folia_plugin/src/main/java/com/flrv/:ui/war/WarLobby.java、logic/war/service/、logic/war/score/PacketWarSidebar.java、infrastructure/persistence/war/。