{
  "$id": "blockception.minecraft.resource.particle.1.10.0",
  "type": "object",
  "additionalProperties": false,
  "description": "A particle definition file",
  "title": "Particle 1.8.0",
  "properties": {
    "format_version": {
      "type": "string",
      "const": "1.10.0",
      "description": "A version that tells minecraft what type of data format can be expected when reading this file.",
      "title": "Format Version"
    },
    "particle_effect": {
      "type": "object",
      "additionalProperties": false,
      "description": "UNDOCUMENTED: particle effect",
      "title": "Particle Effect",
      "properties": {
        "description": {
          "additionalProperties": false,
          "type": "object",
          "required": ["identifier", "basic_render_parameters"],
          "properties": {
            "identifier": {
              "type": "string",
              "description": "UNDOCUMENTED: identifier",
              "title": "Identifier",
              "$ref": "../../../general/particle/identifier.json"
            },
            "basic_render_parameters": {
              "additionalProperties": false,
              "type": "object",
              "properties": {
                "material": {
                  "type": "string",
                  "examples": ["particles_alpha", "particles_blend"],
                  "description": " Minecraft material to use for emitter",
                  "title": "Material"
                },
                "texture": { "type": "string", "pattern": "^.+$", "description": "Minecraft texture to use for emitter", "title": "Texture" }
              },
              "description": "UNDOCUMENTED: basic render parameters",
              "title": "Basic Render Parameters"
            }
          },
          "description": "UNDOCUMENTED: description",
          "title": "Description"
        },
        "curves": {
          "title": "Curves",
          "description": "Curves are interpolation values, with inputs from 0 to 1, and outputs based on the curve. The result of the curve is a MoLang variable of the same name that can be referenced in MoLang in components. For each rendering frame for each particle, the curves are evaluated and the result is placed in a MoLang variable of the name of the curve.",
          "type": "object",
          "propertyNames": { "pattern": "^(v|variable)\\.[a-zA-z0-9]+$" },
          "additionalProperties": {
            "type": "object",
            "additionalProperties": false,
            "title": "Curve",
            "description": "UNDOCUMENTED",
            "$comment": "UNDOCUMENTED",
            "properties": {
              "input": { "$ref": "../../../molang/number.json", "title": "Input", "description": "What is the input value to use" },
              "nodes": {
                "description": "Control nodes for curve.  These are assumed to be equally, used Object for bezier_chain",
                "title": "Nodes",
                "oneOf": [
                  { "minItems": 1, "type": "array", "items": { "$ref": "../../../molang/number.json" } },
                  {
                    "type": "object",
                    "propertyNames": { "pattern": "(^[\\-0-9]+$|^[\\-0-9]+\\.[\\-0-9]+$)" },
                    "additionalProperties": { "type": "object", "properties": {} }
                  }
                ]
              },
              "type": {
                "type": "string",
                "title": "Type",
                "description": "The type of curve",
                "enum": ["linear", "bezier", "bezier_chain", "catmull_rom"]
              },
              "horizontal_range": { "type": "string", "title": "Horizontal Range", "description": "What is the range the input is mapped onto" }
            }
          }
        },
        "components": {
          "additionalProperties": false,
          "type": "object",
          "description": "The particle components.",
          "title": "Components",
          "properties": {
            "minecraft:emitter_initialization": { "$ref": "./components/minecraft.emitter_initialization.json" },
            "minecraft:emitter_lifetime_events": { "$ref": "./components/minecraft.emitter_lifetime_events.json" },
            "minecraft:emitter_lifetime_expression": { "$ref": "./components/minecraft.emitter_lifetime_expression.json" },
            "minecraft:emitter_lifetime_once": { "$ref": "./components/minecraft.emitter_lifetime_once.json" },
            "minecraft:emitter_lifetime_looping": { "$ref": "./components/minecraft.emitter_lifetime_looping.json" },
            "minecraft:emitter_local_space": { "$ref": "./components/minecraft.emitter_local_space.json" },
            "minecraft:emitter_rate_instant": { "$ref": "./components/minecraft.emitter_rate_instant.json" },
            "minecraft:emitter_rate_manual": { "$ref": "./components/minecraft.emitter_rate_manual.json" },
            "minecraft:emitter_rate_steady": { "$ref": "./components/minecraft.emitter_rate_steady.json" },
            "minecraft:emitter_shape_box": { "$ref": "./components/minecraft.emitter_shape_box.json" },
            "minecraft:emitter_shape_custom": { "$ref": "./components/minecraft.emitter_shape_custom.json" },
            "minecraft:emitter_shape_disc": { "$ref": "./components/minecraft.emitter_shape_disc.json" },
            "minecraft:emitter_shape_entity_aabb": { "$ref": "./components/minecraft.emitter_shape_entity_aabb.json" },
            "minecraft:emitter_shape_point": { "$ref": "./components/minecraft.emitter_shape_point.json" },
            "minecraft:emitter_shape_sphere": { "$ref": "./components/minecraft.emitter_shape_sphere.json" },
            "minecraft:particle_appearance_billboard": { "$ref": "./components/minecraft.particle_appearance_billboard.json" },
            "minecraft:particle_appearance_tinting": { "$ref": "./components/minecraft.particle_appearance_tinting.json" },
            "minecraft:particle_appearance_lighting": { "$ref": "./components/minecraft.particle_appearance_lighting.json" },
            "minecraft:particle_expire_if_not_in_blocks": { "$ref": "./components/minecraft.particle_expire_if_not_in_blocks.json" },
            "minecraft:particle_initialization": { "$ref": "./components/minecraft.particle_initialization.json" },
            "minecraft:particle_initial_speed": { "$ref": "./components/minecraft.particle_initial_speed.json" },
            "minecraft:particle_initial_spin": { "$ref": "./components/minecraft.particle_initial_spin.json" },
            "minecraft:particle_lifetime_expression": { "$ref": "./components/minecraft.particle_lifetime_expression.json" },
            "minecraft:particle_lifetime_events": { "$ref": "./components/minecraft.particle_lifetime_events.json" },
            "minecraft:particle_kill_plane": { "$ref": "./components/minecraft.particle_kill_plane.json" },
            "minecraft:particle_motion_collision": { "$ref": "./components/minecraft.particle_motion_collision.json" },
            "minecraft:particle_motion_dynamic": { "$ref": "./components/minecraft.particle_motion_dynamic.json" },
            "minecraft:particle_motion_parametric": { "$ref": "./components/minecraft.particle_motion_parametric.json" }
          }
        },
        "events": {
          "type": "object",
          "description": "UNDOCUMENTED: events",
          "title": "Events",
          "additionalProperties": {
            "description": "UNDOCUMENTED",
            "$comment": "UNDOCUMENTED",
            "title": "Event",
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "particle_effect": {
                "title": "Particle Effect",
                "description": "UNDOCUMENTED",
                "$comment": "UNDOCUMENTED",
                "properties": {
                  "effect": { "type": "string", "description": "UNDOCUMENTED: effect", "title": "Effect" },
                  "type": { "type": "string", "description": "UNDOCUMENTED: type", "title": "Type" }
                }
              },
              "sound_effect": {
                "title": "Sound effect",
                "description": "UNDOCUMENTED",
                "$comment": "UNDOCUMENTED",
                "properties": {
                  "event_name": { "type": "string", "description": "UNDOCUMENTED: effect", "title": "Event name" }
                }
              }
            }
          }
        }
      }
    }
  }
}
