- 智能伤害计算 - 根据枪械类型自动选择对应的属性加成
- 灵活配置 - 支持多种伤害计算模式,可根据配置项动态切换
- 枪械分类 - 支持手枪、步枪、霰弹枪等7种枪械类型
- 完整属性系统 - 全面覆盖31个核心枪械属性(含7个细分属性)
- 动态属性获取 - 从玩家身上实时获取属性值
- 配置驱动 - 伤害计算模式可通过配置文件调整
- 兼容性保障 - 兼容TACZ原版配件系统,不覆盖配件效果
- 客户端/服务端分离 - 客户端UI显示与服务端逻辑完全分离,确保服务端稳定运行
- 全新Modifier系统 - 支持通过配件修改枪械近战伤害、近战距离、弹匣容量、装填时间和子弹数量
- 扩展玩家属性 - 新增多个与枪械相关的玩家属性,进一步提升个性化体验
- 过热体系属性 - 新增4个过热相关乘法属性:过热上限、散热速度、冷却延迟、锁枪时间
- 通用枪械伤害:
taa:bullet_gundamage- 所有枪械的基础伤害加成
- 手枪:
taa:bullet_gundamage_pistol- 手枪伤害加成 - 步枪:
taa:bullet_gundamage_rifle- 步枪伤害加成 - 霰弹枪:
taa:bullet_gundamage_shotgun- 霰弹枪伤害加成 - 狙击枪:
taa:bullet_gundamage_sniper- 狙击枪伤害加成 - 冲锋枪:
taa:bullet_gundamage_smg- 冲锋枪伤害加成 - 轻机枪:
taa:bullet_gundamage_lmg- 轻机枪伤害加成 - 发射器:
taa:bullet_gundamage_launcher- 发射器伤害加成
- 瞄准时间:
taa:ads_time- 瞄准速度加成(数值越小越好)- 计算公式: 最终瞄准时间 = 原始瞄准时间 × 玩家ADS时间属性值
- 计算示例: 若原始值为0.5,玩家属性为1.2,则最终值为0.5 × 1.2 = 0.6
- 弹药速度:
taa:ammo_speed- 子弹飞行速度加成- 计算公式: 最终弹药速度 = 原始弹药速度 × 玩家弹药速度属性值
- 计算示例: 若原始值为100,玩家属性为1.5,则最终值为100 × 1.5 = 150
- 护甲穿透:
taa:armor_ignore- 护甲穿透效果- 计算公式: 最终护甲穿透 = 原始护甲穿透 × 玩家护甲穿透属性值
- 计算示例: 若原始值为0.3,玩家属性为1.8,则最终值为0.3 × 1.8 = 0.54
- 有效射程:
taa:effective_range- 射击距离加成- 计算公式: 最终有效射程 = 原始有效射程 × 玩家有效射程属性值
- 计算示例: 若原始值为100,玩家属性为1.3,则最终值为100 × 1.3 = 130
- 移动速度:
taa:move_speed- 持枪移动速度- 计算公式: 最终移动速度 = 原始移动速度 + (玩家移动速度属性值 - 1.0) / 10
- 计算示例: 若原始值为0.8,玩家属性为1.2,则最终值为0.8 + (1.2 - 1.0)/10 = 0.82
- 爆头倍数:
taa:headshot_multiplier- 爆头伤害倍率- 计算公式: 最终爆头倍数 = 原始爆头倍数 + (玩家爆头倍数属性值 - 1.0)
- 计算示例: 若原始值为2.0,玩家属性为1.5,则最终值为2.0 + (1.5 - 1.0) = 2.5
- 击退效果:
taa:knockback- 子弹击退力度- 计算公式: 最终击退效果 = 原始击退效果 × 玩家击退效果属性值
- 计算示例: 若原始值为0.5,玩家属性为2.0,则最终值为0.5 × 2.0 = 1.0
- 穿透能力:
taa:pierce- 子弹穿透能力- 计算公式: 最终穿透能力 = (int)(原始穿透能力 × 玩家穿透能力属性值)
- 计算示例: 若原始值为3,玩家属性为1.5,则最终值为(int)(3 × 1.5) = 4
- 射速:
taa:rounds_per_minute- 射击速度- 计算公式: 最终射速 = (int)(原始射速 × 玩家射速属性值)
- 计算示例: 若原始值为600,玩家属性为1.2,则最终值为(int)(600 × 1.2) = 720
- 后坐力:
taa:recoil- 枪械后坐力(综合属性)- 计算公式: 最终后坐力 = 原始后坐力 × 玩家综合后坐力属性值 × 玩家细分后坐力属性值
- 计算示例: 若原始值为1.0,综合属性为0.8,垂直/水平属性为0.9,则最终值为1.0 × 0.8 × 0.9 = 0.72
- 后坐力(垂直):
taa:recoil_pitch- 垂直方向后坐力(细分属性)- 计算公式: 与综合后坐力属性相乘叠加
- 计算示例: 综合属性1.0 × 垂直属性0.8 = 垂直后坐力降低20%
- 后坐力(水平):
taa:recoil_yaw- 水平方向后坐力(细分属性)- 计算公式: 与综合后坐力属性相乘叠加
- 计算示例: 综合属性1.0 × 水平属性0.8 = 水平后坐力降低20%
- 扩散倍率:
taa:inaccuracy- 射击扩散程度(数值越小越好,综合属性)- 计算公式: 最终扩散 = 原始扩散 × 玩家综合扩散属性值 × 玩家细分扩散属性值
- 计算示例: 若原始值为1.0,综合属性为0.8,站立属性为0.9,则最终值为1.0 × 0.8 × 0.9 = 0.72
- 扩散倍率(站立):
taa:inaccuracy_stand- 站立时射击扩散(细分属性)- 计算公式: 与综合扩散属性相乘叠加
- 计算示例: 综合属性1.0 × 站立属性0.8 = 站立扩散降低20%
- 扩散倍率(移动):
taa:inaccuracy_move- 移动时射击扩散(细分属性)- 计算公式: 与综合扩散属性相乘叠加
- 计算示例: 综合属性1.0 × 移动属性0.8 = 移动扩散降低20%
- 扩散倍率(蹲下):
taa:inaccuracy_sneak- 蹲下时射击扩散(细分属性)- 计算公式: 与综合扩散属性相乘叠加
- 计算示例: 综合属性1.0 × 蹲下属性0.8 = 蹲下扩散降低20%
- 扩散倍率(趴下):
taa:inaccuracy_lie- 趴下时射击扩散(细分属性)- 计算公式: 与综合扩散属性相乘叠加
- 计算示例: 综合属性1.0 × 趴下属性0.8 = 趴下扩散降低20%
- 扩散倍率(瞄准):
taa:inaccuracy_aim- 瞄准时射击扩散(细分属性)- 计算公式: 与综合扩散属性相乘叠加
- 计算示例: 综合属性1.0 × 瞄准属性0.8 = 瞄准扩散降低20%
- 重量:
taa:weight- 枪械重量- 计算公式: 最终重量 = 原始重量 × 玩家重量属性值
- 计算示例: 若原始值为3.0,玩家属性为0.9,则最终值为3.0 × 0.9 = 2.7
- 弹药容量加成:
taa:magazine_capacity- 弹匣容量的额外加成- 计算公式: 最终弹匣容量 = (int)(原始弹匣容量 × 玩家弹药容量属性值)
- 计算示例: 若原始值为30,玩家属性为1.2,则最终值为(int)(30 × 1.2) = 36
- 装填时间加成:
taa:reload_time- 装填时间的额外加成- 计算公式: 最终装填时间 = 原始装填时间 × 玩家装填时间属性值
- 计算示例: 若原始值为2.0,玩家属性为0.8,则最终值为2.0 × 0.8 = 1.6
- 近战伤害加成:
taa:melee_damage- 枪械近战攻击伤害的额外加成- 计算公式: 最终近战伤害 = 原始近战伤害 × 玩家近战伤害属性值
- 计算示例: 若原始值为8.0,玩家属性为1.5,则最终值为8.0 × 1.5 = 12.0
- 近战距离加成:
taa:melee_distance- 枪械近战攻击距离的额外加成- 计算公式: 最终近战距离 = 原始近战距离 + (玩家近战距离属性值 - 1.0)
- 计算示例: 若原始值为3.0,玩家属性为1.2,则最终值为3.0 + (1.2 - 1.0) = 3.2
- 子弹数量加成:
taa:bullet_count- 每次射击发射子弹数量的额外加成- 计算公式: 最终子弹数量 = (int)(原始子弹数量 × 玩家子弹数量属性值)
- 计算示例: 若原始值为1,玩家属性为3.0,则最终值为(int)(1 × 3.0) = 3
- 消音效果:
taa:silencenew- 消音效果(<1.0时自动开启被动消音)- 计算公式: 最终消音等级 = (int)(原始消音等级 × 玩家消音属性值),若玩家消音属性值 < 1.0则自动启用被动消音
- 计算示例: 若原始值为2,玩家属性为0.8,则最终值为(int)(2 × 0.8) = 1,且由于玩家属性<1.0,启用被动消音
- 点燃效果:
taa:ignitefire- 子弹点燃效果- 计算公式: 点燃效果 = 若玩家点燃属性值 ≥ 2.0,则启用点燃效果;否则保持原有设置
- 计算示例: 若玩家属性值为2.5,则子弹具有点燃能力
- 爆炸半径:
taa:explosion_radius- 爆炸范围加成- 计算公式: 最终爆炸半径 = 原始爆炸半径 + (玩家爆炸半径属性值 - 1.0)
- 计算示例: 若原始值为3.0,玩家属性为1.5,则最终值为3.0 + (1.5 - 1.0) = 3.5
- 爆炸伤害:
taa:explosion_damage- 爆炸伤害加成- 计算公式: 最终爆炸伤害 = 原始爆炸伤害 × 玩家爆炸伤害属性值
- 计算示例: 若原始值为10.0,玩家属性为1.8,则最终值为10.0 × 1.8 = 18.0
- 爆炸击退:
taa:explosion_knockbacknew- 爆炸击退效果- 计算公式: 爆炸击退效果 = 若玩家爆炸击退属性值 ≥ 2.0,则启用爆炸击退效果;否则保持原有设置
- 计算示例: 若玩家属性值为2.5,则启用爆炸击退效果
- 破坏方块:
taa:explosion_destroy_blocknew- 爆炸破坏方块- 计算公式: 破坏方块效果 = 若玩家破坏方块属性值 ≥ 2.0,则启用破坏方块效果;否则保持原有设置
- 计算示例: 若玩家属性值为2.2,则启用破坏方块效果
- 爆炸延迟:
taa:explosion_delay- 爆炸延迟时间- 计算公式: 最终爆炸延迟 = (int)(原始爆炸延迟 × 玩家爆炸延迟属性值)
- 计算示例: 若原始值为0,玩家属性为1.5,则最终值为(int)(0 × 1.5) = 0
- 爆炸启用:
taa:explosion_enabled- 爆炸是否开启(布尔属性)- 计算公式: 爆炸启用 = 若玩家爆炸启用属性值 ≥ 2.0,则启用爆炸效果;否则保持原有设置
- 计算示例: 若玩家属性值为2.5,则启用爆炸效果
- 过热上限:
taa:heat_max- 满能量值(过热上限)倍率- 计算公式: 最终过热上限 = 原始过热上限 × 玩家过热上限属性值
- 计算示例: 若原始上限为100,玩家属性为2.0,则最终上限为100 × 2.0 = 200
- 关联影响: 同步作用于蓄热锁定阈值、射速热惩罚与热散射的百分比、热量条显示的分母
- 散热速度:
taa:heat_cooling- 散热量随停火时长增长的速度倍率- 计算公式: 实际散热值 = (elapsed/10000) × 原始冷却倍率 × 玩家散热速度属性值
- 计算示例: 若原始冷却倍率为15,玩家属性为2.0,则实际散热倍率为30
- 冷却延迟:
taa:heat_cooling_delay- 停火后多久开始散热(毫秒)的倍率- 计算公式: 最终冷却延迟 = (long)(原始冷却延迟 × 玩家冷却延迟属性值)
- 计算示例: 若原始延迟为1000ms,玩家属性为0.5,则最终延迟为500ms
- 锁枪时间:
taa:heat_overheat_time- 完全过热后的锁枪时长(毫秒)的倍率- 计算公式: 最终锁枪时间 = (long)(原始锁枪时间 × 玩家锁枪时间属性值)
- 计算示例: 若原始锁枪时间为3000ms,玩家属性为0.5,则最终为1500ms
说明: 过热属性为实体动态乘法倍率,在消费点即时计算(不经过属性缓存),同时覆盖 Java 原生蓄热/散热路径与 Lua 脚本路径(
tick_heat/handle_shoot_heat),两条路径互斥不叠加。
- 近战伤害:
melee_damage- 枪械近战攻击造成的伤害- 计算公式: 最终近战伤害 = 原始近战伤害 × 玩家近战伤害属性值
- 计算示例: 若原始值为5.0,玩家属性为1.5,则最终值为5.0 × 1.5 = 7.5
- 近战距离:
melee_distance- 枪械近战攻击的有效距离- 计算公式: 最终近战距离 = 原始近战距离 + (玩家近战距离属性值 - 1.0)
- 计算示例: 若原始值为3.0,玩家属性为1.2,则最终值为3.0 + (1.2 - 1.0) = 3.2
- 弹匣容量:
magazine_capacity- 枪械弹匣可装载的子弹数量- 计算公式: 最终弹匣容量 = (int)(原始弹匣容量 × 玩家弹药容量属性值)
- 计算示例: 若原始值为30,玩家属性为1.2,则最终值为(int)(30 × 1.2) = 36
- 装填时间:
reload_time- 枪械装填子弹所需的时间- 计算公式: 最终装填时间 = 原始装填时间 × 玩家装填时间属性值
- 计算示例: 若原始值为2.0,玩家属性为0.8,则最终值为2.0 × 0.8 = 1.6
- 子弹数量:
bullet_count- 每次射击发射的子弹数量- 计算公式: 最终子弹数量 = (int)(原始子弹数量 × 玩家子弹数量属性值)
- 计算示例: 若原始值为1,玩家属性为3.0,则最终值为(int)(1 × 3.0) = 3
- 基础值: 1.0 (100%效果)
- 加成值: 0.5 = 50%加成,1.0 = 100%加成
- 布尔属性: 0.0表示false,1.0表示true
- 被动属性: 某些属性在特定条件下自动触发(如消音效果<1.0时)
- 基础值: 1.0 (100%效果)
- 加成值: 0.5 = 50%加成,1.0 = 100%加成
- 布尔属性: 0.0表示false,1.0表示true
- 被动属性: 某些属性在特定条件下自动触发(如消音效果<1.0时)
模组支持三种伤害计算模式,可通过配置文件动态切换:
- 规则: 通用与特定取最大值
- 公式:
Math.max(通用伤害, 特定伤害) - 描述: 取通用伤害加成和特定枪械伤害加成中的最大值
- 规则: 通用+特定-1
- 公式:
通用伤害 + 特定伤害 - 1.0D - 描述: 将两种伤害加成相加后减去基础值
- 规则: 通用*特定
- 公式:
通用伤害 * 特定伤害 - 描述: 两种伤害加成相乘
通过修改配置文件 taa-attributes.toml 中的 damageCalculationMode 选项来切换计算模式。
- PropertyCalculator: 属性计算器,负责所有属性的计算逻辑
- PlayerAttributeHelper: 玩家属性助手类,负责从玩家身上获取属性值
- PropertyCacheUpdater: 缓存更新器,将计算结果更新到附件缓存
- GunPropertiesInitializer: 枪械属性初始化器,动态获取玩家属性值
- AttributeConfig: 配置系统,管理伤害计算模式等配置项
- GunTypeContext: 枪械类型上下文,跟踪当前处理的枪械类型
- 所有客户端UI显示方法均使用
@OnlyIn(Dist.CLIENT)注解标识 - 客户端专用的Mixin类被正确配置在
taa.mixins.json的client数组中 - 服务端不会加载任何客户端专用代码,确保服务端稳定性
- Modifier系统完全兼容TACZ原版配件机制
- 属性计算在服务端进行,客户端仅负责显示计算结果
- 所有属性修改均通过标准的AttachmentPropertyManager进行处理
- 基于乘法因子模式:
原始值 × 玩家属性因子 - 兼容配件系统,不覆盖已有配件效果
- 消音系统: 支持被动消音(属性值<1.0时自动开启)
- 爆炸系统: 完全兼容TACZ的ExplosionData格式
- 点燃效果: 使用布尔逻辑判断
- 正确处理枪械子弹数据中的爆炸字段
- 兼容配件和枪械本身的爆炸效果
- 智能判断属性生效条件
- 事件触发 - 枪械属性处理事件发生时
- 类型识别 - 通过Tacz API获取当前枪械类型
- 上下文设置 - 设置当前枪械类型到GunTypeContext
- 属性计算 - 根据配置选择伤害计算规则
- 缓存更新 - 将计算结果更新到附件缓存系统
- 动态应用 - TACZ系统自动应用更新后的属性
本模组实现了5个全新的自定义Modifier,完全兼容TACZ配件系统:
- 近战伤害Modifier (
melee_damage) - 控制枪械近战攻击伤害 - 近战距离Modifier (
melee_distance) - 控制枪械近战攻击距离 - 弹匣容量Modifier (
magazine_capacity) - 控制枪械弹匣容量 - 装填时间Modifier (
reload_time) - 控制枪械装填时间 - 子弹数量Modifier (
bullet_count) - 控制每次射击发射的子弹数量
- 配件制作者可以创建使用上述Modifier ID的自定义配件
- 所有Modifier遵循TACZ原版标准实现模式,确保与其他配件兼容
- 客户端UI显示完全集成到TACZ原版配件界面中
- 玩家属性与配件属性完全独立计算
- 配件属性通过Modifier系统应用,不影响玩家属性计算
- 多个相同类型的配件可以同时安装,其效果会按照TACZ标准规则叠加
配置文件位置:config/taa-attributes.toml
``toml [枪械伤害计算设置]
damageCalculationMode = "MAX"
[调试日志设置]
enableDebugLogging = false
## 版本信息
- **当前版本**: 1.3.8(稳定版本)
- **Minecraft版本**: 1.20.1
- **Tacz兼容版本**: 1.1.8
- **最后更新**: 2026年8月19日
## 依赖要求
- **Minecraft Forge**: 对应1.20.1版本
- **Tacz Guns Mod**: 1.1.8或兼容版本
- **Java**: 17或更高版本
## 注意事项
- 属性效果与TACZ原版配件系统完全兼容
- 爆炸系统支持枪械本身子弹数据中的爆炸效果
- 消音系统支持被动触发模式
- 所有属性计算都基于乘法因子,保持数值平衡
- 客户端UI显示不影响服务端运行,确保多人游戏兼容性