Если есть совет по данной теме или заметили неточность, то не стесняйтесь и поправьте страничку |
Перевод статьи отсюда. Наткнулся на неё, ищя информацию по URL-ам загрузки assets, так как пишу свой лаунчер. Мой перевод кое-где кривоват, но как уж есть - если уж совсем невыносимо, сделайте правку.
Игра (скорее лаунчер) использует формат JSON, читайте документацию, если непонятны значения слов "пара" и "объект". Некоторые термины JSON разобраны на Википедии (раздел "Синтаксис").
Имена (id) всех загружаемых версий в игре хранятся в этом файле:
http://s3.amazonaws.com/Minecraft.Download/versions/versions.json
Jar-файл данной версии хранится здесь:
http://s3.amazonaws.com/Minecraft.Download/versions/<версия>/<версия>.jar
Дополнительная информация, список библиотек и необходимые аргументы для версии находятся в этом json-файле:
http://s3.amazonaws.com/Minecraft.Download/versions/<версия>/<версия>.json
После обновлений лаунчера форматы данных, хранящися в файле <версия>.json могут измениться. Пара minimumLauncherVersion в файле <версия>.json должна не допускать ошибочных обновлений. В значении этой пары хранится число, такое же число (увеличивающиеся с каждым релизом) имеет и официальный лаунчер. Если число в значении пары будет больше числа в лаунчере, то лаунчер не будет загружать и запускать версию во избежание возможных ошибок.
Библиотеки используются всеми версиями Minecraft и закачиваются лаунчером отсюда:
https://libraries.minecraft.net/
Файл <версия>.json содержит названия библиотек, которые необходимы для запуска. Внутри файла есть объект-массив libraries
, который содержит информацию о каждой необходимой библиотеке.
Например:
{ "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3", "natives": { "linux": "natives-linux", "windows": "natives-windows", "osx": "natives-osx" }, "extract": { "exclude": [ "META-INF/" ] }, "rules": [ { "action": "allow", "os": { "name": "osx", "version": "^10\\.5\\.\\d$" } } ] }
Значение пары name
используется для получения URL для загрузки версии, а также для получения пути хранения библиотеки на компьютере. Формат значения (имени библиотеки):
<сборка>:<название>:<версия>
Для примера выше, сборка будет "org.lwjgl.lwjgl
", название - "lwjgl-platform
", а версия - "2.9.1-nightly-20130708-debug3
".
Преобразованный URL для загрузки библиотеки выглядит уже так:
https://libraries.minecraft.net/<сборка>/<название>/<версия>/<название>-<версия>.jar
где папка на сервере с библиотекой (<сборка>
) является результатом замещения всех точек в <сборка>
слэшами /.
Библиотека будет загружена в файл по следующему пути:
<папка с игрой>\libraries\<сборка>\<название>\<версия>\<название>-<версия>.jar
Папка хранения также является результатом замещения замещения точек в <сборка>
обратными слэшами \.
Лаунчер также загружает контрольную сумму в формате sha1 отсюда:
<сборка>/<название>/<версия>/<название>-<версия>.jar.sha1
При несовпадении контрольной суммы из этого файла и реальной суммы файла библиотеки последняя будет заново загружена.
Объект natives
представляет из себя строки, которые будут выбираться в зависимости от системы (и, иногда, разрядности) и вставляться между расширением .jar
и версией библиотеки. Обобщенный формат:
<название>-<версия>-<строка из объекта natives>.jar
Такие преобразования делаются с именем любой библиотеки, объект которой содержит объект natives
.
Объект extract
("распаковка") содержит правила распаковки библиотеки - массив exclude
("исключить"), содержащий строки - имена папок и файлов, которые не будут распакованы.
Объект-массив rules
("правила") используется для того, чтобы загружать библиотеку только в зависимости от системы. Когда значение пары action
равно allow
, библиотека будет загружена, если название системы соответствует значению пары name
объекта os
(может быть linux, windows или osx). Когда значение пары action
равно disallow
, библиотека не будет загружена, если название системы соответствует значению пары name
объекта os
. Если объект os
отсутствует, то эти правила будут применяться для всех платформ.
Например (правила не той библиотеки, что выше):
"rules": [ { "action": "allow" // Действие - "разрешить", нет объекта os, значит, разрешено для всех платформ }, { "action": "disallow", // Действие - "запретить", объект os указывает, что библиотека запрещена для OS X версии 10.5 "os": { "version": "^10\\.5\\.\\d$", "name": "osx" } } ]
В итоге, библиотека будет загружена всеми системами, кроме OS X 10.5.
В качестве примера, ниже приведен полный URL загрузки библиотеки из под OS X:
https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.1-nightly-20130708-debug3/lwjgl-platform-2.9.1-nightly-20130708-debug3-natives-osx.jar
Все, что содержит библиотека, будет распаковано, кроме папки META-INF
. Также, библиотека будет загружена, только если лаунчер запущен на OS X 10.5.
Сборки Minecraft Forge, устанавливаемые авто-установщиком, создают версии, в которых у некоторых библиотек присутствует пара url
. Если пара присутствует, то лаунчер заменит стандартный адрес загрузки (https://libraries.minecraft.net/) значением пары.
Игра загружает assets (ресурсы - звуки, музыка и языки) отсюда:
http://resources.download.minecraft.net/
Список необходимых для данной версии assets расположен здесь:
https://s3.amazonaws.com/Minecraft.Download/indexes/<index>.json
где значение "index" равно значению пары "assets" в файле <версия>.json. Если оно отсутствует, то "index" будет равно "legacy" (для устаревших версий):
https://s3.amazonaws.com/Minecraft.Download/indexes/legacy.json
После этого лаунчер закачивает все необходимые для версии ресурсы отсюда
http://resources.download.minecraft.net/<первые два символа хэша>/<весь хэш>
сюда:
.minecraft/assets/objects/<первые два символа хэша>/<весь хэш>
И если индексом был "legacy", то копирует с переименовыванием их в папку
.minecraft/assets/virtual/legacy/
для того, чтобы ресурсы были доступны версиям, не поддерживающим новую систему (1.7.2 и ниже).