Json格式化实体模型

Json格式化实体模型

数据驱动实体模型库

基础库

JsonEM(Json 实体模型)

面向模组开发者、资源包作者和整合包制作者的库,用于使用 JSON 创建和编辑实体模型
不兼容 OptiFine 格式!

生成参考实体模型:

如果你想导出所有实体模型(原版或模组版)的 JSON 版本,以便通过资源包轻松编辑或将其作为示例使用,操作方法如下:

  • 启动游戏,然后打开位于 .minecraft/config/jsonem.properties 的配置文件。
  • 将文件第二行修改为 dump_models=true。
  • 重新启动游戏,进入文件夹 .minecraft/jsonem_dump。
  • 此文件夹中应能找到所有已注册实体模型导出的 JSON 文件,其格式与资源包一致。
  • 编辑或通过资源包添加模型时,请使用此格式。

在 Blockbench 中编辑模型:

要在 Blockbench 中编辑模型,请安装本仓库中的插件。

  • 从该 GitHub 仓库 下载 文件 jsonem_models.js
  • 在 Blockbench 中,进入 File > Plugins,在对话框顶部点击 Load Plugin from File 图标,选择 jsonem_models.js 文件。
  • 进入 File > New,选择 JsonEM Java Entity Model 开始编辑。
  • 你也可以通过 File > Open Model 导入 JsonEM 的 JSON 模型文件,例如从游戏导出的文件。
  • 要导出模型以供 JsonEM 使用,请进入 File > Export > Export JsonEM Java Entity Model 并保存文件。

面向资源包/整合包制作者:

  • 按照上述步骤,从你的游戏或整合包中导出所有实体模型。
  • 编辑资源包/整合包资源时,按照导出的模型文件夹中的格式添加实体模型 JSON 文件。

面向模组开发者:

JsonEM 可以让你完全使用 JSON 为实体创建 TexturedModelData。
本指南将演示如何使用 JSON 制作该教程中的立方体实体模型。

  • 按如下方式引入本模组(版本可在此处查看):
repositories {
	maven { url "https://api.modrinth.com/maven" }
}
dependencies {
    // 将 <version> 替换为你需要的版本
    modImplementation "maven.modrinth:jsonem:<version>"
    include "maven.modrinth:jsonem:<version>"
}
  • 通过 JsonEM 而非 Fabric API 为你的实体注册实体模型层(无需代码生成的 TexturedModelData)
void onInitializeClient() {
    [...]
    JsonEM.registerModelLayer(MODEL_CUBE_LAYER); // 层 ID: "entitytesting:cube",层名称:"main"
}
  • 在你的模组资源中添加包含实体模型数据的模型文件
    示例: assets/entitytesting/models/entity/cube/main.json
{
    "texture": {
        "width": 64,
        "height": 64
    },
    "bones": {
        "cube": {
            "transform": {
                "origin": [0, 0, 0]
            },
            "cuboids": [
                {
                    "uv": [0, 0],
                    "offset": [-6, 12, -6],
                    "dimensions": [12, 12, 12]
                }
            ]
        }
    }
}
  • 确保上述文件中的骨骼 "cube" 在实体模型中以相同名称进行访问
public CubeEntityModel(ModelPart modelPart) {
    this.base = modelPart.getChild("cube"); // 原版教程使用的是未指定的字段 EntityModelPartNames.CUBE
}