{
  "$id": "blockception.minecraft.render_controllers.json",
  "additionalProperties": false,
  "type": "object",
  "title": "Render Controllers 1.8.0",
  "description": "Render_Controllers 1.8.0",
  "required": ["render_controllers", "format_version"],
  "definitions": {
    "color": {
      "anyOf": [
        { "type": "number", "description": "A color definition as number, between 0 and 1", "title": "Color Number", "minimum": 0, "maximum": 1 },
        { "type": "string", "description": "A color definition in molang, must result in a float between 0 and 1", "title": "Molang Color" }
      ]
    }
  },
  "properties": {
    "format_version": {
      "title": "1.8.0 Format Version",
      "type": "string",
      "pattern": "^1.8.0$",
      "description": "A version that tells minecraft what type of data format can be expected when reading this file."
    },
    "render_controllers": {
      "type": "object",
      "propertyNames": { "pattern": "^controller\\.render\\.[a-z\\.]+", "examples": ["controller.render.example"] },
      "additionalProperties": {
        "additionalProperties": false,
        "type": "object",
        "title": "Render Controller",
        "description": "A single render_controller definition",
        "required": ["geometry", "materials"],
        "properties": {
          "arrays": {
            "type": "object",
            "title": "Arrays",
            "additionalProperties": false,
            "description": "A collection of definition of arrays",
            "properties": {
              "geometries": {
                "type": "object",
                "minProperties": 1,
                "description": "A collection of Geometry array",
                "title": "Geometries",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[Gg]eometry\\..+",
                    "description": "A geometry item, must be defined in the entity",
                    "title": "Geometry"
                  },
                  "description": "A geometry array definition",
                  "title": "Geometries"
                }
              },
              "materials": {
                "type": "object",
                "minProperties": 1,
                "description": "A collection of materials array",
                "title": "Materials",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[Mm]aterial\\..+",
                    "description": "A material item, must be defined in the entity",
                    "title": "Material"
                  },
                  "description": "A material array definition",
                  "title": "Materials"
                }
              },
              "textures": {
                "type": "object",
                "minProperties": 1,
                "description": "A collection of texture array",
                "title": "Textures",
                "additionalProperties": {
                  "type": "array",
                  "description": "Textures",
                  "title": "Texture",
                  "items": {
                    "type": "string",
                    "pattern": "^[Tt]exture\\..+",
                    "default": "texture.",
                    "description": "An texture item",
                    "title": "Texture"
                  }
                }
              }
            }
          },
          "color": {
            "description": "UNDOCUMENTED: color",
            "title": "Color",
            "additionalProperties": false,
            "type": "object",
            "properties": {
              "r": { "$ref": "#/definitions/color", "description": "The value of red, must result in a float between 0 and 1", "title": "R" },
              "g": { "$ref": "#/definitions/color", "description": "The value of green, must result in a float between 0 and 1", "title": "G" },
              "b": { "$ref": "#/definitions/color", "description": "The value of blue, must result in a float between 0 and 1", "title": "B" },
              "a": { "$ref": "#/definitions/color", "description": "The value of alpha, must result in a float between 0 and 1", "title": "A" }
            }
          },
          "filter_lighting": { "type": "boolean", "description": "UNDOCUMENTED: filter lighting", "title": "Filter Lighting" },
          "geometry": { "type": "string", "description": "UNDOCUMENTED: geometry", "title": "Geometry" },
          "ignore_lighting": { "type": "boolean", "description": "UNDOCUMENTED: ignore lighting", "title": "Ignore Lighting" },
          "is_hurt_color": {
            "type": "object",
            "title": "Is Hurt Color",
            "additionalProperties": false,
            "description": "The color that is overlay when hurt",
            "properties": {
              "r": { "$ref": "#/definitions/color", "description": "The value of red, must result in a float between 0 and 1", "title": "R" },
              "g": { "$ref": "#/definitions/color", "description": "The value of green, must result in a float between 0 and 1", "title": "G" },
              "b": { "$ref": "#/definitions/color", "description": "The value of blue, must result in a float between 0 and 1", "title": "B" },
              "a": { "$ref": "#/definitions/color", "description": "The value of alpha, must result in a float between 0 and 1", "title": "A" }
            }
          },
          "light_color_multiplier": {
            "$ref": "../../../molang/number.json",
            "description": "The amount of light that blends into what is being rendered, lower values gives darker rendering, (1 = 100%)",
            "title": "Light Color Multiplier"
          },
          "materials": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "additionalProperties": { "type": "string", "description": "UNDOCUMENTED: additionalProperties", "title": "Material" },
              "description": "UNDOCUMENTED: materials",
              "title": "Materials"
            },
            "description": "UNDOCUMENTED: materials",
            "title": "Materials"
          },
          "on_fire_color": {
            "additionalProperties": false,
            "type": "object",
            "properties": {
              "r": { "$ref": "#/definitions/color", "description": "The value of red, must result in a float between 0 and 1", "title": "R" },
              "g": { "$ref": "#/definitions/color", "description": "The value of green, must result in a float between 0 and 1", "title": "G" },
              "b": { "$ref": "#/definitions/color", "description": "The value of blue, must result in a float between 0 and 1", "title": "B" },
              "a": { "$ref": "#/definitions/color", "description": "The value of alpha, must result in a float between 0 and 1", "title": "A" }
            },
            "description": "UNDOCUMENTED: on fire color",
            "title": "On Fire Color"
          },
          "overlay_color": {
            "additionalProperties": false,
            "type": "object",
            "properties": {
              "r": { "$ref": "#/definitions/color", "description": "The value of red, must result in a float between 0 and 1", "title": "R" },
              "g": { "$ref": "#/definitions/color", "description": "The value of green, must result in a float between 0 and 1", "title": "G" },
              "b": { "$ref": "#/definitions/color", "description": "The value of blue, must result in a float between 0 and 1", "title": "B" },
              "a": { "$ref": "#/definitions/color", "description": "The value of alpha, must result in a float between 0 and 1", "title": "A" }
            },
            "description": "Overlays this color ontop of any rendering parts",
            "title": "Overlay Color"
          },
          "part_visibility": {
            "type": "array",
            "minItems": 1,
            "items": {
              "description": "A collection of object that describe which bones are hidden or not",
              "title": "Part Visibilty",
              "type": "object",
              "minProperties": 1,
              "additionalProperties": {
                "oneOf": [{ "type": "string" }, { "type": "boolean" }, { "type": "number" }],
                "description": "Describes which bones are visible or not, can be a string, boolean or number",
                "title": "Part Visibilty"
              }
            },
            "description": "UNDOCUMENTED: part visibility",
            "title": "Part Visibility"
          },
          "rebuild_animation_matrices": {
            "type": "boolean",
            "description": "UNDOCUMENTED: rebuild animation matrices",
            "title": "Rebuild Animation Matrices"
          },
          "textures": {
            "type": "array",
            "minItems": 1,
            "items": { "type": "string", "description": "UNDOCUMENTED: textures", "title": "Textures" },
            "description": "UNDOCUMENTED: textures",
            "title": "Textures"
          },
          "uv_anim": {
            "additionalProperties": false,
            "type": "object",
            "required": ["offset", "scale"],
            "properties": {
              "offset": {
                "type": "array",
                "minItems": 2,
                "maxItems": 2,
                "items": { "$ref": "../../../molang/number.json", "description": "UNDOCUMENTED: offset", "title": "Offset" },
                "description": "UNDOCUMENTED: offset",
                "title": "Offset"
              },
              "scale": {
                "type": "array",
                "description": "UNDOCUMENTED: scale",
                "title": "Scale",
                "minItems": 2,
                "maxItems": 2,
                "items": { "$ref": "../../../molang/number.json", "description": "UNDOCUMENTED: scale", "title": "Scale" }
              }
            },
            "description": "UNDOCUMENTED: uv anim",
            "title": "Uv Anim"
          }
        }
      },
      "description": "UNDOCUMENTED: render controllers",
      "title": "Render Controllers"
    }
  }
}
