{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "blockception.minecraft.resource.block_culling",
  "title": "Block Culling",
  "description": "A resource pack file that helps the system determine how to change the appearance of this block.",
  "type": "object", 
  "additionalProperties": false,
  "properties": {
    "format_version": { "$ref": "../../general/format_version.json" },
    "minecraft:block_culling_rules": {
      "title": "Block Culling Rules",
      "description": "JSON container used for descriptions, especially the identifier for the name of the culled version of the block.",
      "type": "object", 
      "additionalProperties": false,
      "properties": {
        "description": {
          "title": "Description",
          "description": "Contains the identifier used by minecraft:geometry block components to refer to this culling data",
          "type": "object", 
          "additionalProperties": false,
          "properties": {
            "identifier": {
              "$ref": "../../general/block_culling/identifier.json",
              "description": "Sets the identifier for this rule's description.",
              "title": "Identifier"
            }
          }
        },
        "rules": {
          "title": "Rules",
          "description": "List of all components used to identify geometry parts used in culling.",
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/definitions/rule"
          }
        }
      }
    }
  },
  "definitions": {
    "rule": {
      "title": "Rule",
      "description": "The rules that specifies a \"geometry_part\" and \"direction\"",
      "type": "object", 
      "additionalProperties": false,
      "properties": {
        "geometry_part": {
          "title": "Geometry Part",
          "description": "Specifies the bone, cube, and face that the block will be culled. The cube and face fields are optional to allow culling a specific face. Omitting these fields will cull the whole bone.",
          "type": "object", 
          "additionalProperties": false,
          "properties": {
            "bone": {
              "title": "Bone",
              "description": "The bone within the geometry part",
              "type": "string"
            },
            "cube": {
              "title": "Cube",
              "description": "The cube within the geometry part",
              "type": "integer", 
              "minimum": 0
            },
            "face": {
              "title": "Face",
              "description": "The face within the geometry part",
              "type": "string",
              "enum": ["up", "down", "north", "south", "east", "west"]
            }
          }
        },
        "direction": {
          "title": "Direction",
          "description": "Specifies the direction of the neighbor block to check for culling. This direction rotates with a block's Transform component.",
          "type": "string",
          "enum": ["up", "down", "north", "south", "east", "west"] //TODO: Check if "side" and "all" work here too
        }
      }
    }
  },
  "examples": [
    {
      "format_version": "1.20.60",
      "minecraft:block_culling_rules": {
        "description": {
          "identifier": ":"
        },
        "rules": [
          {
            "part": {
              "bone": "",
              "cube": 0,
              "face": ""
            }
          }
        ]
      }
    }
  ]
}
