- 版权类型
- 原创
- 插件中文名称
- WarZTacZBullet
- 插件英文名称
- WarZTacZBullet
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- 语言支持
- 中文(简体)
- 前置组件
- TacZSpigotApi
WarZMedic
- 适配版本(Java)
- 1.20
【原创插件】WarZTacZBullet —— TacZ 枪械拓展 × WarZ 硬核战斗机制,支持自定义弹种 / 甲弹对抗 / 真实伤情系统
插件简介
WarZTacZBullet 是一款面向 WarZ 风格服务器打造的 TacZ 枪械拓展插件。
它在原版 TacZ 枪械体系的基础上,加入了更贴近硬核战斗玩法的机制,让战斗不再只是“谁先开枪谁赢”,而是围绕 弹种选择、护甲穿透、命中部位、真实伤情 展开更有策略性的对抗。
插件通过对接 TacZSpigotApi,能够与 TacZ 枪械系统无缝兼容,在保证流畅性的同时,带来更丰富、更真实的枪战体验。
Wiki:
https://www.yuque.com/daqingtian-3ob8x/warz/xgut3lowk229on7v?singleDoc# 《WarZTacZBullet - 肢体伤害|子弹护甲分级插件》
它在原版 TacZ 枪械体系的基础上,加入了更贴近硬核战斗玩法的机制,让战斗不再只是“谁先开枪谁赢”,而是围绕 弹种选择、护甲穿透、命中部位、真实伤情 展开更有策略性的对抗。
插件通过对接 TacZSpigotApi,能够与 TacZ 枪械系统无缝兼容,在保证流畅性的同时,带来更丰富、更真实的枪战体验。
Wiki:
https://www.yuque.com/daqingtian-3ob8x/warz/xgut3lowk229on7v?singleDoc# 《WarZTacZBullet - 肢体伤害|子弹护甲分级插件》
核心特色
1. TacZ 无缝兼容
依托 TacZSpigotApi 对接原版枪械系统,不破坏原有枪械框架,兼容性高,运行稳定。
2. 多弹种自由切换
支持为不同枪械配置 标准弹、穿甲弹 等多种弹药。
玩家可通过 GUI 界面 快速选择并装填对应弹种,提升战斗自由度。
玩家可通过 GUI 界面 快速选择并装填对应弹种,提升战斗自由度。
3. 硬核甲弹对抗
引入 子弹等级 vs 护甲等级 的战斗结算逻辑。
不同等级的子弹面对不同等级护甲,将产生明显差异化的穿透与减伤效果。
不同等级的子弹面对不同等级护甲,将产生明显差异化的穿透与减伤效果。
4. 拟真伤情系统
可联动 WarZMedic,实现 流血、骨折、疼痛 等真实伤情效果,进一步增强战场压迫感与沉浸感。
5. 全配置化自定义
伤害倍率、弹药属性、伤情概率、治疗映射等内容均可自由调整,方便服主根据服务器玩法进行深度定制。
依赖说明
必需组件
- TacZ Forge 模组
提供基础枪械、弹药与射击框架 - TacZSpigotBridge
用于打通 TacZ 模组与 Spigot 插件之间的 API 通信
可选组件
- WarZMedic
安装后可启用完整伤情系统
若不安装,则插件仍可使用 甲弹对抗 等核心功能
功能展示
一、自定义弹药系统
玩家可在持有适配枪械时,通过以下方式打开弹药选择界面:
- 按下 R 键
- 输入指令:/wtb ammo
打开 GUI 后,系统会显示当前枪械支持的所有弹种。
玩家点击对应弹药后,若背包内拥有足够数量的该类弹药,系统将自动完成扣除与装填,并给出提示信息。
玩家点击对应弹药后,若背包内拥有足够数量的该类弹药,系统将自动完成扣除与装填,并给出提示信息。
弹种玩法示例
- 穿甲弹:护甲穿透率更高,但对无甲目标的肉伤可能略低
- 标准弹:属性更均衡,适合大多数常规战斗场景
这意味着玩家需要根据敌方装备情况灵活调整弹种,而不是永远只用一种弹药。
二、部位命中与伤害判定
子弹命中目标后,系统会自动根据命中部位进行不同倍率结算:
- 头部 / 面部:高倍率伤害,极易触发疼痛与流血
- 胸部:标准伤害,伤情触发较均衡
- 腹部 / 四肢:伤害略低,但四肢更容易触发骨折
这一机制让战斗更贴近真实,也让不同射击选择更具战术意义。
三、甲弹对抗系统
插件根据 子弹等级 与 护甲等级 的差值进行伤害结算:
- 子弹等级 < 护甲等级
几乎无法有效穿透,护甲大幅减免甚至完全抵消伤害 - 子弹等级 = 护甲等级
可造成部分穿透,护甲仍会减免部分肉伤 - 子弹等级 ≥ 护甲等级 + 1
可形成明显穿透,等级差越高,最终伤害越可观
这套机制能很好地还原“低等级子弹打高等级甲效果差、高等级弹药破甲明显”的战斗体验。
四、伤情系统(需 WarZMedic)
安装 WarZMedic 后,插件可启用完整伤情玩法:
1. 流血
持续掉血效果,可叠加,层数越高掉血越快。
2. 骨折
- 手臂骨折:影响换弹与使用医疗物品速度
- 腿部骨折:减速、限制冲刺能力
3. 疼痛
降低生命上限,严重时会显著削弱玩家持续作战能力。
治疗方式
- 绷带:清除全部流血效果
- 急救包:清除流血,并治愈部分骨折与疼痛
- 止痛药:暂时压制疼痛效果
真实战斗不再只是“受伤-吃药-恢复满状态”,而是需要合理管理伤情资源。
安装教程
安装步骤
- 确保服务端已安装并正常运行 TacZ Forge 模组
- 将 TacZSpigotBridge.jar 放入 plugins 文件夹
- 将 WarZTacZBullet.jar 放入 plugins 文件夹并重启服务器
- 如需完整伤情系统,再将 WarZMedic.jar 放入 plugins 文件夹并重启服务器
配置文件说明
插件首次启动后会在以下路径生成配置文件:
plugins/WarZTacZBullet/
包含内容如下:
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 <玩家名>
清空指定玩家所有伤情效果
数据存储说明
- 玩家伤情数据默认保存在:
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 可以为你的服务器补足最关键的一环:
那么 WarZTacZBullet 可以为你的服务器补足最关键的一环:
- 有策略的弹药选择
- 更真实的护甲对抗
- 更具压迫感的受伤反馈
- 更适合 WarZ 氛围的硬核战斗体验
对于想做 真实枪战、生存对抗、战术竞技 的服主来说,这会是一款非常值得尝试的拓展插件。