跳到主要内容

FreeMinecraftModels 资源包输出

FreeMinecraftModels 目前将其生成的资源包写入 output,而不是 outputs

默认输出路径

插件在启动时和执行 /fmm reload 时重建此文件夹:

plugins/FreeMinecraftModels/output/FreeMinecraftModels

随后将该文件夹打包为:

plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip

该 zip 路径正是 ResourcePackManager 与 FreeMinecraftModels 集成时所期望的路径。

生成的内容

生成的文件夹始终包括:

  • pack.mcmeta
  • pack.png
  • assets/minecraft/atlases/blocks.json
  • assets/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 坐标裁剪到 016 范围,以避免 26.1 更严格的验证器引入的纹理溢出问题。
  • 空骨骼方块模型: 没有立方体(或只包含 anchor_ 子骨骼)的骨骼以前会发出格式错误的方块模型 JSON,在 26.1+ 上无法加载。生成器现在会发出有效的占位符,使资源包仍能加载。

这些修复会自动应用,无需任何配置。

重载行为

当 FreeMinecraftModels 重载时,它会:

  • 重新执行内容导入步骤
  • 重建 output/FreeMinecraftModels 文件夹
  • 重新生成 output/FreeMinecraftModels.zip
  • 若安装了 ResourcePackManager,则派发 resourcepackmanager reload

这就是为什么现代的 FMM + ResourcePackManager 配置不再需要老式的手动 zip 复制流程。