适用源码:
9da0beb8e8fdad85f50d7039408c3d98494e91c7;内容核实:2026-11-02。
开发状态:本文列举能力有源码证据;设计状态:未决规则单列;验证状态:仅定向源码核对,未执行自动测试或实服验收。默认值不代表生产配置。文档获准发布不表示技术问题已经解决。
组成与状态
建设菜单/摆放事件 → FortificationService → FortificationRepository;FortificationModelController、CannonFurniture负责显示,BallistaController管理操作席。PluginBootstrap注册工事实体及弹丸behavior,事件经CustomEntityListener和专用控制监听器分派。
FortificationState保存ID、类型、城镇、世界坐标、朝向、reloadReadyAt、shots及创建信息。repository.operate在SQL事务中核对类型/城镇及EMPTY、RELOADING、READY;装填设置截止时间,射击清空装填并增加计数,重复装填或未就绪拒绝。
建造、权限和物资
requestBuild先验证资格并发道具,placeFromItem再次检查本人城镇和管理资格、支撑、火炮净空/间距。inspect核对当前城镇、canAccess、同世界同区块和8格,operate重验,remove另查canManage。
TownyService的canManage为设施管理员或镇长;canAccess(false)为管理员或成员;建造仍有本人城镇条件,助手/国王不能直接等同管理者。PlayerBuildMaterials规划普通材料并备份原槽,普通失败恢复内存;不构成SQL与真实玩家存档的原子事务。
射击、伤害与爆炸
controller.fire检查会话/访问、炮口和region所有权。床弩创建Arrow,火炮创建LargeFireball并将原生yield设0,写入自定义behavior、damage和blast power。投射物有效后结算service.fire,失败删除,成功赋速度;定时清理超寿命、超射程及落地箭。
命中事件经HIGHEST、ignoreCancelled分派到hit;当前未取消且带blastKey时移除弹体,在命中所属region调用createExplosion,传入威力、点火、方块破坏和source;无blastKey的箭走移除分支。原生yield=0旨在避免双重爆炸,不代表自定义爆炸被禁用。伤害仍受事件与服务端环境影响。
配置与未裁决规则
fortification.cannon.explosion-power有效范围大于0且≤16,无效回退4;explosion-break-blocks默认true、explosion-incendiary默认false。仓库默认4/true/false,不是生产参数证明。breakBlocks=false仍可为爆炸伤害/击退,不能直接称单体直击。
docs/固定火炮工事.md:13仍称原生箭和无地形爆破,与当前实现及CannonRegression默认参数断言不一致。只实体伤害、条件破坏、按配置/地区/玩法状态控制等方案均未在本轮获批。发布本文不裁决最终业务规则。
保护、Folia与验证
取消命中事件可阻止当前hit处理;PortCoreListener会从爆炸方块列表过滤受保护核心,这不证明完整地区保护。生产Towny/其他保护插件、游戏规则、事件顺序、邻接region影响须联合测试,不以源码调度存在证明所有区域安全。
本轮未运行CannonRegression、FortificationRegression、BallistaAimRegression、BallistaOperatorPoseRegression,也未做实服破坏测试。后续应分别验证两种工事的权限、材料、状态、取消事件、断线、模型恢复和区域边界;敏感故障细节保留内部报告。
来源与相关文档
代码根 folia_plugin/src/main/java/com/flrv/:logic/fortification/、infrastructure/persistence/fortification/FortificationRepository.java、ui/fortification/BallistaController.java:206–293、event/entity/CustomEntityListener.java:46–52、bootstrap/PluginBootstrap.java;folia_plugin/src/main/resources/config.yml:196–245及folia_plugin/src/test/java/com/flrv/logic/fortification/CannonRegression.java。
阅读:玩家工事指南、线程约束、TestWar开发测试。