Skip to content

Repository files navigation

TAA Mod - Tacz属性增强模组

功能特性

  • 智能伤害计算 - 根据枪械类型自动选择对应的属性加成
  • 灵活配置 - 支持多种伤害计算模式,可根据配置项动态切换
  • 枪械分类 - 支持手枪、步枪、霰弹枪等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 - 发射器伤害加成

20个核心枪械属性

  • 瞄准时间: 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,则启用爆炸效果

过热体系属性(乘法倍率,默认1.0)

  • 过热上限: 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),两条路径互斥不叠加。

配件Modifier系统属性

  • 近战伤害: 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时)

伤害计算规则

根据配置项选择生效规则

模组支持三种伤害计算模式,可通过配置文件动态切换:

1. MAX模式(默认)

  • 规则: 通用与特定取最大值
  • 公式: Math.max(通用伤害, 特定伤害)
  • 描述: 取通用伤害加成和特定枪械伤害加成中的最大值

2. ADDITIVE模式

  • 规则: 通用+特定-1
  • 公式: 通用伤害 + 特定伤害 - 1.0D
  • 描述: 将两种伤害加成相加后减去基础值

3. MULTIPLICATIVE模式

  • 规则: 通用*特定
  • 公式: 通用伤害 * 特定伤害
  • 描述: 两种伤害加成相乘

配置方式

通过修改配置文件 taa-attributes.toml 中的 damageCalculationMode 选项来切换计算模式。

技术实现

核心组件

  • PropertyCalculator: 属性计算器,负责所有属性的计算逻辑
  • PlayerAttributeHelper: 玩家属性助手类,负责从玩家身上获取属性值
  • PropertyCacheUpdater: 缓存更新器,将计算结果更新到附件缓存
  • GunPropertiesInitializer: 枪械属性初始化器,动态获取玩家属性值
  • AttributeConfig: 配置系统,管理伤害计算模式等配置项
  • GunTypeContext: 枪械类型上下文,跟踪当前处理的枪械类型

客户端/服务端兼容性

客户端安全设计

  • 所有客户端UI显示方法均使用 @OnlyIn(Dist.CLIENT) 注解标识
  • 客户端专用的Mixin类被正确配置在 taa.mixins.jsonclient 数组中
  • 服务端不会加载任何客户端专用代码,确保服务端稳定性

数据一致性保障

  • Modifier系统完全兼容TACZ原版配件机制
  • 属性计算在服务端进行,客户端仅负责显示计算结果
  • 所有属性修改均通过标准的AttachmentPropertyManager进行处理

属性计算特性

数值属性计算

  • 基于乘法因子模式:原始值 × 玩家属性因子
  • 兼容配件系统,不覆盖已有配件效果

特殊属性计算

  • 消音系统: 支持被动消音(属性值<1.0时自动开启)
  • 爆炸系统: 完全兼容TACZ的ExplosionData格式
  • 点燃效果: 使用布尔逻辑判断

缓存处理

  • 正确处理枪械子弹数据中的爆炸字段
  • 兼容配件和枪械本身的爆炸效果
  • 智能判断属性生效条件

属性获取流程

  1. 事件触发 - 枪械属性处理事件发生时
  2. 类型识别 - 通过Tacz API获取当前枪械类型
  3. 上下文设置 - 设置当前枪械类型到GunTypeContext
  4. 属性计算 - 根据配置选择伤害计算规则
  5. 缓存更新 - 将计算结果更新到附件缓存系统
  6. 动态应用 - TACZ系统自动应用更新后的属性

配件系统兼容性

自定义Modifier支持

本模组实现了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 [枪械伤害计算设置]

枪械伤害计算模式

MAX: 通用与特定取最大值

ADDITIVE: 通用+特定-1

MULTIPLICATIVE: 通用*特定

damageCalculationMode = "MAX"

[调试日志设置]

是否启用调试日志记录

true: 启用调试日志,将记录属性计算等详细信息

false: 禁用调试日志,不记录任何调试信息(默认)

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显示不影响服务端运行,确保多人游戏兼容性

About

1

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages