version.json是mojang提供的用於查詢單個版本資訊的清單檔案,其檔案名為<版本號>.json,通常儲存在.minecraft/versions/<版本号>資料夾下。用於啟動器下載某個特定的遊戲版本。
檔案下載
該檔案可以透過version_manifest.json檔案提供的URL下載。
檔案大體結構
version.json使用JSON結構來儲存及取出資料。下面列出了對其中主要JSON鍵值的解釋:
| 鍵 | 類型 | 說明 |
|---|---|---|
| arguments | Map | 參數列表,分為JVM及game類型為列表的子鍵,分別用於指定目前版本的JVM參數及遊戲參數,在1.13之前,該鍵由gameArguments代替。 |
| assetIndex | Map | 目前版本的資源檔案索引,包含其下載地址等資訊。 |
| assets | 字串 | 目前版本的資源檔案版本。 |
| downloads | Map | 包含用戶端及伺服器端下載地址等資訊。 |
| libraries | Map | 遊戲所有依賴庫,包含其下載地址等資訊。 |
| logging | Map | log4j組態檔,包含其下載地址等資訊。 |
| mainClass | 字串 | 主類名。 |
| releaseTime | 字串 | 使用ISO 8601格式化的資料,用於表示版本的發布時間。 |
| time | 字串 | 使用ISO 8601格式化的資料,用於表示版本的更新時間。 |
| type | 字串 | 版本類型,可以是:release(正式版)、snapshot(快照)、old_beta(Beta版)或old_alpha(Alpha版)。 |
檔案示例內容如下:
{
"arguments": {
"game": [
"--username",
"${auth_player_name}",
"--version",
"${version_name}",
...
{
"rules": [
{
"action": "allow",
"features": {
"is_demo_user": true
}
}
],
"value": "--demo"
},
...
],
"jvm": [
{
"rules": [
{
"action": "allow",
"os": {
"name": "osx"
}
}
],
"value": [
"-XstartOnFirstThread"
]
},
...
]
},
"assetIndex": {
"id": "1.19",
"sha1": "d45eb5e0c20e5d753468de3d68b05c45a946f49b",
"size": 385416,
"totalSize": 553754183,
"url": "https://piston-meta.mojang.com/v1/packages/d45eb5e0c20e5d753468de3d68b05c45a946f49b/1.19.json"
},
"assets": "1.19",
"complianceLevel": 1,
"downloads": {
"client": {
"sha1": "dc26b29eb345cbb60e3939af0b7c78fa52a60daa",
"size": 21550637,
"url": "https://piston-data.mojang.com/v1/objects/dc26b29eb345cbb60e3939af0b7c78fa52a60daa/client.jar"
},
"client_mappings": {
"sha1": "e30571a5d3b123b42dcf141570ed0737434e8c4c",
"size": 7176338,
"url": "https://piston-data.mojang.com/v1/objects/e30571a5d3b123b42dcf141570ed0737434e8c4c/client.txt"
},
"server": {
"sha1": "fdad42550c3f0bcdc52680dcebd5b712d32bc5d7",
"size": 45557085,
"url": "https://piston-data.mojang.com/v1/objects/fdad42550c3f0bcdc52680dcebd5b712d32bc5d7/server.jar"
},
"server_mappings": {
"sha1": "f31da192de018cbd3b449881f8778f5fcec6f56b",
"size": 5556366,
"url": "https://piston-data.mojang.com/v1/objects/f31da192de018cbd3b449881f8778f5fcec6f56b/server.txt"
}
},
"id": "22w24a",
"javaVersion": {
"component": "java-runtime-gamma",
"majorVersion": 17
},
"libraries": [
{
"downloads": {
"artifact": {
"path": "com/mojang/logging/1.0.0/logging-1.0.0.jar",
"sha1": "f6ca3b2eee0b80b384e8ed93d368faecb82dfb9b",
"size": 15343,
"url": "https://libraries.minecraft.net/com/mojang/logging/1.0.0/logging-1.0.0.jar"
}
},
"name": "com.mojang:logging:1.0.0"
},
...
],
"logging": {
"client": {
"argument": "-Dlog4j.configurationFile=${path}",
"file": {
"id": "client-1.12.xml",
"sha1": "bd65e7d2e3c237be76cfbef4c2405033d7f91521",
"size": 888,
"url": "https://launcher.mojang.com/v1/objects/bd65e7d2e3c237be76cfbef4c2405033d7f91521/client-1.12.xml"
},
"type": "log4j2-xml"
}
},
"mainClass": "net.minecraft.client.main.Main",
"minimumLauncherVersion": 21,
"releaseTime": "2022-06-15T16:21:49+00:00",
"time": "2022-06-15T16:21:49+00:00",
"type": "snapshot"
}
字串格式化
在本json檔案中,很多字串值並不可以之間使用,而是有類似${var}的結構,這是需要格式化用字串,在使用時應替換為對應變數。
規則(rules)
arguments下的game和JVM鍵中可能不止有字串,也可能會是包含rules鍵的一個Map。像這樣包含rules的Map也可能出現在libraries列表中的每一項中。
rules通常會有以下內容:
| 鍵 | 類型 | 說明 |
|---|---|---|
| action | 字串 | 對目前項執行的操作,可以是allow(允許)或disallow(不允許),若滿足其餘鍵值,則執行該action。 |
| features | Map | 對應啟動器內設定,通常是一個布林變數。 |
| os | Map | 目前系統相關的要求,有name(系統名稱)、version(系統版本)和arch(系統架構)。 |
遊戲參數
遊戲參數以列表的形式儲存在arguments.game中。
資源索引
用於資源索引的json檔案的相關資訊儲存在assetIndex鍵中,擁有以下內容:
| 鍵 | 類型 | 說明 |
|---|---|---|
| id | 字串 | 資源索引的識別碼。 |
| size | 整型 | 資源索引檔案的檔案大小。 |
| totalSize | 整型 | 所有資源檔案的總大小。 |
| url | 字串 | 下載資源索引檔案的完整URL。 |
用戶端/伺服器端
用戶端和伺服器端的資訊分別儲存在downloads下的client和server兩個鍵,擁有以下相同格式的內容:
| 鍵 | 類型 | 說明 |
|---|---|---|
| sha1 | 字串 | 用戶端/伺服器端的sha1校驗碼。 |
| size | 整型 | 用戶端/伺服器端的檔案大小。 |
| url | 字串 | 下載用戶端/伺服器端的完整URL。 |
依賴庫
依賴庫檔案相關資訊以列表的形式儲存在libraries鍵下,幾乎都有downloads和name兩個鍵。downloads村粗了依賴庫檔案的下載相關資訊,而name的結構如下:
<package>:<name>:<version>
此處package為完整包名,name為庫名,而version為庫版本號。
他們雖然儲存的層級不同,但是擁有相同的json檔案資訊格式如下:
| 鍵 | 類型 | 說明 |
|---|---|---|
| path | 字串 | 依賴庫檔案相對於libraries資料夾的路徑,並包含檔案名。除檔案名外的路徑總是為<package>/<name>/<version>/,此三個變數即對應的name鍵。
|
| sha1 | 字串 | 依賴庫檔案的sha1校驗碼。 |
| size | 整型 | 依賴庫檔案的檔案大小。 |
| url | 字串 | 依賴庫檔案的完整URL,總是為相對路徑前跟上https://libraries.minecraft.net/。
|
普通依賴庫檔案
普通的依賴庫檔案的資訊儲存在libraries[?].downloads.artifact中。
它的檔案名也可從name鍵中推斷,重組為:
<name>-<version>.jar
natives庫檔案
只有libraries[?].downloads鍵下包含natives項目才是natives庫檔案。
其資訊儲存在libraries[?].downloads.artifact.classifiers.<natives_key>中,<natives_key>為natives鍵中當然系統對應的值。
它的檔案名也可從name鍵中推斷,重組為:
<name>-<version>-<natives_key>.jar
遊戲日誌
遊戲日誌的配置儲存在logging中,目前只有client一個鍵,只有用戶端的日誌配置資訊。
argument鍵儲存了啟動遊戲時需要的額外JVM參數。
file鍵儲存了組態檔的資訊看,內容如下:
| 鍵 | 類型 | 說明 |
|---|---|---|
| id | 字串 | 日誌組態檔的檔案名。 |
| sha1 | 字串 | 日誌組態檔的sha1校驗碼。 |
| size | 整型 | 日誌組態檔的檔案大小。 |
| url | 字串 | 日誌組態檔的完整URL。 |
而type鍵儲存了組態檔的類型。