Участник:SaharNooby/Игровые файлы

Если есть совет по данной теме или заметили неточность, то не стесняйтесь и поправьте страничку Смайлик (обычный).gif

Предисловие

Перевод статьи отсюда. Наткнулся на неё, ищя информацию по 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

Игра загружает 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 и ниже).

В данной статье используются материалы из статьи «Участник:SaharNooby/Игровые файлы» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.