FreeMinecraftModels 资源包输出
FreeMinecraftModels 目前将其生成的资源包写入 output,而不是 outputs。
默认输出路径
插件在启动时和执行 /fmm reload 时重建此文件夹:
plugins/FreeMinecraftModels/output/FreeMinecraftModels
随后将该文件夹打包为:
plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip
该 zip 路径正是 ResourcePackManager 与 FreeMinecraftModels 集成时所期望的路径。
生成的内容
生成的文件夹始终包括:
pack.mcmetapack.pngassets/minecraft/atlases/blocks.jsonassets/freeminecraftmodels/...模型与材质输出
对于 Minecraft 1.21.4+,FreeMinecraftModels 在以下路径生成 item-model 定义文件:
assets/freeminecraftmodels/items
对于较旧的服务器,它会回退到老式的皮革马铠覆盖模型路径。
Display 模型输出(1.21.4+)
当模型存在同名的 .json display 模型文件时(参见 模型制作说明),FMM 会将该 JSON(其中的材质引用已被改写为与提取的材质相匹配)复制到:
assets/freeminecraftmodels/models/display/{modelId}.json
它还会在以下位置生成对应的物品定义:
assets/freeminecraftmodels/items/display/{modelId}.json
DisplayModelRegistry 在运行时追踪哪些模型拥有 display JSON,以便可以对 ItemStack 调用 ItemMeta.setItemModel(),给予它们正确的手中与背包外观。
弓与弩条件式物品输出
当 FMM 检测到一组弓或弩状态模型时(参见 模型制作说明),它会为 _idle 模型生成单个物品定义 JSON,在资源包层面条件性地在所有状态之间切换。服务端无需任何数据包处理 —— 客户端原生处理状态转换。
弓的输出
对于弓,生成的物品定义使用 using_item 上的 minecraft:condition,并在 use_duration(缩放 0.05)上使用 minecraft:range_dispatch:
| 条件 | 使用的模型 |
|---|---|
| 未使用物品 | _idle |
| 正在使用,回退(刚开始) | _draw_start |
正在使用,阈值 0.65 | _draw_half |
正在使用,阈值 0.9 | _draw_full |
弩的输出
对于弩,生成的物品定义在 charge_type 上使用 minecraft:select。当装填完成(箭矢或烟花火箭)时显示 _charged 模型。未装填时的回退使用 crossbow/pull 上的 minecraft:range_dispatch:
| 条件 | 使用的模型 |
|---|---|
| 未使用、未装填 | _idle |
| 正在使用,回退(刚开始) | _draw_start |
正在使用,阈值 0.58 | _draw_half |
正在使用,阈值 1.0 | _draw_full |
| 已装填(箭矢或烟花火箭) | _charged |
输出位置
生成的条件式物品定义会与其他物品定义一同写入:
assets/freeminecraftmodels/items/display/{baseModelId}_idle.json
只有 _idle 模型会得到物品定义文件。拉弓与已装填的模型作为条件项被引用在其中。
Minecraft 26.1+ 兼容性修复
资源包生成器为 Minecraft 26.1 及更新版本自动应用两个兼容性修复:
- UV 裁剪: 生成的物品模型将 UV 坐标裁剪到
0–16范围,以避免 26.1 更严格的验证器引入的纹理溢出问题。 - 空骨骼方块模型: 没有立方体(或只包含
anchor_子骨骼)的骨骼以前会发出格式错误的方块模型 JSON,在 26.1+ 上无法加载。生成器现在会发出有效的占位符,使资源包仍能加载。
这些修复会自动应用,无需任何配置。
重载行为
当 FreeMinecraftModels 重载时,它会:
- 重新执行内容导入步骤
- 重建
output/FreeMinecraftModels文件夹 - 重新生成
output/FreeMinecraftModels.zip - 若安装了 ResourcePackManager,则派发
resourcepackmanager reload
这就是为什么现代的 FMM + ResourcePackManager 配置不再需要老式的手动 zip 复制流程。