{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON schema for a Grasscutter Plugin",
  "type": "object",
  "additionalProperties": true,
  "definitions": {
    "plugin-name": {
      "type": "string",
      "pattern": "^[A-Za-z\\d_.-]+$"
    }
  },
  "required": [
    "name",
    "description",
    "mainClass",
    "api"
  ],
  "properties": {
    "name": {
      "description": "The unique name of plugin.",
      "$ref": "#/definitions/plugin-name"
    },
    "mainClass": {
      "description": "The plugin's initial class file.",
      "type": "string",
      "pattern": "^(?!org\\.bukkit\\.)([a-zA-Z_$][a-zA-Z\\d_$]*\\.)*[a-zA-Z_$][a-zA-Z\\d_$]*$"
    },
    "version": {
      "description": "A plugin revision identifier.",
      "type": [
        "string",
        "number"
      ]
    },
    "api": {
      "description": "The API revision the plugin is using.",
      "type": "number"
    },
    "description": {
      "description": "Human readable plugin summary.",
      "type": "string"
    },
    "author": {
      "description": "The plugin author.",
      "type": "string"
    },
    "authors": {
      "description": "The plugin contributors.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "website": {
      "title": "Website",
      "description": "The URL to the plugin's site",
      "type": "string",
      "format": "uri"
    },
    "loadAfter": {
      "description": "Plugins to load before this plugin.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}