• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
【1.20.1】WarZTacZBullet —— 专为TacZ设计/自定义子弹分级/ 甲弹对抗 / 真实伤情系统

原创 付费 【1.20.1】WarZTacZBullet —— 专为TacZ设计/自定义子弹分级/ 甲弹对抗 / 真实伤情系统 1.4.0

请登录后获取
版权类型
原创
插件中文名称
WarZTacZBullet
插件英文名称
WarZTacZBullet
原帖地址
#
支持的核心(服务端)
  1. Spigot
语言支持
中文(简体)
前置组件
TacZSpigotApi
WarZMedic
适配版本(Java)
  1. 1.20
WarZTacZBullet.webp

【原创插件】WarZTacZBullet —— TacZ 枪械拓展 × WarZ 硬核战斗机制,支持自定义弹种 / 甲弹对抗 / 真实伤情系统​

适用版本:WarZTacZBullet 全稳定版
运行环境:Bukkit / Spigot / Mohist
插件类型:TacZ 枪械战斗拓展插件

1774080114126.webp

1774160808176.webp

插件简介​

WarZTacZBullet 是一款面向 WarZ 风格服务器打造的 TacZ 枪械拓展插件
它在原版 TacZ 枪械体系的基础上,加入了更贴近硬核战斗玩法的机制,让战斗不再只是“谁先开枪谁赢”,而是围绕 弹种选择、护甲穿透、命中部位、真实伤情 展开更有策略性的对抗。

插件通过对接 TacZSpigotApi,能够与 TacZ 枪械系统无缝兼容,在保证流畅性的同时,带来更丰富、更真实的枪战体验。


Wiki:
https://www.yuque.com/daqingtian-3ob8x/warz/xgut3lowk229on7v?singleDoc# 《WarZTacZBullet - 肢体伤害|子弹护甲分级插件》

核心特色​

1. TacZ 无缝兼容​

依托 TacZSpigotApi 对接原版枪械系统,不破坏原有枪械框架,兼容性高,运行稳定。

2. 多弹种自由切换​

支持为不同枪械配置 标准弹、穿甲弹 等多种弹药。
玩家可通过 GUI 界面 快速选择并装填对应弹种,提升战斗自由度。

3. 硬核甲弹对抗​

引入 子弹等级 vs 护甲等级 的战斗结算逻辑。
不同等级的子弹面对不同等级护甲,将产生明显差异化的穿透与减伤效果。

4. 拟真伤情系统​

可联动 WarZMedic,实现 流血、骨折、疼痛 等真实伤情效果,进一步增强战场压迫感与沉浸感。

5. 全配置化自定义​

伤害倍率、弹药属性、伤情概率、治疗映射等内容均可自由调整,方便服主根据服务器玩法进行深度定制。

依赖说明​


必需组件​

  • TacZ Forge 模组
    提供基础枪械、弹药与射击框架​
  • TacZSpigotBridge
    用于打通 TacZ 模组与 Spigot 插件之间的 API 通信​

可选组件​

  • WarZMedic
    安装后可启用完整伤情系统
    若不安装,则插件仍可使用 甲弹对抗 等核心功能​

功能展示​

一、自定义弹药系统​

玩家可在持有适配枪械时,通过以下方式打开弹药选择界面:
  • 按下 R 键
  • 输入指令:/wtb ammo​
打开 GUI 后,系统会显示当前枪械支持的所有弹种。
玩家点击对应弹药后,若背包内拥有足够数量的该类弹药,系统将自动完成扣除与装填,并给出提示信息。

弹种玩法示例​

  • 穿甲弹:护甲穿透率更高,但对无甲目标的肉伤可能略低​
  • 标准弹:属性更均衡,适合大多数常规战斗场景​
这意味着玩家需要根据敌方装备情况灵活调整弹种,而不是永远只用一种弹药。

二、部位命中与伤害判定​

子弹命中目标后,系统会自动根据命中部位进行不同倍率结算:
  • 头部 / 面部:高倍率伤害,极易触发疼痛与流血​
  • 胸部:标准伤害,伤情触发较均衡​
  • 腹部 / 四肢:伤害略低,但四肢更容易触发骨折​
这一机制让战斗更贴近真实,也让不同射击选择更具战术意义。

三、甲弹对抗系统​

插件根据 子弹等级护甲等级 的差值进行伤害结算:
  • 子弹等级 < 护甲等级
    几乎无法有效穿透,护甲大幅减免甚至完全抵消伤害​
  • 子弹等级 = 护甲等级
    可造成部分穿透,护甲仍会减免部分肉伤​
  • 子弹等级 ≥ 护甲等级 + 1
    可形成明显穿透,等级差越高,最终伤害越可观​
这套机制能很好地还原“低等级子弹打高等级甲效果差、高等级弹药破甲明显”的战斗体验。

四、伤情系统(需 WarZMedic)​

安装 WarZMedic 后,插件可启用完整伤情玩法:

1. 流血​

持续掉血效果,可叠加,层数越高掉血越快。

2. 骨折​

  • 手臂骨折:影响换弹与使用医疗物品速度​
  • 腿部骨折:减速、限制冲刺能力​

3. 疼痛​

降低生命上限,严重时会显著削弱玩家持续作战能力。

