{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "definitions": {
    "pack_config": {
      "properties": {
        "description": {
          "description": "Description of the pack. Overwrites project description",
          "type": "string"
        },
        "load": {
          "description": "Load and merge existing packs",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "description": "Name of the pack. Overwrites project name",
          "type": "string"
        },
        "pack_format": {
          "default": 6,
          "description": "Pack version",
          "minimum": 0,
          "type": "integer"
        },
        "render": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Groups of files that will be processed with templates",
          "type": "object"
        },
        "zipped": {
          "description": "Whether the pack should be zipped",
          "type": "boolean"
        }
      },
      "type": "object"
    }
  },
  "description": "Beet project config",
  "properties": {
    "author": {
      "description": "Project author. Included in pack.mcmeta",
      "type": "string"
    },
    "data_pack": {
      "$ref": "#/definitions/pack_config",
      "description": "Datapack config"
    },
    "description": {
      "description": "Project description. Included in pack.mcmeta",
      "type": "string"
    },
    "directory": {
      "description": "Root directory of the project",
      "type": "string"
    },
    "extend": {
      "description": "List of project config files to inherit from",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "ignore": {
      "description": "List of paths whose modification should be ignored by the watch command",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "meta": {
      "description": "Storage for during the build process. Also contains plugin config",
      "properties": {
        "babelbox": {
          "$ref": "plugins/babelbox.json",
          "description": "babelbox plugin settings"
        },
        "format_json": {
          "$ref": "contrib/format_json.json",
          "description": "format_json plugin settings"
        },
        "function_header": {
          "$ref": "contrib/function_header.json",
          "description": "function_header plugin settings"
        },
        "generate_format": {
          "description": "Default location of generated files",
          "type": "string"
        },
        "generate_namespace": {
          "description": "Default namespace of generated files",
          "type": "string"
        },
        "generate_prefix": {
          "description": "Default prefix of generated files",
          "type": "string"
        },
        "generate_scoreboard": {
          "description": "Scoreboards objectives to generate",
          "patternProperties": {
            ".*": {
              "$ref": "minecraft/scoreboard_criteria.json",
              "description": "Objective name and its criteria"
            }
          },
          "type": "object"
        },
        "hangman": {
          "$ref": "contrib/hangman.json",
          "description": "hangman plugin settings"
        },
        "lantern_load": {
          "$ref": "contrib/lantern_load.json",
          "description": "lantern_load plugin settings"
        },
        "mcanitexgen": {
          "$ref": "plugins/mcanitexgen.json",
          "description": "mcanitexgen plugin settings"
        },
        "render": {
          "$ref": "contrib/render.json",
          "description": "render plugin settings"
        },
        "sandstone": {
          "$ref": "contrib/sandstone.json",
          "description": "sandstone plugin settings"
        },
        "scoreboard": {
          "$ref": "contrib/scoreboard.json",
          "description": "scoreboard plugin settings"
        }
      },
      "type": "object"
    },
    "name": {
      "description": "Project name",
      "type": "string"
    },
    "output": {
      "description": "Output directory",
      "directory": "Generated files will be put here",
      "type": "string"
    },
    "pipeline": {
      "description": "The plugin pipeline",
      "items": {
        "anyOf": [
          {
            "const": "beet.contrib.babelbox",
            "description": "Loads translations from csv files (minimal built-in implementation)"
          },
          {
            "const": "beet.contrib.dundervar",
            "description": "Jinja extension for turning '__foo__' into '{{ foo }}'"
          },
          {
            "const": "beet.contrib.format_json",
            "description": "Format json files"
          },
          {
            "const": "beet.contrib.function_header",
            "description": "Automatically adds a header to functions"
          },
          {
            "const": "beet.contrib.hangman",
            "description": "Indentation-based syntactic extensions for functions"
          },
          {
            "const": "beet.contrib.inline_function",
            "description": "Jinja extension for declaring functions inline"
          },
          {
            "const": "beet.contrib.inline_function_tag",
            "description": "Jinja extension for declaring function tags inline"
          },
          {
            "const": "beet.contrib.lantern_load",
            "description": "Adds Lantern Load runtime dependencies"
          },
          {
            "const": "beet.contrib.minify_function",
            "description": "Minifies function files"
          },
          {
            "const": "beet.contrib.minify_json",
            "description": "Minifies json files"
          },
          {
            "const": "beet.contrib.relative_function_path",
            "description": "Resolves relative function paths within a namespace"
          },
          {
            "const": "beet.contrib.render",
            "description": "Invokes the built-in template renderer"
          },
          {
            "const": "beet.contrib.sandstone",
            "description": "Builds a sandstone project"
          },
          {
            "const": "beet.contrib.scoreboard",
            "description": "Adds generated scoreboards to the data pack"
          },
          {
            "const": "beet.contrib.template_context",
            "description": "Exposes the beet context in templates"
          },
          {
            "const": "beet.contrib.yellow_shulker_box",
            "description": "Includes the yellow shulker box loot table"
          },
          {
            "const": "babelbox.integration.beet",
            "description": "Loads translations from csv files (Full-featured implementation, requires https://pypi.org/project/babelbox/)"
          },
          {
            "const": "mcanitexgen.integration.beet",
            "description": "Generates .mcmeta files for animated textures"
          },
          {
            "description": "Custom plugin",
            "type": "string"
          },
          {
            "$ref": "#",
            "description": "Nested beet project configuration"
          }
        ]
      },
      "type": "array",
      "uniqueItems": true
    },
    "require": {
      "description": "List of plugins running before the bootstrap plugin",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "resource_pack": {
      "$ref": "#/definitions/pack_config",
      "description": "Resourcepack config"
    },
    "templates": {
      "description": "List of directories containing rendering templates",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "version": {
      "description": "Project version. Included in pack.mcmeta",
      "type": "string"
    },
    "whitelist": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "type": "object"
}