{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "blockception.minecraft.resource.texture.texture_set",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "format_version": { "$ref": "../../general/format_version.json" },
    "minecraft:texture_set": {
      "title": "Texture Set",
      "description": "Texture Sets are used to define multiple PBR layers for a texture resource.",
      "type": "object",
      "additionalProperties": false,
      "required": ["color"],
      "properties": {
        "color": { "$ref": "#/definitions/color" },
        "heightmap": { "$ref": "#/definitions/heightmap" },
        "metalness_emissive_roughness": { "$ref": "#/definitions/mer" },
        "normal": { "$ref": "#/definitions/normal" }
      }
    }
  },
  "definitions": {
    "color": {
      "title": "Color",
      "description": "This is an RGB 3-channel image (defaults to uniform alpha of 1.0), or an RGBA 4-channel image, or a 4 value array for a uniform color with alpha.",
      "examples": [[255, 255, 255, 255]],
      "oneOf": [
        { "type": "string" },
        {
          "type": "array",
          "items": [
            {
              "title": "Red",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            {
              "title": "Green",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            {
              "title": "Blue",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            {
              "title": "Alpha",
              "type": "integer",
              "default": 255,
              "minimum": 0,
              "maximum": 255
            }
          ]
        }
      ]
    },
    "normal": {
      "title": "Normal Map",
      "description": "This is a 3-channel normal map image (or 4-channel where the 4th channel is ignored). This layer and the \"heightmap\" layer should not both be defined at the same time.",
      "type": "string"
    },
    "heightmap": {
      "title": "Heightmap",
      "description": "1-channel layer image or a single value in this JSON file for a uniform heightmap. This layer and the \"normal\" layer should not both be defined at the same time.",
      "examples": [255],
      "oneOf": [
        { "type": "string" },
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 255
        }
      ]
    },
    "mer": {
      "title": "Metalness Emissive Roughness",
      "description": "This is a 3-channel image (or 4-channel where the 4th channel is ignored) or a 3-value array for a uniform MER. RGB images map Red to Metalness, Green to Emissive, and Blue to Roughness.",
      "examples": [[255, 255, 255]],
      "oneOf": [
        { "type": "string" },
        {
          "type": "array",
          "items": [
            {
              "title": "Red",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            {
              "title": "Green",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            {
              "title": "Blue",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            }
          ]
        }
      ]
    }
  }
}