治疗方式​

  • 绷带:清除全部流血效果​
  • 急救包:清除流血,并治愈部分骨折与疼痛​
  • 止痛药:暂时压制疼痛效果​
真实战斗不再只是“受伤-吃药-恢复满状态”,而是需要合理管理伤情资源。

安装教程​

安装步骤​

  1. 确保服务端已安装并正常运行 TacZ Forge 模组
  2. TacZSpigotBridge.jar 放入 plugins 文件夹​
  3. WarZTacZBullet.jar 放入 plugins 文件夹并重启服务器​
  4. 如需完整伤情系统,再将 WarZMedic.jar 放入 plugins 文件夹并重启服务器​

配置文件说明​

插件首次启动后会在以下路径生成配置文件:

plugins/WarZTacZBullet/

包含内容如下:
  • config.yml
    主配置文件(调试、提示、去重等)​
  • custom_ammo.yml
    自定义弹种与枪械适配配置​
  • injury.yml
    伤情触发概率、debuff 效果、医疗映射配置​
  • messages.yml
    游戏内提示文本自定义​
  • playerdata/
    玩家伤情数据持久化存储目录​

配置文件:​

config.yml​

可调整:
  • 调试模式开关​
  • 攻击者 / 受害者伤害提示​
  • 重复伤害去重​
  • 护甲破碎提示​
代码:
# ============================================================
# WarZTacZBullet 插件主配置文件
# 用于控制全局行为和调试选项
# ============================================================
# 是否启用调试模式
# 开启后会输出详细的战斗日志和调试信息
# 默认: false (生产环境应设为 false)
debug: false
# 是否向受害者显示战斗结果消息
# 消息内容: 命中部位、弹级、甲级、肉伤、甲损等
# 默认: true
showVictimMessage: true
# 是否向攻击者显示战斗结果消息
# 消息内容: 命中目标、部位、肉伤、甲损等
# 默认: true
showShooterMessage: true
# 是否取消未识别的投射物伤害
# 当 TacZ 子弹无法被识别时,是否取消其伤害
# 用于防止未知子弹造成伤害
# 默认: false
cancelUnknownProjectile: false

custom_ammo.yml​

可配置:​
代码:
# ============================================================
# 自定义弹种配置文件
# 定义弹种属性(子弹等级、肉伤倍率、穿甲倍率等)
# 以及各枪械支持的弹种列表
# ============================================================
# --------------- GUI 相关配置 ----------------
gui:
  # 弹药选择界面的标题
  # 支持颜色代码 (&a, &c 等)
  title: "&8弹种装填"
# --------------- 弹种装填规则 ----------------
rules:
  # 是否禁止在弹匣还有子弹时切换弹种
  # true = 必须打空才能换弹种
  # false = 可以随时切换弹种
  denySwitchWhenLoaded: true
  # 玩家打开 GUI 后的冷却时间 (毫秒)
  # 防止玩家快速反复点击造成问题
  guiCooldownMillis: 500
