diff --git a/source/resource/models/entity/1.16.0/model_entity.json b/source/resource/models/entity/1.16.0/model_entity.json new file mode 100644 index 00000000..ca2fdbfb --- /dev/null +++ b/source/resource/models/entity/1.16.0/model_entity.json @@ -0,0 +1,508 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "blockception.minecraft.resource.model.1.14.0", + "additionalProperties": false, + "type": "object", + "title": "Geometry 1.16.0", + "description": "The minecraft resourcepack model schema for 1.16.0", + "required": ["format_version", "minecraft:geometry"], + "definitions": { + "uv": { + "type": "array", + "items": [ + { "type": "number", "title": "X", "description": "The x component of the uv" }, + { "type": "number", "title": "Y", "description": "The y component of the uv" } + ] + }, + "direction_uv": { + "additionalProperties": false, + "type": "object", + "properties": { + "uv": { + "title": "Uv", + "description": "Specifies the uv origin for the face. For this face, it is the upper-left corner, when looking at the face with y being up.", + "$ref": "#/definitions/uv" + }, + "uv_size": { + "title": "Uv size", + "description": "The face maps this many texels from the uv origin. If not specified, the box dimensions are used instead.", + "$ref": "#/definitions/uv" + }, + "material_instance": { + "type": "string", + "title": "Material instance", + "description": "Specifies the UV's for the face that stretches" + } + } + } + }, + "properties": { + "debug": { + "title": "Debug", + "description": "TODO description", + "type": "boolean", + "default": false + }, + "format_version": { + "title": "The 1.16.0 format version", + "type": "string", + "pattern": "^1.16.0$", + "description": "A version that tells minecraft what type of data format can be expected when reading this file." + }, + "minecraft:geometry": { + "type": "array", + "title": "Geometry", + "description": "The collection of geometries", + "minItems": 1, + "items": { + "additionalProperties": false, + "description": "Model specification", + "title": "Model", + "type": "object", + "required": ["description"], + "properties": { + "description": { + "type": "object", + "additionalProperties": false, + "description": "The descriptions of the geometry", + "title": "Description", + "required": ["identifier"], + "properties": { + "identifier": { + "type": "string", + "description": "Entity definition and Client Block definition files refer to this geometry via this identifier.", + "pattern": "^geometry\\.[a-zA-Z0-9_\\-\\.]+$", + "title": "Identifier" + }, + "texture_width": { + "type": "number", + "description": "Assumed width in texels of the texture that will be bound to this geometry.", + "title": "Texture Width" + }, + "texture_height": { + "type": "number", + "description": "Assumed height in texels of the texture that will be bound to this geometry.", + "title": "Texture Height" + }, + "visible_bounds_offset": { + "title": "Visible Bounds Offset", + "description": "Offset of the visibility bounding box from the entity location point (in model space units).", + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number" + } + }, + "visible_bounds_width": { + "type": "number", + "title": "Visible Bounds Width", + "description": "Width of the visibility bounding box (in model space units)." + }, + "visible_bounds_height": { + "type": "number", + "title": "Visible Bounds Height", + "description": "Height of the visible bounding box (in model space units)." + } + } + }, + "bones": { + "title": "Bones", + "type": "array", + "description": "Bones define the 'skeleton' of the mob: the parts that can be animated, and to which geometry and other bones are attached.", + "items": { + "additionalProperties": false, + "type": "object", + "description": "A bones specification", + "required": ["name"], + "properties": { + "binding": { + "title": "Binding", + "description": "useful for items. A molang expression specifying the bone name of the parent skeletal hierarchy that this bone should use as the root transform. Without this field it will look for a bone in the parent entity with the same name as this bone. If both are missing, it will assume a local skeletal hierarchy (via the \"parent\" field). If that is also missing, it will attach to the owning entity's root transform.", + "$ref": "../../../../molang/1.8.0/string.json" + }, + "cubes": { + "title": "Cubes", + "description": "This is the list of cubes associated with this bone.", + "type": "array", + "items": { + "additionalProperties": false, + "type": "object", + "description": "A single cube", + "properties": { + "inflate": { + "type": "number", + "description": "Grow this box by this additive amount in all directions (in model space units), this field overrides the bone's inflate field for this cube only." + }, + "mirror": { + "type": "boolean", + "description": "Mirrors this cube about the unrotated x axis (effectively flipping the east / west faces), overriding the bone's 'mirror' setting for this cube." + }, + "origin": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "This point declares the unrotated lower corner of cube (smallest x/y/z value in model space units)." + } + }, + "pivot": { + "type": "array", + "description": "If this field is specified, rotation of this cube occurs around this point, otherwise its rotation is around the center of the box. Note that in 1.12 this is flipped upside-down, but is fixed in 1.14.", + "title": "Pivot", + "items": [ + { + "type": "number", + "title": "X", + "description": "If this field is specified, rotation of this cube occurs around this point, otherwise its rotation is around the center of the box. Note that in 1.12 this is flipped upside-down, but is fixed in 1.14." + }, + { + "type": "number", + "title": "Y", + "description": "If this field is specified, rotation of this cube occurs around this point, otherwise its rotation is around the center of the box. Note that in 1.12 this is flipped upside-down, but is fixed in 1.14." + }, + { + "type": "number", + "title": "Z", + "description": "If this field is specified, rotation of this cube occurs around this point, otherwise its rotation is around the center of the box. Note that in 1.12 this is flipped upside-down, but is fixed in 1.14." + } + ] + }, + "rotation": { + "title": "Rotation", + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "The cube is rotated by this amount (in degrees, x-then-y-then-z order) around the pivot." + } + }, + "size": { + "title": "Size", + "type": "array", + "description": "The cube extends this amount relative to its origin (in model space units).", + "items": [ + { + "type": "number", + "title": "X", + "description": "The cube extends this amount relative to its origin (in model space units)." + }, + { + "type": "number", + "title": "Y", + "description": "The cube extends this amount relative to its origin (in model space units)." + }, + { + "type": "number", + "title": "Z", + "description": "The cube extends this amount relative to its origin (in model space units)." + } + ] + }, + "uv": { + "title": "Uv", + "description": "This is an alternate per-face uv mapping which specifies each face of the cube. Omitting a face will cause that face to not get drawn.", + "oneOf": [ + { + "additionalProperties": false, + "type": "object", + "properties": { + "north": { + "title": "North", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the x and y axes, and faces the -z axis." + }, + "south": { + "title": "South", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the x and y axes, and faces the z axis" + }, + "east": { + "title": "East", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the z and y axes, and faces the x axis" + }, + "west": { + "title": "West", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the z and y axes, and faces the -x axis" + }, + "up": { + "title": "Up", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the x and z axes, and faces the y axis" + }, + "down": { + "title": "Down", + "$ref": "#/definitions/direction_uv", + "description": "Specifies the UV's for the face that stretches along the x and z axes, and faces the -y axis" + } + } + }, + { + "type": "array", + "items": [ + { "type": "number", "title": "X", "description": "The x component of the uv" }, + { "type": "number", "title": "Y", "description": "The y component of the uv" } + ] + } + ] + } + } + } + }, + "debug": { + "type": "boolean" + }, + "inflate": { + "type": "number", + "description": "Grow this box by this additive amount in all directions (in model space units)." + }, + "locators": { + "description": "This is a list of locators associated with this bone. A locator is a point in model space that tracks a particular bone as the bone animates (by maintaining it's relationship to the bone through the animation).", + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "object", + "required": ["offset", "rotation"], + "properties": { + "offset": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "description": "Position of the locator in model space.", + "items": { + "type": "number", + "description": "Position of the locator in model space." + } + }, + "rotation": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "description": "Rotation of the locator in model space.", + "items": { + "type": "number", + "description": "Rotation of the locator in model space." + } + }, + "ignore_inherited_scale": { + "type": "boolean", + "description": "Discard scale inherited from parent bone." + } + } + }, + { + "type": "array", + "minItems": 3, + "maxItems": 3, + "description": "This is a list of locators associated with this bone. A locator is a point in model space that tracks a particular bone as the bone animates (by maintaining it's relationship to the bone through the animation).", + "items": { + "type": "number", + "description": "Position of the locator in model space." + } + } + ] + } + }, + "mirror": { + "type": "boolean", + "title": "Mirror", + "description": "Mirrors the UV's of the unrotated cubes along the x axis, also causes the east/west faces to get flipped." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Animation files refer to this bone via this identifier." + }, + "parent": { + "type": "string", + "title": "Parent", + "description": "Bone that this bone is relative to. If the parent bone moves, this bone will move along with it." + }, + "pivot": { + "type": "array", + "title": "Pivot", + "description": "The bone pivots around this point (in model space units).", + "items": [ + { "type": "number", "title": "X" }, + { "type": "number", "title": "Y" }, + { "type": "number", "title": "Z" } + ] + }, + "poly_mesh": { + "additionalProperties": false, + "type": "object", + "description": "***EXPERIMENTAL*** A triangle or quad mesh object. Can be used in conjunction with cubes and texture geometry.", + "required": ["polys"], + "properties": { + "normalized_uvs": { + "type": "boolean", + "description": "If true, UVs are assumed to be [0-1]. If false, UVs are assumed to be [0-texture_width] and [0-texture_height] respectively." + }, + "normals": { + "type": "array", + "description": "Vertex normals. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and UVs sections.", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "description": "Vertex normals. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and UVs sections.", + "items": { + "type": "number", + "description": "Vertex normals. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and UVs sections." + } + } + }, + "polys": { + "oneOf": [ + { + "type": "string", + "description": "If not specifying vertex indices, arrays of data must be a list of tris or quads, set by making this property either \"tri_list\" or \"quad_list\"", + "enum": ["tri_list", "quad_list"] + }, + { + "type": "array", + "description": "Poly element indices, as an array of polygons, each an array of either three or four vertices, each an array of indices into positions, normals, and UVs (in that order).", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 4, + "description": "Poly element indices, as an array of polygons, each an array of either three or four vertices, each an array of indices into positions, normals, and UVs (in that order).", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": [ + { + "type": "number", + "description": "The index of the position" + }, + { + "type": "number", + "description": "The index of the normal vertex" + }, + { + "type": "number", + "description": "The index of the uv vertex" + } + ] + } + } + } + ] + }, + "positions": { + "type": "array", + "items": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "Vertex positions for the mesh. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the normals and UVs sections." + } + } + }, + "uvs": { + "type": "array", + "description": "Vertex UVs. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and normals sections.", + "items": { + "type": "array", + "description": "Vertex UVs. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and normals sections.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "number", + "description": "Vertex UVs. Can be either indexed via the \"polys\" section, or be a quad-list if mapped 1-to-1 to the positions and normals sections." + } + } + } + } + }, + "render_group_id": { + "type": "integer", + "minimum": 0 + }, + "rotation": { + "type": "array", + "title": "Rotation", + "description": "This is the initial rotation of the bone around the pivot, pre-animation (in degrees, x-then-y-then-z order).", + "items": [ + { "type": "number", "title": "X", "description": "in degrees" }, + { "type": "number", "title": "Y", "description": "in degrees" }, + { "type": "number", "title": "Z", "description": "in degrees" } + ] + }, + "texture_meshes": { + "type": "array", + "title": "Texture meshes", + "description": "***EXPERIMENTAL*** Adds a mesh to the bone's geometry by converting texels in a texture into boxes", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["texture"], + "properties": { + "local_pivot": { + "type": "array", + "description": "The pivot point on the texture (in *texture space* not entity or bone space) of the texture geometry", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "The pivot point on the texture (in *texture space* not entity or bone space) of the texture geometry" + } + }, + "position": { + "type": "array", + "description": "The position of the pivot point after rotation (in *entity space* not texture or bone space) of the texture geometry", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "The position of the pivot point after rotation (in *entity space* not texture or bone space) of the texture geometry" + } + }, + "rotation": { + "type": "array", + "description": "The rotation (in degrees) of the texture geometry relative to the offset", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "The rotation (in degrees) of the texture geometry relative to the offset" + } + }, + "scale": { + "type": "array", + "description": "The scale (in degrees) of the texture geometry relative to the offset", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "description": "The scale (in degrees) of the texture geometry relative to the offset" + } + }, + "texture": { + "type": "string", + "description": "The friendly-named texture to use." + } + } + } + } + } + } + }, + "cape": { + "title": "Cape", + "description": "UNDOCUMENTATED", + "type": "string" + } + } + } + } + } +} diff --git a/source/resource/models/entity/model_entity.json b/source/resource/models/entity/model_entity.json index ba3ac82d..3497e36e 100644 --- a/source/resource/models/entity/model_entity.json +++ b/source/resource/models/entity/model_entity.json @@ -3,7 +3,7 @@ "$id": "blockception.minecraft.resource.model", "examples": [ { - "format_version": "1.12.0", + "format_version": "1.16.0", "minecraft:geometry": [ { "description": { @@ -34,6 +34,10 @@ { "if": { "properties": { "format_version": { "type": "string", "const": "1.14.0" } } }, "then": { "$ref": "./1.14.0/model_entity.json" } + }, + { + "if": { "properties": { "format_version": { "type": "string", "const": "1.16.0" } } }, + "then": { "$ref": "./1.16.0/model_entity.json" } } ] }