{
  "$id": "blockception.minecraft.behavior.blocks.minecraft.placement_filter",
  "title": "Placement Filter",
  "type": "object",
  "properties": {
    "conditions": {
      "title": "Conditions",
      "description": "List of conditions where the block can be placed/survive. Limited to 64 conditions. Each condition is a JSON Object that must contain at least one (and can contain both) of the parameters allowed_faces or block_filter as shown below.",
      "examples": [
        {
          "allowed_faces": ["up"],
          "block_filter": ["grass"]
        }
      ],
      "type": "array",
      "minItems": 1,
      "items": {
        "title": "Placement Filter",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "allowed_faces": {
            "title": "Allowed Faces",
            "type": "array",
            "description": "List of any of the following strings describing which face(s) this block can be placed on: \"up\", \"down\", \"north\", \"south\", \"east\", \"west\", \"side\", \"all\". Limited to 6 faces.",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": ["up", "down", "north", "south", "east", "west", "side", "all"]
            }
          },
          "block_filter": {
            "title": "Block Filter",
            "type": "array",
            "description": "List of blocks that this block can be placed against in the \"allowed_faces\" direction. Limited to 64 blocks. Each block in this list can either be specified as a String (block name) or as a BlockDescriptor. A BlockDescriptor is an object that allows you to reference a block (or multiple blocks) based on its tags, or based on its name and states. The fields of a BlockDescriptor are described below.",
            "items": {
              "title": "Block Filter",
              "description": "[Experimental]",
              "$ref": "../../../../general/block/reference.json"
            }
          }
        }
      }
    }
  }
}