# --------------- 弹种定义 ----------------
# 格式: "弹种ID" (对应 TacZ 弹药 ID)
# 每个弹种包含以下属性:
#   displayName        - 显示名称 (支持颜色代码)
#   bulletLevel        - 子弹等级 (0-7, 越高穿甲越强)
#   fleshRate          - 肉伤倍率 (对无护甲目标的伤害修正)
#   armorRate          - 穿甲倍率 (对护甲目标的伤害修正)
#   consumePerBullet   - 每发射击消耗的弹药数量
#   item.material      - 匹配的物品材质 (TACZ_AMMO 表示匹配 TacZ 弹药)
#   item.customModelData - 匹配的自定义模型数据 (-1 表示不检查)
#   item.nameContains  - 物品名称中需要包含的字符串 (空字符串表示不检查)
ammoTypes:
  # ---------- 12号霰弹 (12G) ----------
  "tacz:12g":
    displayName: "&f12G 默认弹"
    bulletLevel: 3              # 3级弹,中等穿透
    fleshRate: 1.00             # 标准肉伤
    armorRate: 0.90             # 护甲伤害0.9倍
    consumePerBullet: 1          # 每发消耗1发
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "12G"
  # ---------- 30-06 步枪弹 ----------
  "tacz:30_06":
    displayName: "&f30-06 默认弹"
    bulletLevel: 4              # 4级弹,较强穿透
    fleshRate: 0.92             # 肉伤略微降低
    armorRate: 1.00             # 标准穿甲
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "30_06"
  # ---------- 7.62x51 NATO (.308) ----------
  "tacz:308":
    displayName: "&f308 默认弹"
    bulletLevel: 4
    fleshRate: 0.92
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "308"
  # ---------- .338 Lapua Magnum ----------
  "tacz:338":
    displayName: "&f338 默认弹"
    bulletLevel: 5              # 5级弹,高穿透
    fleshRate: 0.90             # 肉伤略微降低
    armorRate: 1.10             # 穿甲增强
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "338"
  # ---------- .357 Magnum ----------
  "tacz:357mag":
    displayName: "&f357MAG 默认弹"
    bulletLevel: 3
    fleshRate: 1.00
    armorRate: 0.90
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "357"
  # ---------- 40mm 榴弹 ----------
  "tacz:40mm":
    displayName: "&f40MM 默认弹"
    bulletLevel: 6              # 6级弹,高爆穿甲
    fleshRate: 1.20             # 肉伤增强
    armorRate: 1.30             # 穿甲显著增强
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "40MM"
  # ---------- .45-70 Government ----------
  "tacz:45_70":
    displayName: "&f45-70 默认弹"
    bulletLevel: 4
    fleshRate: 1.05             # 肉伤略微增强
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "45_70"
  # ---------- .45 ACP ----------
  "tacz:45acp":
    displayName: "&f45ACP 默认弹"
    bulletLevel: 2              # 2级弹,低穿透
    fleshRate: 1.00
    armorRate: 0.80             # 护甲伤害降低
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "45ACP"
  # ---------- .50 AE ----------
  "tacz:50ae":
    displayName: "&f50AE 默认弹"
    bulletLevel: 4
    fleshRate: 1.05
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "50AE"
  # ---------- .50 BMG ----------
  "tacz:50bmg":
    displayName: "&f50BMG 默认弹"
    bulletLevel: 7              # 7级弹,最高穿透
    fleshRate: 0.95
    armorRate: 1.30
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "50BMG"
  # ---------- 5.56x45 NATO ----------
  "tacz:556x45":
    displayName: "&f556X45 默认弹"
    bulletLevel: 4
    fleshRate: 1.00
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "556"
  # ---------- 5.7x28mm ----------
  "tacz:57x28":
    displayName: "&f57X28 默认弹"
    bulletLevel: 3
    fleshRate: 1.00
    armorRate: 0.90
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "57X28"
  # ---------- 5.8x42mm DBP ----------
  "tacz:58x42":
    displayName: "&f58X42 默认弹"
    bulletLevel: 4
    fleshRate: 1.00
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "58X42"
  # ---------- 7.62x39mm ----------
  "tacz:762x39":
    displayName: "&f762X39 默认弹"
    bulletLevel: 4
    fleshRate: 1.00
    armorRate: 1.00
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "762X39"
  # ---------- 9x19mm Parabellum ----------
  "tacz:9mm":
    displayName: "&f9MM 默认弹"
    bulletLevel: 2
    fleshRate: 1.00
    armorRate: 0.80
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "9MM"
  # ---------- RPG 火箭弹 ----------
  "tacz:rpg_rocket":
    displayName: "&fRPG 火箭弹"
    bulletLevel: 7
    fleshRate: 1.30             # 高肉伤
    armorRate: 1.40             # 高穿甲
    consumePerBullet: 1
    item:
      material: TACZ_AMMO
      customModelData: 0
      nameContains: "RPG"
