{
    "$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"
    ],
    "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"
            ]
        },
        "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"
            }
        }
    }
}