{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "blockception.minecraft.resource.texture.aseprite_flipbook",
  "additionalProperties": false,
  "description": "The file that specifies Aseprite/libresprite flipbook animation.",
  "title": "Aseprite Flipbook File",
  "type": "object",
  "required": ["meta", "frames"],
  "properties": {
    "meta": {
      "title": "Meta",
      "type": "object",
      "description": "The meta data of the flipbook.",
      "additionalProperties": true,
      "required": ["size", "image"],
      "properties": {
        "size": {
          "type": "object",
          "title": "Size",
          "description": "The size of the flipbook sprite sheet.",
          "required": ["w", "h"],
          "examples": [
            {
              "w": 16,
              "h": 16
            }
          ],
          "properties": {
            "w": {
              "title": "Width",
              "description": "The width of the sprite sheet.",
              "type": "integer",
              "default": 16
            },
            "h": {
              "title": "Height",
              "description": "The height of the sprite sheet.",
              "type": "integer",
              "default": 16
            }
          }
        },
        "image": {
          "title": "Image",
          "description": "The path to the sprite sheet. The value is required, but not used.",
          "type": "string"
        }
      }
    },
    "frames": {
      "title": "Frames",
      "type": "array",
      "description": "The frames of the flipbook.",
      "items": {
        "title": "Frame",
        "description": "A frame of the flipbook.",
        "type": "object",
        "additionalProperties": true,
        "required": ["duration", "frame"],
        "properties": {
          "duration": {
            "title": "Duration",
            "description": "The duration of the frame in milliseconds.",
            "type": "integer",
            "minimum": 1
          },
          "frame": {
            "title": "Frame",
            "type": "object",
            "description": "The position of the frame in the sprite sheet (UV).",
            "required": ["x", "y"],
            "examples": [
              {
                "x": 0,
                "y": 0
              }
            ],
            "properties": {
              "x": {
                "title": "X",
                "type": "integer",
                "description": "The x position of the frame in the sprite sheet.",
                "minimum": 0
              },
              "y": {
                "title": "Y",
                "type": "integer",
                "description": "The y position of the frame in the sprite sheet.",
                "minimum": 0
              }
            }
          }
        }
      }
    }
  }
}