# --------------- 枪械弹药配置 ----------------
# 定义每把枪械支持的弹种列表
# 格式: "枪械ID" -> [支持的弹种ID列表]
# 注意: magCapacityOverride: 0 表示使用 TacZ 默认弹匣容量
guns:
  "tacz:aa12":        {ammoTypes: ["tacz:12g"],              magCapacityOverride: 0}
  "tacz:ai_awp":     {ammoTypes: ["tacz:338"],               magCapacityOverride: 0}
  "tacz:ak47":       {ammoTypes: ["tacz:762x39"],            magCapacityOverride: 0}
  "tacz:aug":        {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:b93r":       {ammoTypes: ["tacz:9mm"],               magCapacityOverride: 0}
  "tacz:cz75":       {ammoTypes: ["tacz:9mm"],               magCapacityOverride: 0}
  "tacz:db_long":    {ammoTypes: ["tacz:12g"],               magCapacityOverride: 0}
  "tacz:db_short":   {ammoTypes: ["tacz:12g"],               magCapacityOverride: 0}
  "tacz:deagle":     {ammoTypes: ["tacz:50ae"],              magCapacityOverride: 0}
  "tacz:deagle_golden": {ammoTypes: ["tacz:357mag"],        magCapacityOverride: 0}
  "tacz:fn_evolys":  {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:fn_fal":     {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:g36k":       {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:glock_17":   {ammoTypes: ["tacz:9mm"],               magCapacityOverride: 0}
  "tacz:hk416d":     {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:hk_g3":      {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:hk_mp5a5":   {ammoTypes: ["tacz:9mm"],               magCapacityOverride: 0}
  "tacz:m1014":      {ammoTypes: ["tacz:12g"],               magCapacityOverride: 0}
  "tacz:m107":       {ammoTypes: ["tacz:50bmg"],              magCapacityOverride: 0}
  "tacz:m16a1":      {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:m16a4":      {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:m1911":      {ammoTypes: ["tacz:45acp"],              magCapacityOverride: 0}
  "tacz:m249":       {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:m320":       {ammoTypes: ["tacz:40mm"],               magCapacityOverride: 0}
  "tacz:m4a1":       {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:m700":       {ammoTypes: ["tacz:30_06"],              magCapacityOverride: 0}
  "tacz:m870":       {ammoTypes: ["tacz:12g"],               magCapacityOverride: 0}
  "tacz:m95":        {ammoTypes: ["tacz:50bmg"],              magCapacityOverride: 0}
  "tacz:minigun":    {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:mk14":       {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:p320":       {ammoTypes: ["tacz:45acp"],              magCapacityOverride: 0}
  "tacz:p90":        {ammoTypes: ["tacz:57x28"],              magCapacityOverride: 0}
  "tacz:qbz_191":    {ammoTypes: ["tacz:58x42"],              magCapacityOverride: 0}
  "tacz:qbz_95":     {ammoTypes: ["tacz:58x42"],              magCapacityOverride: 0}
  "tacz:rpg7":       {ammoTypes: ["tacz:rpg_rocket"],         magCapacityOverride: 0}
  "tacz:rpk":        {ammoTypes: ["tacz:762x39"],            magCapacityOverride: 0}
  "tacz:scar_h":     {ammoTypes: ["tacz:308"],               magCapacityOverride: 0}
  "tacz:scar_l":     {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:sks_tactical": {ammoTypes: ["tacz:762x39"],          magCapacityOverride: 0}
  "tacz:spas_12":    {ammoTypes: ["tacz:12g"],               magCapacityOverride: 0}
  "tacz:spr15hb":    {ammoTypes: ["tacz:556x45"],            magCapacityOverride: 0}
  "tacz:springfield1873": {ammoTypes: ["tacz:45_70"],       magCapacityOverride: 0}
  "tacz:timeless50": {ammoTypes: ["tacz:50ae"],              magCapacityOverride: 0}
  "tacz:type_81":    {ammoTypes: ["tacz:762x39"],            magCapacityOverride: 0}
  "tacz:ump45":      {ammoTypes: ["tacz:45acp"],              magCapacityOverride: 0}
  "tacz:uzi":        {ammoTypes: ["tacz:9mm"],               magCapacityOverride: 0}
  "tacz:vector45":   {ammoTypes: ["tacz:45acp"],              magCapacityOverride: 0}

injury.yml​

可配置:
  • 是否要求 WarZMedic 才启用伤情​
  • 流血 / 骨折 / 疼痛触发概率​
  • 骨折效果强度​
  • 医疗物品与治疗映射关系
  • 代码:
    # ============================================================
    # 伤情系统配置文件
    # 定义流血、骨折、疼痛效果及医疗包治疗映射
    # 需要 WarZMedic 插件支持才能生效
    # ============================================================
    
    # 是否要求 WarZMedic 插件存在才启用伤情系统
    # true  =  未安装 WarZMedic 时禁用所有伤情功能
    # false =  即使没有 WarZMedic 也启用基础伤情
    enabledRequiresWarZMedic: true
    
    # --------------- 流血效果配置 ----------------
    bleed:
      # 最大流血层数 (同时承受的流血效果上限)
      # 超过此层数的流血不会再叠加
      maxStacks: 3
    
      # 流血结算间隔 (游戏刻/tick)
      # 每隔这么久结算一次流血伤害
      # 20 tick = 1 秒
      intervalTicks: 100
    
      # 每层流血每次结算的伤害量
      # 3层流血 = 每次结算 1.5 伤害
      damagePerStack: 0.5
    
      # 各部位触发流血的概率
      # 值范围: 0.0 (不触发) ~ 1.0 (必定触发)
      chanceByPart:
        HEAD:    0.35    # 头部 35%
        FACE:    0.30    # 面部 30%
        CHEST:   0.25    # 胸部 25%
        ABDOMEN: 0.30    # 腹部 30%
        ARM:     0.20    # 手臂 20%
        LEG:     0.20    # 腿部 20%
    
    # --------------- 骨折效果配置 ----------------
    fracture:
      # 最大同时骨折数量 (超过则不触发新的骨折)
      maxActive: 2
    
      # 各部位触发骨折的概率
      # 注意: 只有 ARM 和 LEG 可以骨折
      chanceByPart:
        ARM: 0.20    # 手臂 20%
        LEG: 0.25    # 腿部 25%
    
    # --------------- 疼痛效果配置 ----------------
    pain:
      # 最大疼痛区域数量
      # 超过后不再触发新的疼痛效果
      maxZones: 3
    
      # 每个疼痛区域造成的最大生命值惩罚
      # 惩罚会降低玩家的最大生命值
      maxHealthPenaltyPerZone: 2.0
    
      # 各部位触发疼痛的概率
      chanceByPart:
        HEAD:    0.40    # 头部 40%
        CHEST:   0.25    # 胸部 25%
        ABDOMEN: 0.30    # 腹部 30%
    
    # --------------- 伤情效果配置 ----------------
    # 定义不同部位骨折后对玩家造成的影响
    effects:
      # 手臂骨折效果
      arm:
        # 换弹延迟增加的 tick 数
        # 骨折后换弹会变慢
        reloadDelayTicks: 20
    
        # 医疗包使用延迟增加的 tick 数
        medkitUseDelayTicks: 20
    
        # 挖掘疲劳效果等级 (0 = 无效果)
        # 1 = 挖掘疲劳 I, 2 = 挖掘疲劳 II, 以此类推
        miningFatigueAmplifier: 0
    
      # 腿部骨折效果
      leg:
        # 缓慢效果等级
        # 1 = 缓慢 I, 2 = 缓慢 II, 以此类推
        slownessAmplifier: 1
    
        # 跳跃速度乘数 (0.0 ~ 1.0)
        # 骨折后跳跃能力下降
        jumpVelocityMultiplier: 0.72
    
        # 是否禁止冲刺
        # true = 骨折时无法冲刺
        denySprint: true
    
    # --------------- 医疗包伤情治疗映射 ----------------
    # 定义每种医疗包对伤情的治疗效果
    # 格式: 医疗包物品ID -> 治疗参数
    medkitMappings:
      # ---------- 绷带 (bandage) ----------
      # 基础止血用品,只能清除流血
      bandage:
        clearBleedAll: true     # 是否清除所有流血层
        cureFractureCount: 0    # 治愈骨折数量 (0=不治愈, -1=治愈全部)
        curePainCount: 0        # 治愈疼痛区域数 (0=不治愈, -1=治愈全部)
        suppressPainSeconds: 0   # 止痛压制时间 (秒, 0=无压制)
    
      # ---------- 医疗包 (medkit) ----------
      # 可携带的医疗包,无法治愈伤情
      medkit:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 急救包 (first_aid) ----------
      # 较好的医疗包,可治愈部分伤情
      first_aid:
        clearBleedAll: true     # 清除所有流血
        cureFractureCount: 1    # 治愈 1 处骨折
        curePainCount: 1        # 治愈 1 处疼痛
        suppressPainSeconds: 0
    
      # ---------- 止血带 (cat_tourniquet) ----------
      # 快速止血用品,专精止血
      cat_tourniquet:
        clearBleedAll: true
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 弹力绷带 (elastic_bandage) ----------
      # 基础绷带变种
      elastic_bandage:
        clearBleedAll: true
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 简易手术 (simple_surgery) ----------
      # 可进行简单手术,治愈部分伤情
      simple_surgery:
        clearBleedAll: true
        cureFractureCount: 1
        curePainCount: 1
        suppressPainSeconds: 0
    
      # ---------- 战术手术 (tactical_surgery) ----------
      # 高级手术,可治愈全部伤情
      tactical_surgery:
        clearBleedAll: true
        cureFractureCount: -1    # 治愈全部骨折
        curePainCount: -1       # 治愈全部疼痛
        suppressPainSeconds: 0
    
      # ---------- DEK 手术 (dek_surgery) ----------
      # DEK 特供手术包,治愈全部伤情
      dek_surgery:
        clearBleedAll: true
        cureFractureCount: -1
        curePainCount: -1
        suppressPainSeconds: 0
    
      # ---------- 止痛剂示例 (painkiller_example) ----------
      # 仅提供止痛效果,无治愈伤情能力
      painkiller_example:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 60   # 压制疼痛 60 秒
    
      # ---------- 绿色注射器 (green_injector) ----------
      # 绿色注射器,无特殊效果
      green_injector:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 蓝色医疗包 (blue_medkit) ----------
      # 蓝色医疗包变种
      blue_medkit:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 紫色户外盒 (purple_outdoor_box) ----------
      # 户外医疗盒
      purple_outdoor_box:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0
    
      # ---------- 金色战场盒 (gold_battlefield_box) ----------
      # 战场急救箱,高级医疗包
      gold_battlefield_box:
        clearBleedAll: false
        cureFractureCount: 0
        curePainCount: 0
        suppressPainSeconds: 0

armor.yml​

护甲配置:​

代码:
# ============================================================
# 护甲等级配置文件
# 定义各种护甲物品的防护等级和耐久值
# 用于弹甲对抗计算中判断护甲的防护能力
# ============================================================

# --------------- 头盔等级映射 ----------------
# 格式: 物品材质 -> 护甲配置
#   level           - 防护等级 (1-6)
#   maxDurability   - 自定义最大耐久值
#
# 护甲等级说明:
#   1级 = 皮革护甲
#   2级 = 锁链护甲
#   3级 = 铁制护甲
#   4级 = 钻石护甲
#   5级 = 下界合金护甲
#   6级 = 特殊护甲 (龟壳/鞘翅)
helmetMap:
  # ---------- 皮革头盔 ----------
  LEATHER_HELMET:
    level: 1              # 1级防护
    maxDurability: 80     # 80 耐久

  # ---------- 锁链头盔 ----------
  CHAINMAIL_HELMET:
    level: 2              # 2级防护
    maxDurability: 120   # 120 耐久

  # ---------- 铁制头盔 ----------
  IRON_HELMET:
    level: 3              # 3级防护
    maxDurability: 180   # 180 耐久

  # ---------- 钻石头盔 ----------
  DIAMOND_HELMET:
    level: 4              # 4级防护
    maxDurability: 260   # 260 耐久

  # ---------- 下界合金头盔 ----------
  NETHERITE_HELMET:
    level: 5              # 5级防护
    maxDurability: 340   # 340 耐久

  # ---------- 龟壳 (海龟帽) ----------
  TURTLE_HELMET:
    level: 6              # 6级防护 (特殊)
    maxDurability: 420   # 420 耐久

# --------------- 胸甲等级映射 ----------------
chestMap:
  # ---------- 皮革胸甲 ----------
  LEATHER_CHESTPLATE:
    level: 1
    maxDurability: 140   # 140 耐久

  # ---------- 锁链胸甲 ----------
  CHAINMAIL_CHESTPLATE:
    level: 2
    maxDurability: 220   # 220 耐久

  # ---------- 铁制胸甲 ----------
  IRON_CHESTPLATE:
    level: 3
    maxDurability: 320   # 320 耐久

  # ---------- 钻石胸甲 ----------
  DIAMOND_CHESTPLATE:
    level: 4
    maxDurability: 450   # 450 耐久

  # ---------- 下界合金胸甲 ----------
  NETHERITE_CHESTPLATE:
    level: 5
    maxDurability: 580   # 580 耐久

  # ---------- 鞘翅 ----------
  ELYTRA:
    level: 6              # 6级防护 (特殊)
    maxDurability: 700   # 鞘翅最大耐久

Combat.yml​

战斗计算配置:​

代码:
# ============================================================
# 战斗系统配置文件
# 定义弹甲对抗计算的核心规则、部位判定、伤害倍率等
# ============================================================

# --------------- 伤害计算引擎配置 ----------------
engine:
  # 计算模式选择
  # preset = 使用内置的三角洲规则表 (preset 节点)
  # formula = 使用下方自定义表达式 (formula 节点)
  mode: "preset"

# --------------- TacZ 特定配置 ----------------
tacz:
  # 是否仅处理带有 BYPASSES_ARMOR 标签的投射伤害
  # true  = 只处理穿甲弹
  # false = 处理所有 TacZ 子弹
  requireBypassesArmorTag: false

# --------------- 伤害去重配置 ----------------
# 用于处理 TacZ 可能发送的双段伤害
dedup:
  # 是否启用去重
  enabled: true

  # 去重时间窗口 (tick)
  # 在此时间窗口内的相同弹丸+受击者组合视为重复伤害
  windowTicks: 1

# --------------- 子弹等级匹配配置 ----------------
bullet:
  # 当无法从 TacZ 获取子弹等级时使用的默认等级
  defaultLevel: 3

  # 关键词匹配规则 (格式: "关键词=>等级")
  # 插件会在武器名称和显示名称中匹配这些关键词
  # 匹配按顺序执行,第一个命中的规则生效
  levelMatchRules:
    - "AWM=>7"       # AWM 狙击枪 -> 7级弹
    - "M61=>6"       # M61穿甲弹 -> 6级弹
    - "M995=>6"      # M995穿甲弹 -> 6级弹
    - "BP=>5"        # BP弹 -> 5级弹
    - "AP=>4"        # AP弹 -> 4级弹
    - "FMJ=>3"       # FMJ弹 -> 3级弹
    - "RIP=>0"       # RIP肉弹 -> 0级弹

# --------------- 命中部位判定配置 ----------------
# 根据子弹击中实体的高度来确定命中部位
partResolver:
  # 高度判定阈值 (实体高度比例,从脚底算起)
  # 计算方式: 命中高度 / 实体总高度

  # 头部判定阈值
  # 命中高度 >= 总高度 × 0.82 视为头部
  headMinRatio: 0.82

  # 胸部判定阈值
  # 命中高度 >= 总高度 × 0.58 视为胸部
  chestMinRatio: 0.58

  # 腹部判定阈值
  # 命中高度 >= 总高度 × 0.38 视为腹部
  abdomenMinRatio: 0.38

  # 手臂判定阈值
  # 命中高度 >= 总高度 × 0.20 视为手臂
  armMinRatio: 0.20

  # 面部判定: 目标朝向与子弹来向的点积阈值
  # 用于区分面部和后脑勺
  # 值范围: -1.0 ~ 1.0
  # 1.0 = 完全正面, -1.0 = 完全背面
  # 0.35 = 约 70 度角内视为面部
  faceFrontDot: 0.35

# --------------- 部位伤害倍率配置 ----------------
# 定义不同部位受到伤害时的倍率
partMultiplier:
  # 头部倍率 (最小)
  # 用于普通头部命中
  headMin: 1.00

  # 头部倍率 (最大)
  # 用于精确爆头 (面部)
  headMax: 1.50

  # 面部倍率
  face: 1.35

  # 胸部倍率
  chest: 1.00

  # 腹部倍率
  abdomen: 0.90

  # 手臂倍率
  arm: 0.60

  # 腿部倍率
  leg: 0.55

# --------------- 预设模式配置 ----------------
# 当 engine.mode = "preset" 时使用此配置
# 定义子弹等级与护甲等级的差值对应的肉伤减免
preset:
  fleshReductionByGap:
    # 子弹等级 < 护甲等级
    # 例如: 4级弹打6级甲,差值为 -2
    lessThan0: 1.00          # 100% 伤害减免 = 0 伤害

    # 子弹等级 = 护甲等级
    # 例如: 4级弹打4级甲,差值为 0
    equal0: 0.50            # 50% 伤害减免 = 50% 伤害

    # 子弹等级 = 护甲等级 + 1
    # 例如: 5级弹打4级甲,差值为 1
    equal1: 0.25            # 25% 伤害减免 = 75% 伤害

    # 子弹等级 >= 护甲等级 + 2
    # 例如: 6级弹打4级甲,差值为 2
    greaterOrEqual2: 0.00  # 0% 伤害减免 = 100% 伤害

# --------------- 自定义公式模式配置 ----------------
# 当 engine.mode = "formula" 时使用此配置
# 支持的变量:
#   baseDamage        - 基础伤害
#   bulletLevel       - 子弹等级 (0-7)
#   armorLevel        - 护甲等级 (1-6)
#   gap               - 子弹等级 - 护甲等级
#   armorDurability   - 护甲当前耐久
#   armorMaxDurability - 护甲最大耐久
#   isArmoredPart     - 是否命中护甲覆盖的部位
#   armorBroken        - 护甲是否已损坏
#   armorRate         - 子弹的甲伤倍率
#   part              - 命中部位名称
formula:
  # 肉伤减免表达式
  # 计算结果为 0.0 ~ 1.0 的减免比例
  # 0.0 = 无减免, 1.0 = 完全减免
  fleshReductionExpr: "(!isArmoredPart || armorBroken) ? 0 : (gap < 0 ? 1 : (gap == 0 ? 0.5 : (gap == 1 ? 0.25 : 0)))"

  # 护甲伤害表达式
  # 计算护甲受到的伤害比例
  armorDamageExpr: "bulletLevel <= 0 ? 0.25 : armorRate"

  # 肉伤加成表达式
  # 对无护甲目标额外增伤
  fleshBonusExpr: "bulletLevel == 0 && !isArmoredPart ? 1.4 : 1.0"

# --------------- 战斗消息配置 ----------------
message:
  # 是否显示战斗结果消息
  # 包括命中部位、伤害数值等
  showCombatResult: true

  # 是否显示护甲损坏消息
  showArmorBreak: true

子弹等级配置:​

默认仿三角洲机制​

代码:
# ============================================================
# 子弹等级配置文件
# 定义 0-7 级子弹的属性参数
# 用于甲弹对抗计算中的基础数值
# ============================================================

# 子弹等级配置
# 等级越高,穿甲能力越强
# 0级为肉弹(无法穿透任何护甲)
ammoLevels:
  # ---------- 0级: 肉弹 ----------
  # 无法穿透护甲,对无甲目标有额外伤害
  0:
    name: "肉弹"                              # 显示名称
    armorRate: 0.25                          # 甲伤倍率 (护甲伤害仅为标准的25%)
    fleshRate: 1.00                           # 肉伤倍率 (对无护甲目标伤害)
    fleshBonusNoArmor: 1.40                  # 无甲目标额外肉伤倍率 (伤害×1.4)

  # ---------- 1级: 初级穿透 ----------
  1:
    name: "1级弹"
    armorRate: 0.60                          # 60% 护甲伤害
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00                  # 无额外加成

  # ---------- 2级: 中级穿透 ----------
  2:
    name: "2级弹"
    armorRate: 0.70                          # 70% 护甲伤害
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00

  # ---------- 3级: 常规穿透 ----------
  3:
    name: "3级弹"
    armorRate: 0.90                          # 90% 护甲伤害
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00

  # ---------- 4级: 强化穿透 ----------
  # 常见的中等穿透弹,如 5.56x45 / 7.62x39
  4:
    name: "4级弹"
    armorRate: 1.00                          # 100% 护甲伤害 (标准)
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00

  # ---------- 5级: 高级穿透 ----------
  5:
    name: "5级弹"
    armorRate: 1.10                          # 110% 护甲伤害
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00

  # ---------- 6级: 穿甲弹 ----------
  6:
    name: "6级弹"
    armorRate: 1.20                          # 120% 护甲伤害
    fleshRate: 1.00
    fleshBonusNoArmor: 1.00

  # ---------- 7级: 狙击穿甲弹 ----------
  # 最高等级,如 .50 BMG
  7:
    name: "7级弹"
    armorRate: 1.30                          # 130% 护甲伤害
    fleshRate: 0.95                          # 略微降低肉伤
    fleshBonusNoArmor: 1.00

message.yml​

消息提示配置​

代码:
# ============================================================
# 消息配置文件
# 定义插件向玩家显示的所有消息内容
# 支持颜色代码 (&a, &c, &6 等) 和变量替换
# ============================================================

# 消息前缀 (出现在每条消息前面)
# &6 = 金色, &r = 重置颜色
prefix: "&6[弹甲系统] &r"

# --------------- 通用消息 ----------------

# 配置重载成功
# 触发: /wtb reload
reload_ok: "${prefix}&a配置重载完成"

# 护甲损坏提示
# 变量: ${partName} - 损坏的部位名称
armor_broken: "${prefix}&c你的${partName}已损坏"

# TacZ Spigot API 未就绪
# 触发: TacZSpigotBridge 插件未加载或未初始化
bridge_not_ready: "${prefix}&cTacZ Spigot API 尚未就绪"

# --------------- 弹药装填相关消息 ----------------

# 未持枪提示
# 触发: 玩家未手持任何物品
hold_gun_first: "${prefix}&c请先手持枪械"

# 非 TacZ 枪械提示
# 触发: 玩家手持的物品不是 TacZ 枪械
not_tacz_gun: "${prefix}&c当前主手不是 TacZ 枪械"

# 枪械无弹种配置
# 触发: 当前枪械未在 custom_ammo.yml 中配置弹种
gun_no_custom_ammo: "${prefix}&c该枪械未配置可用弹种"

# 弹种配置无效
# 触发: 弹种 ID 存在但配置参数不完整
ammo_type_invalid: "${prefix}&c该弹种配置无效"

# 禁止切换弹种 (弹匣有剩余子弹)
# 触发: denySwitchWhenLoaded=true 且弹匣还有子弹
deny_switch_with_loaded: "${prefix}&c当前弹匣还有子弹,不能切换弹种"

# 无法获取弹匣容量
# 触发: 无法从 TacZ 获取弹匣容量
mag_capacity_invalid: "${prefix}&c无法获取弹匣容量"

# 背包无弹药
# 触发: 玩家背包中没有匹配的弹药物品
no_ammo_item: "${prefix}&c背包中没有可用的弹药物品"

# 弹匣已满
# 触发: 尝试装填但弹匣已满
ammo_already_full: "${prefix}&e当前弹匣已满"

# 装填成功
# 变量:
#   ${ammoType} - 弹种显示名称
#   ${count}    - 装填数量
#   ${capacity} - 弹匣容量
ammo_loaded: "${prefix}&a装填完成: ${ammoType} &7${count}/${capacity}"

# 装填失败 (TacZ 同步错误)
# 触发: 装填成功但子弹数量同步失败,回滚操作
ammo_sync_failed: "${prefix}&cTacZ 枪械子弹同步失败,已回滚本次装填"

# 弹药耗尽
# 触发: 装填的弹种在背包中没有剩余
out_of_ammo: "${prefix}&c当前装填弹种无剩余子弹"

# GUI 冷却中
# 触发: 玩家操作过于频繁,尚未过完冷却时间
ammo_gui_cooldown: "${prefix}&e操作过快,请稍后再试"

指令列表​

玩家指令​

  • /wtb
    查看插件帮助菜单​
  • /wtb ammo
    打开弹药选择 GUI​

管理员指令​

  • /wtb reload
    重载全部配置文件​
  • /wtb injury status [玩家名]
    查看指定玩家当前伤情状态​
  • /wtb injury clear &lt;玩家名&gt;
    清空指定玩家所有伤情效果​

数据存储说明​

  • 玩家伤情数据默认保存在:
    playerdata/injuries/玩家UUID.yml​
  • 数据保存时机:​
    • 伤情变更后延迟保存​
    • 玩家退出时立即保存​
    • 插件关闭时立即保存​
  • 清除规则:​
    • 玩家死亡时自动清空伤情​
    • 管理员可手动执行清除指令​

常见问题​

1. TacZ API 不可用​

表现: 后台提示 API 加载失败,枪械拓展功能无效

排查方式:
  • 检查 TacZSpigotBridge 是否成功加载​
  • 确认 TacZ Forge 模组已安装且版本匹配​
  • 确认服务端类型为 Spigot / Paper / Mohist​
  • 纯 Forge 端不支持本插件运行​

2. 伤情系统未生效​

表现: 命中后没有流血、骨折、疼痛等效果

排查方式:
  • 确认已安装 WarZMedic​
  • 检查 injury.yml 中相关配置项​
  • 确认各类伤情触发概率未被设为 0​

3. 弹药装填没有反应​

表现: 按 R 或输入 /wtb ammo 后无 GUI 弹出

排查方式:
  • 确认当前手持枪械已在 custom_ammo.yml 中配置适配​
  • 确认背包内拥有对应弹药物品​
  • 检查是否存在其他插件取消了原版换弹事件​

4. 伤害结算异常​

排查方式:
  • 开启 debug 模式查看后台日志​
  • 检查护甲等级、子弹等级和部位倍率配置​
  • 执行 /wtb reload 重新加载配置​

适用场景​

WarZTacZBullet 非常适合以下类型服务器:
  • WarZ / 末日生存服
  • 硬核 PVP / 现代枪战服
  • 军事 / 战术风格玩法服务器
  • 希望增强 TacZ 枪械深度的整合服

总结​

如果你觉得原版 TacZ 枪战玩法还不够深入,
那么 WarZTacZBullet 可以为你的服务器补足最关键的一环:
  • 有策略的弹药选择​
  • 更真实的护甲对抗​
  • 更具压迫感的受伤反馈​
  • 更适合 WarZ 氛围的硬核战斗体验​
对于想做 真实枪战、生存对抗、战术竞技 的服主来说,这会是一款非常值得尝试的拓展插件。

  • 1774080125767.webp
    1774080125767.webp
    163.4 KB · 查看: 17
作者
Crazy_Jky
查看
956
首次发布
最后更新

评分

0.00 星 0 次评分

Crazy_Jky 的其他资源

最新更新

  1. 1.4.0

    新增 WarZDuelTimeTeamBridgeService:直伤落地前反射调用上面的 API 查询是否拦截 两条直伤路径均已接入:CombatListener(Bukkit 事件路径)与...
  2. 1.3.9

    - 修复 Mohist/Forge `1.20.1` 下装填结束仍提示“TacZ 枪械子弹状态同步失败,已回滚本次装填”的问题。 - TacZ 状态提交现在优先调用 TacZ `1.1.8`...
  3. 1.3.8

    - 修复 `1.3.7` 中品阶弹 NBT 已完整保留,但装填结束报“TacZ 机械子弹状态同步失败,已回滚本次装填”的问题。 - 根因是装填完成时依次调用桥接层写入...
后退
顶部 底部