diff --git a/source/resource/textures/texture_set.json b/source/resource/textures/texture_set.json index 4135c06e..e8632b34 100644 --- a/source/resource/textures/texture_set.json +++ b/source/resource/textures/texture_set.json @@ -3,72 +3,110 @@ "$id": "blockception.minecraft.resource.texture.texture_set", "type": "object", "additionalProperties": false, + "required": ["format_version", "minecraft:texture_set"], "properties": { - "format_version": { "$ref": "../../general/format_version.json" }, + "format_version": { + "title": "Format Version", + "description": "A version that tells minecraft what type of data format can be expected when reading this file.", + "enum": ["1.16.100", "1.21.30"] + }, "minecraft:texture_set": { "title": "Texture Set", "description": "Texture Sets are used to define multiple PBR layers for a texture resource.", "type": "object", "additionalProperties": false, "required": ["color"], + "not": { + "anyOf": [ + { + "required": ["heightmap", "normal"] + }, + { + "required": ["metalness_emissive_roughness", "metalness_emissive_roughness_subsurface"] + } + ] + }, "properties": { "color": { "$ref": "#/definitions/color" }, "heightmap": { "$ref": "#/definitions/heightmap" }, "metalness_emissive_roughness": { "$ref": "#/definitions/mer" }, + "metalness_emissive_roughness_subsurface": { "$ref": "#/definitions/mers" }, "normal": { "$ref": "#/definitions/normal" } } } }, "definitions": { - "color": { - "title": "Color", - "description": "This is an RGB 3-channel image (defaults to uniform alpha of 1.0), or an RGBA 4-channel image, or a 4 value array for a uniform color with alpha.", - "examples": [[255, 255, 255, 255]], + "file_name": { + "type": "string", + "defaultSnippets": [ + { + "label": "File Name", + "body": "${1:${TM_FILENAME_BASE}}" + } + ] + }, + "rgb": { + "defaultSnippets": [ + { + "label": "RGB Color", + "body": "#${1:RR}${2:GG}${3:BB}" + } + ], "oneOf": [ { "type": "string" }, { "type": "array", - "items": [ - { - "title": "Red", - "type": "integer", - "minimum": 0, - "maximum": 255 - }, - { - "title": "Green", - "type": "integer", - "minimum": 0, - "maximum": 255 - }, - { - "title": "Blue", - "type": "integer", - "minimum": 0, - "maximum": 255 - }, - { - "title": "Alpha", - "type": "integer", - "default": 255, - "minimum": 0, - "maximum": 255 - } - ] + "minItems": 3, + "maxItems": 3, + "items": { + "type": "integer", + "minimum": 0, + "maximum": 255 + } } ] }, - "normal": { - "title": "Normal Map", - "description": "This is a 3-channel normal map image (or 4-channel where the 4th channel is ignored). This layer and the \"heightmap\" layer should not both be defined at the same time.", - "type": "string" + "rgba": { + "defaultSnippets": [ + { + "label": "ARGB Color", + "body": "#${1:AA}${2:RR}${3:GG}${4:BB}" + } + ], + "oneOf": [ + { "type": "string" }, + { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "integer", + "minimum": 0, + "maximum": 255 + } + } + ] + }, + "color": { + "title": "Color", + "description": "This is an RGB 3-channel image (defaults to uniform alpha of 1.0), or an RGBA 4-channel image, or a 4 value array for a uniform color with alpha.", + "anyOf": [ + { + "$ref": "#/definitions/file_name" + }, + { + "$ref": "#/definitions/rgba" + } + ] }, "heightmap": { "title": "Heightmap", "description": "1-channel layer image or a single value in this JSON file for a uniform heightmap. This layer and the \"normal\" layer should not both be defined at the same time.", "examples": [255], - "oneOf": [ - { "type": "string" }, + "anyOf": [ + { + "$ref": "#/definitions/file_name" + }, { "type": "integer", "minimum": 0, @@ -79,33 +117,31 @@ "mer": { "title": "Metalness Emissive Roughness", "description": "This is a 3-channel image (or 4-channel where the 4th channel is ignored) or a 3-value array for a uniform MER. RGB images map Red to Metalness, Green to Emissive, and Blue to Roughness.", - "examples": [[255, 255, 255]], - "oneOf": [ - { "type": "string" }, + "anyOf": [ { - "type": "array", - "items": [ - { - "title": "Red", - "type": "integer", - "minimum": 0, - "maximum": 255 - }, - { - "title": "Green", - "type": "integer", - "minimum": 0, - "maximum": 255 - }, - { - "title": "Blue", - "type": "integer", - "minimum": 0, - "maximum": 255 - } - ] + "$ref": "#/definitions/file_name" + }, + { + "$ref": "#/definitions/rgb" } ] + }, + "mers": { + "title": "Metalness Emissive Roughness Subsurface", + "description": "This is a 4-channel image or a 4-value array for a uniform MERS. RGBA images map Red to Metalness, Green to Emissive, Blue to Roughness and Alpha to Subsurface.", + "anyOf": [ + { + "$ref": "#/definitions/file_name" + }, + { + "$ref": "#/definitions/rgba" + } + ] + }, + "normal": { + "title": "Normal Map", + "description": "This is a 3-channel normal map image (or 4-channel where the 4th channel is ignored). This layer and the \"heightmap\" layer should not both be defined at the same time.", + "$ref": "#/definitions/file_name" } } } diff --git a/vscode-settings.json b/vscode-settings.json index 2ae06a3c..8353d656 100644 --- a/vscode-settings.json +++ b/vscode-settings.json @@ -560,16 +560,16 @@ }, { "fileMatch": [ - "resource_packs/*/textures/*/*.{json,jsonc,json5}", - "*resource*pack*/textures/*/*.{json,jsonc,json5}", - "*Resource*Pack*/textures/*/*.{json,jsonc,json5}", - "*RP*/textures/*/*.{json,jsonc,json5}", - "*rp*/textures/*/*.{json,jsonc,json5}", - "resource_packs/*/textures/*/**/*.{json,jsonc,json5}", - "*resource*pack*/textures/*/**/*.{json,jsonc,json5}", - "*Resource*Pack*/textures/*/**/*.{json,jsonc,json5}", - "*RP*/textures/*/**/*.{json,jsonc,json5}", - "*rp*/textures/*/**/*.{json,jsonc,json5}" + "resource_packs/*/textures/*/!(*.texture_set).{json,jsonc,json5}", + "*resource*pack*/textures/*/!(*.texture_set).{json,jsonc,json5}", + "*Resource*Pack*/textures/*/!(*.texture_set).{json,jsonc,json5}", + "*RP*/textures/*/!(*.texture_set).{json,jsonc,json5}", + "*rp*/textures/*/!(*.texture_set).{json,jsonc,json5}", + "resource_packs/*/textures/*/**/!(*.texture_set).{json,jsonc,json5}", + "*resource*pack*/textures/*/**/!(*.texture_set).{json,jsonc,json5}", + "*Resource*Pack*/textures/*/**/!(*.texture_set).{json,jsonc,json5}", + "*RP*/textures/*/**/!(*.texture_set).{json,jsonc,json5}", + "*rp*/textures/*/**/!(*.texture_set).{json,jsonc,json5}" ], "url": "https://raw.githubusercontent.com/Blockception/Minecraft-bedrock-json-schemas/main/resource/textures/ui_texture_definition.json" },