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 |
配方 |