{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "blockception.minecraft.materials",
  "type": "object",
  "title": "Material",
  "description": "A collection of material specifications for the render engine of minecraft.",
  "$comment": "UNDOCUMENTED",
  "additionalProperties": false,
  "required": ["materials"],
  "definitions": {
    "DefinesSpecification": {
      "type": "array",
      "title": "Defines",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "items": {
        "type": "string",
        "title": "Definition",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "enum": [
          "ALLOW_FADE",
          "ALPHA_TEST",
          "ALWAYS_LIT",
          "ARRAY_TEXTURE_0",
          "AS_ENTITY_RENDERER",
          "ATLAS_TEXTURE",
          "BLEND",
          "BLUR_STEPS 1",
          "BLUR_STEPS 10",
          "BLUR_STEPS 11",
          "BLUR_STEPS 12",
          "BLUR_STEPS 2",
          "BLUR_STEPS 3",
          "BLUR_STEPS 4",
          "BLUR_STEPS 5",
          "BLUR_STEPS 6",
          "BLUR_STEPS 7",
          "BLUR_STEPS 8",
          "BLUR_STEPS 9",
          "Blending",
          "COLOR_BASED",
          "COLOR_FROMTEX",
          "COLOR_MULTIPLIER",
          "COLOR_SECOND_TEXTURE",
          "COMFORT_MODE",
          "DISABLE_TINTING",
          "DisableCulling",
          "EFFECTS_OFFSET",
          "ENABLE_CURRENT_ALPHA_MULTIPLY",
          "ENABLE_FOG",
          "ENABLE_LIGHT",
          "ENABLE_VERTEX_TINT_MASK",
          "END_PORTAL",
          "FLIP_OCCLUSION",
          "FOG",
          "FORCE_DEPTH_ZERO",
          "GLINT",
          "GRADIENT_2PT",
          "GRADIENT_3PTSYMM",
          "GRADIENT_FROMTEX",
          "GRADIENT_LINEAR",
          "GRADIENT_RADIAL",
          "HAS_MASK",
          "IGNORE_CURRENTCOLOR",
          "INVENTORY",
          "ITEM_IN_HAND",
          "LINE_STRIP",
          "LOW_PRECISION",
          "MASKED_MULTITEXTURE",
          "MSDF",
          "MULTIPLICATIVE_TINT",
          "MULTIPLICATIVE_TINT_COLOR",
          "MULTI_COLOR_TINT",
          "NO_OCCLUSION",
          "NO_TEXTURE",
          "NO_VARIETY",
          "SEASONS",
          "SEASONS_FAR",
          "SMOOTH",
          "SNOW",
          "STEREO_LEFT_EYE_ONLY",
          "TEXEL_AA",
          "TINTED",
          "TINTED_ALPHA_TEST",
          "UI_ENTITY",
          "USE_COLOR_BLEND",
          "USE_COLOR_MASK",
          "USE_EMISSIVE",
          "USE_LIGHTING",
          "USE_MASK",
          "USE_MULTITEXTURE",
          "USE_ONLY_EMISSIVE",
          "USE_OVERLAY",
          "USE_SKINNING",
          "USE_STEREO_TEXTURE_ARRAY",
          "USE_UV_ANIM",
          "WINDOWSMR_MAGICALPHA"
        ]
      }
    },
    "FailOperation": {
      "type": "string",
      "title": "Fail Operation",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "enum": ["Keep", "Replace"]
    },
    "FaceSpecification": {
      "type": "object",
      "title": "Face",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "additionalProperties": false,
      "properties": {
        "stencilDepthFailOp": {
          "type": "string",
          "title": "Stencil Depth Fail Operation",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "$ref": "#/definitions/FailOperation"
        },
        "stencilFailOp": {
          "type": "string",
          "title": "Stencil Fail Operation",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "$ref": "#/definitions/FailOperation"
        },
        "stencilFunc": {
          "type": "string",
          "title": "Stencil Function",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "enum": ["Always", "Equal", "NotEqual"]
        },
        "stencilPass": { "type": "string", "title": "Stencil Pass", "description": "UNDOCUMENTED.", "$comment": "UNDOCUMENTED", "enum": ["Replace"] },
        "stencilPassOp": {
          "type": "string",
          "title": "Stencil Depth Fail Operation",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "$ref": "#/definitions/FailOperation"
        }
      }
    },
    "StatesSpecification": {
      "type": "array",
      "title": "States",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "items": {
        "type": "string",
        "title": "State",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "enum": [
          "Blending",
          "DisableAlphaWrite",
          "DisableColorWrite",
          "DisableCulling",
          "DisableDepthTest",
          "DisableDepthWrite",
          "EnableAlphaToCoverage",
          "EnableStencilTest",
          "InvertCulling",
          "StencilWrite"
        ]
      }
    },
    "SamplerStatesSpecification": {
      "type": "array",
      "title": "Sampler States",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "items": {
        "type": "object",
        "title": "Sample State",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "additionalProperties": false,
        "properties": {
          "samplerIndex": {
            "type": "integer",
            "title": "Sample State",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "textureFilter": {
            "type": "string",
            "title": "Texture Filter",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["Point", "Bilinear", "TexelAA"]
          },
          "textureWrap": {
            "type": "string",
            "title": "Texture Wrap",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["Repeat", "Clamp"]
          }
        }
      }
    },
    "VertexFieldsSpecification": {
      "type": "array",
      "title": "Vertex Fields",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "items": {
        "type": "object",
        "title": "Vertex Field",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "additionalProperties": false,
        "properties": {
          "field": {
            "type": "string",
            "title": "Vertex Field",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          }
        }
      }
    },
    "VariantSpecification": {
      "type": "array",
      "title": "Variants",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "items": {
        "type": "object",
        "title": "Variant",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "propertyNames": { "enum": ["fading", "fog", "fog.underwater", "lit", "skinning", "skinning_color", "underlava", "underwater"] },
        "additionalProperties": {
          "title": "Variant Item",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "$ref": "#/definitions/VariantsItemSpecificaiton"
        }
      }
    },
    "VariantsItemSpecificaiton": {
      "type": "object",
      "title": "Variant Item",
      "description": "UNDOCUMENTED.",
      "$comment": "UNDOCUMENTED",
      "additionalProperties": false,
      "properties": {
        "+defines": { "title": "Defines", "description": "UNDOCUMENTED, Add definitions???.", "$ref": "#/definitions/DefinesSpecification" },
        "vertexFields": {
          "title": "Vertex Fields",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED",
          "$ref": "#/definitions/VertexFieldsSpecification"
        },
        "states": { "title": "States", "description": "UNDOCUMENTED, start states???.", "$ref": "#/definitions/StatesSpecification" },
        "+states": { "title": "States", "description": "UNDOCUMENTED, Add additional states???.", "$ref": "#/definitions/StatesSpecification" },
        "-states": { "title": "States", "description": "UNDOCUMENTED, remove additional states???.", "$ref": "#/definitions/StatesSpecification" }
      }
    }
  },
  "properties": {
    "materials": {
      "type": "object",
      "title": "Materials",
      "description": "The collection of materials, each property key is the identification key of the material, and what it implements if : are used.",
      "$comment": "UNDOCUMENTED",
      "required": ["version"],
      "properties": {
        "version": {
          "type": "string",
          "const": "1.0.0",
          "title": "Version",
          "description": "UNDOCUMENTED.",
          "$comment": "UNDOCUMENTED"
        }
      },
      "additionalProperties": {
        "title": "Material Definitions",
        "description": "UNDOCUMENTED.",
        "$comment": "UNDOCUMENTED",
        "additionalProperties": false,
        "type": "object",
        "properties": {
          "alphaDst": {
            "type": "string",
            "title": "Alpha Distance",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["DestColor", "OneMinusSrcAlpha"]
          },
          "backFace": { "title": "Back Face", "description": "UNDOCUMENTED.", "$comment": "UNDOCUMENTED", "$ref": "#/definitions/FaceSpecification" },
          "blendDst": {
            "type": "string",
            "title": "Blend Distance",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["SourceAlpha", "OneMinusSrcAlpha", "OneMinusSrcColor", "SourceColor", "Zero", "One"]
          },
          "blendSrc": {
            "type": "string",
            "title": "Blend Source",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["DestColor", "One", "OneMinusDestColor", "SourceAlpha", "SourceColor"]
          },
          "defines": {
            "title": "Defines",
            "description": "UNDOCUMENTED, sets or starts definitions???.",
            "$ref": "#/definitions/DefinesSpecification"
          },
          "+defines": { "title": "Defines", "description": "UNDOCUMENTED, Add definitions???.", "$ref": "#/definitions/DefinesSpecification" },
          "-defines": { "title": "Defines", "description": "UNDOCUMENTED, removes definitions???.", "$ref": "#/definitions/DefinesSpecification" },
          "depthBias": {
            "type": "number",
            "title": "Depth Bias",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "depthBiasOGL": {
            "type": "number",
            "title": "Depth Bias OGL",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "depthFunc": {
            "type": "string",
            "title": "Depth Function",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["LessEqual", "Always", "Equal"]
          },
          "fragmentShader": {
            "type": "string",
            "title": "Fragment Shader",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "pattern": "^shaders/.*\\.fragment$"
          },
          "frontFace": {
            "title": "Front Face",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "$ref": "#/definitions/FaceSpecification"
          },
          "isAnimatedTexture": {
            "type": "integer",
            "title": "Is Animated Texture",
            "description": "UNDOCUMENTED, think its a boolean value as a number, so 1 and 0????."
          },
          "msaaSupport": {
            "type": "string",
            "title": "MSAA Support",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["Both", "MSAA"]
          },
          "primitiveMode": {
            "type": "string",
            "title": "Primitive Mode",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "enum": ["Line"]
          },
          "samplerStates": {
            "title": "Sampler States",
            "description": "UNDOCUMENTED, set or start samplerStates???.",
            "$ref": "#/definitions/SamplerStatesSpecification"
          },
          "+samplerStates": {
            "title": "Sampler States",
            "description": "UNDOCUMENTED, Add samplerStates???.",
            "$ref": "#/definitions/SamplerStatesSpecification"
          },
          "slopeScaledDepthBias": {
            "type": "number",
            "title": "Slope Scaled Depth Bias",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "slopeScaledDepthBiasOGL": {
            "type": "number",
            "title": "Slope Scaled Depth Bias OGL",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "states": { "title": "States", "description": "UNDOCUMENTED, start states???.", "$ref": "#/definitions/StatesSpecification" },
          "+states": { "title": "States", "description": "UNDOCUMENTED, Add additional states???.", "$ref": "#/definitions/StatesSpecification" },
          "-states": { "title": "States", "description": "UNDOCUMENTED, remove additional states???.", "$ref": "#/definitions/StatesSpecification" },
          "stencilRef": {
            "type": "integer",
            "title": "Stencil Ref",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "stencilRefOverride": {
            "type": "integer",
            "title": "Stencil Ref Override",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "stencilReadMask": {
            "type": "integer",
            "title": "Stencil Read Mask",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "stencilWriteMask": {
            "type": "integer",
            "title": "Stencil Write Mask",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED"
          },
          "variants": { "title": "Variants", "description": "UNDOCUMENTED, sets the variants?.", "$ref": "#/definitions/VariantSpecification" },
          "+variants": { "title": "Variants", "description": "UNDOCUMENTED, adds variants?.", "$ref": "#/definitions/VariantSpecification" },
          "vertexFields": {
            "title": "Vertex Fields",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "$ref": "#/definitions/VertexFieldsSpecification"
          },
          "vertexShader": {
            "type": "string",
            "title": "Vertex Shader",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "pattern": "^shaders/.*\\.vertex$"
          },
          "vrGeometryShader": {
            "type": "string",
            "title": "VR Geometry Shader",
            "description": "UNDOCUMENTED.",
            "$comment": "UNDOCUMENTED",
            "pattern": "^shaders/.*\\.geometry$"
          }
        }
      }
    }
  }
}
