diff --git a/docs/Modders/Type-checking.md b/docs/Modders/Type-checking.md index a69954738f..84a5291bc4 100644 --- a/docs/Modders/Type-checking.md +++ b/docs/Modders/Type-checking.md @@ -15,3 +15,17 @@ As of now, only Buildings.json has a proper schema Tada! Now Android Studio will recognize all Buildings.json files as belonging to that schema, and will warn you of inconsistencies! +## Using VSCode + +- ctrl-shift-p, search "open user settings (json)", enter +- Copy this into the settings: +```json + "json.schemas": [ + { + "fileMatch": [ + "*/Buildings.json" + ], + "url": "https://raw.githubusercontent.com/yairm210/Unciv/14c5d9eb177cee719843336512b587780b59c452/docs/Modders/schemas/buildings.json" + } + ] +``` diff --git a/docs/Modders/schemas/buildings.json b/docs/Modders/schemas/buildings.json index 922b45857c..b100ef1adb 100644 --- a/docs/Modders/schemas/buildings.json +++ b/docs/Modders/schemas/buildings.json @@ -2,48 +2,52 @@ "$schema": "http://json-schema.org/draft-07/schema", "type": "array", "items": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "uniques": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[^><]*(\\<[^>]*\\>[^><]*)*$" + "allOf": [ + { "$ref": "#/definitions/stats"}, + { + "type": "object", + "properties": { + "name": { "type": "string" }, + "uniques": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[^><]*(\\<[^>]*\\>[^><]*)*$" + }, + "uniqueItems": true // Can't imagine you mean to include the same thing twice + }, + "civilopediaText": { + "type": "array", + "items": { "$ref": "#/definitions/civilopediaText"} + }, + "requiredTech": { "type": "string" }, + "cost": { "type": "number" }, + "maintenance": { "type": "number" }, + "percentStatBonus": { "$ref": "#/definitions/stats" }, + "specialistSlots": { "type": "object" }, + "greatPersonPoints": { "type": "object" }, + "hurryCostModifier": { "type": "number" }, + "isWonder": { "type": "boolean" }, + "isNationalWonder": { "type": "boolean" }, + "requiredBuilding": { "type": "string" }, + "requiredResource": { "type": "string" }, + "requiredNearbyImprovedResources": { + "type": "array", + "items": { "type": "string" } + }, + "cityStrength": { "type": "number" }, + "cityHealth": { "type": "number" }, + "replaces": { "type": "string" }, + "uniqueTo": { "type": "string" }, + "quote": { "type": "string" }, + "replacementTextForUniques": { "type": "string" } }, - "uniqueItems": true // Can't imagine you mean to include the same thing twice - }, - "civilopediaText": { - "type": "array", - "items": { "$ref": "#/definitions/civilopediaText"} - }, - "requiredTech": { "type": "string" }, - "cost": { "type": "number" }, - "maintenance": { "type": "number" }, - "percentStatBonus": { "$ref": "#/definitions/stats" }, - "specialistSlots": { "type": "object" }, - "greatPersonPoints": { "type": "object" }, - "hurryCostModifier": { "type": "number" }, - "isWonder": { "type": "boolean" }, - "isNationalWonder": { "type": "boolean" }, - "requiredBuilding": { "type": "string" }, - "requiredResource": { "type": "string" }, - "requiredNearbyImprovedResources": { - "type": "array", - "items": { "type": "string" } - }, - "cityStrength": { "type": "number" }, - "cityHealth": { "type": "number" }, - "replaces": { "type": "string" }, - "uniqueTo": { "type": "string" }, - "quote": { "type": "string" }, - "replacementTextForUniques": { "type": "string" } - }, - "required": [ - "name" + "required": [ + "name" + ], + "additionalProperties": false + } ], - "allOf": [{ "$ref": "#/definitions/stats"}], - "additionalProperties": false }, "definitions": { "stats": {