{
  "$id": "blockception.minecraft.behavior.animation_controller.1.8.0",
  "definitions": {
    "animationspec": {
      "anyOf": [
        {
          "title": "Animation Specification",
          "description": "A single string that specifies which animation there are",
          "type": "string"
        },
        {
          "type": "object",
          "title": "Animation Specification",
          "description": "A object specification on when to animate",
          "maxProperties": 1,
          "minProperties": 1,
          "additionalProperties": {
            "$ref": "../../../molang/string.json"
          }
        }
      ]
    },
    "particle_effect_spec": {
      "additionalProperties": false,
      "type": "object",
      "required": ["effect"],
      "properties": {
        "bind_to_actor": {
          "type": "boolean",
          "title": "Bind To Actor",
          "description": "Set to false to have the effect spawned in the world without being bound to an actor (by default an effect is bound to the actor).",
          "const": false
        },
        "effect": {
          "type": "string",
          "title": "Effect",
          "description": "The name of a particle effect that should be played"
        },
        "locator": {
          "type": "string",
          "title": "Locator",
          "description": "The name of a locator on the actor where the effect should be located"
        },
        "pre_effect_script": {
          "type": "string",
          "title": "Pre Effect Script",
          "description": "A molang script that will be run when the particle emitter is initialized"
        }
      }
    },
    "commands": {
      "type": "string",
      "description": "The event or commands to execute",
      "title": "Commands",
      "oneOf": [
        { "pattern": "^@s .+$", "title": "Event" },
        { "pattern": "^/.+$", "title": "Command" },
        { "pattern": "^.+;$", "title": "Molang" }
      ]
    }
  },
  "type": "object",
  "title": "Animation Controller 1.8.0",
  "description": "Animation controller for behaviors 1.8.0",
  "required": ["format_version", "animation_controllers"],
  "additionalProperties": false,
  "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."
    },
    "animation_controllers": {
      "type": "object",
      "title": "Animation Controllers Schema",
      "description": "The animation controllers schema for 1.8.0",
      "propertyNames": {
        "pattern": "^controller\\.animation\\.[a-z\\.]+",
        "examples": ["controller.animation.example", "controller.animation.example.foo"]
      },
      "additionalProperties": {
        "additionalProperties": false,
        "type": "object",
        "title": "A Animation Controller",
        "description": "A single animation controller 1.8.0",
        "required": ["states"],
        "minProperties": 1,
        "properties": {
          "states": {
            "title": "States",
            "description": "The states of this animation controller",
            "propertyNames": { "pattern": "[a-z\\.]+" },
            "minProperties": 1,
            "additionalProperties": {
              "additionalProperties": false,
              "title": "Animation State",
              "description": "Animation state",
              "type": "object",
              "properties": {
                "animations": {
                  "title": "Animations",
                  "description": "The animations definition for 1.8.0",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/animationspec",
                    "description": "The animation key to play, defined in the entity",
                    "title": "Animation"
                  }
                },
                "on_entry": {
                  "type": "array",
                  "description": "Events, commands or transitions to preform",
                  "title": "On Entry",
                  "items": {
                    "$ref": "#/definitions/commands"
                  }
                },
                "on_exit": {
                  "type": "array",
                  "description": "Events, commands or transitions to preform",
                  "title": "On Exit",
                  "items": {
                    "$ref": "#/definitions/commands"
                  }
                },
                "transitions": {
                  "title": "Transition",
                  "description": "The transition definition for 1.8.0",
                  "minProperties": 1,
                  "type": "array",
                  "items": {
                    "title": "Transition",
                    "description": "A transition to another state",
                    "type": "object",
                    "examples": [{ "default": "query.is_chested" }],
                    "additionalProperties": {
                      "$ref": "../../../molang/string.json"
                    },
                    "minProperties": 1,
                    "maxProperties": 1
                  }
                }
              }
            }
          },
          "initial_state": {
            "title": "Initial State",
            "description": "The state to start with, if not specified state at position 0 in the array is used",
            "type": "string",
            "examples": ["default"]
          }
        }
      }
    }
  }
}
