跳转至

07. 附件 · 方块 · 配方(同一套套路)

枪之外的东西(配件、方块、配方、标签)走的是和枪完全一样的三件套:index 登记、data 定数、assets 定貌。学会一个就会全部。

7.1 配件(attachments)

这个枪包里最小可用的配件文件组合(真实枪包的结构):

data/<ns>/index/attachments/scope_m4a1.json          ← 登记
data/<ns>/data/attachments/scope_m4a1_data.json      ← 数值
assets/<ns>/display/attachments/scope_m4a1_display.json   ← 表现
assets/<ns>/geo_models/attachment/scope_m4a1_geo.json     ← 模型
assets/<ns>/textures/attachment/uv/scope_m4a1.png         ← 贴图
assets/<ns>/textures/attachment/slot/scope_m4a1.png       ← 图标
data/<ns>/tacz_tags/attachments/…                          ← 谁能装谁

登记 index/attachments/<id>.json:

{
  "name": "mypack.attachment.scope_m4a1.name",
  "display": "mypack:scope_m4a1_display",
  "data": "mypack:scope_m4a1_data",
  "type": "scope"
}

数值 data/attachments/<id>_data.json:

{
  "weight": 0,
  "ads_addend": 0.1
}

常见槽位类型(type):

type 含义
scope 瞄具
muzzle 枪口(消音器/补偿器)
grip 握把
stock 枪托
extended_mag 扩容弹匣
laser 激光指示器

具体支持哪些槽位、槽位的 id 拼写,以本体的枪械工作台界面与默认配件为准。

7.2 标签:限制"谁能装谁"

配件不是想装就装,TaCZ 用标签文件约束匹配关系:

data/<ns>/tacz_tags/attachments/allow_attachments/<枪id>.json   ← 这把枪允许哪些配件
data/<ns>/tacz_tags/attachments/<槽位类型>.json                  ← 这个槽位允许哪些配件
// 例:允许这把枪装某配件
{
  "values": ["mypack:scope_m4a1"]
}

⚠️ 只写了配件但没写标签 → 工作台里"装不上去"。这是配件相关最常踩的坑。

7.3 配方(recipes)

枪械工作台配方放 data/<ns>/recipes/gun/<枪id>.json(真实枪包的格式):

{
  "type": "tacz:gun_smith_table_crafting",
  "materials": [
    { "item": { "tag": "forge:ingots/iron" }, "count": 39 },
    { "item": { "tag": "forge:ingots/gold" }, "count": 3 },
    { "item": { "tag": "forge:gems/quartz" }, "count": 3 },
    { "item": { "tag": "forge:gems/lapis" }, "count": 8 }
  ],
  "result": {
    "type": "gun",
    "id": "mypack:m4a1"
  }
}
字段 说明
type tacz:gun_smith_table_crafting = 枪械工作台配方
materials[].item.tag 用标签写材料(推荐,兼容其它模组的同类物品,如 forge:ingots/iron)
materials[].item.item 也可以直接写具体物品 id
materials[].count 数量
result.type / result.id 产物类型(gun / ammo / attachment)与 id

普通合成台配方放 data/<ns>/recipes/ 下(用原版的 shaped/shapeless 格式),把枪/弹药也做成可合成时用这个。

💡 配方是"抄起来最容易错"的部分:字段层级深、还涉及标签。先复制默认包的同类配方,改 id 和数量。

7.4 方块(blocks)

枪包也能带方块(箱子、展台之类):

data/<ns>/index/blocks/<id>.json
data/<ns>/data/blocks/<id>_data.json
assets/<ns>/display/blocks/<id>_display.json
assets/<ns>/geo_models/block/<id>_geo.json
assets/<ns>/textures/block/uv/<id>.png

套路与枪一致:登记 → 数值 → 表现。方块一般还要配"怎么获得"的配方。

7.5 进阶:状态机脚本(scripts)

真实枪包里能看到:

assets/<ns>/scripts/<id>_state_machine.lua

这是 TaCZ 给枪械行为留的脚本扩展位(用 Lua 写状态机,比如特殊装填流程)。进阶玩法可以研究,但: - 属于非必需能力,普通枪包完全用不到; - 格式随版本变化大,务必对照本体自带脚本来写。

7.6 内容类型对照总表

类型 index data display 模型 贴图 其它
枪 index/guns data/guns/*_data display/guns/*_display geo_models/gun textures/gun/{uv,slot,hud} 配方、标签、动画、音效
弹药 index/ammo (可省) display/ammo — textures/ammo/slot 配方
配件 index/attachments data/attachments/*_data display/attachments geo_models/attachment textures/attachment/{uv,slot} 标签(必写)、配方
方块 index/blocks data/blocks/*_data display/blocks geo_models/block textures/block/uv 配方