跳转到内容

数据包注册

通过数据包 JSON 注册弹药类型与枪械→弹药绑定。与框架注册表一致:/reload 可热重载 JSON 定义,已发放物品的行为实时跟随。

通用规则

  • JSON 文件放在 data/<命名空间>/modularshootammo/<注册表路径>/<id>.json
  • 文件名为条目 ID(不含命名空间),命名空间由文件夹路径决定
  • 可选字段省略时使用代码中注明的默认值
  • 两个注册表均携带网络 codec,条目随连接同步到客户端(HUD 与 tooltip 需要查询)

弹药类型 JSON(ammo_types

路径data/<命名空间>/modularshootammo/ammo_types/<弹药类型id>.json

JSON 键类型必需默认值说明
name字符串显示名,支持 lang: 翻译键前缀
color字符串标识颜色,"#RRGGBB" 格式(也接受无 # 前缀);解析失败回退白色,永不导致崩溃
item资源路径弹药物品 id(决定背包备弹按哪种物品统计/扣取)
reserve_limit整数无限制备弹上限:背包中该弹药的可用数量截断值
per_shot_cost整数1每次射击消耗的弹药数(如霰弹枪每发 2 颗弹壳)
reload_sound资源路径换弹音效覆盖,优先于通用换弹音效

示例(随包数据,demo_pistol 绑定的手枪弹):

json
{
  "name": "lang:modularshootammo.ammo_type.pistol_ammo",
  "color": "#FFAA00",
  "item": "modularshootammo:pistol_ammo",
  "per_shot_cost": 1
}

带备弹上限与专属换弹音效的完整示例

json
{
  "name": "lang:modularshootammo.ammo_type.sniper_ammo",
  "color": "#AA88FF",
  "item": "modularshootammo:sniper_ammo",
  "reserve_limit": 128,
  "per_shot_cost": 1,
  "reload_sound": "modularshootammo:reload_start"
}

namelang: 前缀时,翻译键应注册到语言文件;缺少翻译时回退显示键本身。

枪械→弹药绑定 JSON(gun_ammo_bindings

路径data/<命名空间>/modularshootammo/gun_ammo_bindings/<枪械id>.json

JSON 键类型必需说明
ammo_type资源路径绑定的弹药类型 id(ammo_types 注册表)

示例

json
{
  "ammo_type": "modularshootammo:pistol_ammo"
}

框架侧配合项

弹药系统建立在框架的注册表之上,随包数据(命名空间 modularshootammo)声明了以下框架条目:

框架注册表条目说明
modularshoot:traitsuses_ammo枪械声明 "uses_ammo": true 后启用弹药系统
modularshoot:traitsinfinite_ammo声明后豁免扣弹(HUD 显示 ∞)
modularshoot:statesmag_ammo(gun/int)弹匣余量,默认 0
modularshoot:statesreload_tick(player/int)、reload_gun(player/uuid)换弹倒计时与目标枪
modularshoot:attribute_metamag_sizereload_time绑定本模组注册的原版属性(modularshootammo:mag_size / modularshootammo:reload_time),枪械基础值在 guns JSON 的 stats 中声明

枪械启用示例modularshoot:guns/demo_pistol.json 片段):

json
{
  "stats": {
    "modularshootammo:mag_size": 12,
    "modularshootammo:reload_time": 15,
    "modularshoot:hit_damage": 6
  },
  "traits": {
    "modularshootammo:uses_ammo": true
  }
}

完整字段格式见框架数据包文档。换弹/扣弹的具体行为规则由本模组 AmmoService 实现,不在此赘述。

基于 MIT 许可发布