docs/source/skin-system.rst
2015-02-06 23:09:41 +03:00

164 lines
11 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Система скинов
--------------
На этой странице вы найдёте информацию о самостоятельной реализации системы скинов на базе сервиса Ely.by.
Система скинов Ely.by, в отличие от других, не заменяет, а дополняет официальную, тем самым игроки с лицензией не теряют
свои скины, а игроки без лицензии смогут установить себе скин и видеть скины других игроков.
Кроме того, в основных принципах сервиса лежит соответствие официальной системе скинов: нет плащей, нет ушек, нет HD-скинов.
Это означает, что на вашем сервере не будут бегать разноцветные пугала с вырвиглазными скинами.
URL-адреса запросов
===================
Система скинов располагается по URL **http://skinsystem.ely.by**. На сервере доступно 3 основных обработчика:
.. function:: /skins/{nickname}.png
Этот URL отвечает за загрузку скинов. Вместо параметра **nickname** необходимо передать ник игрока. Расширение .png можно опустить.
.. function:: /cloaks/{nickname}.png
Этот URL отвечает за загрузку плащей. Вместо параметра **nickname** необходимо передать ник игрока. Расширение .png можно опустить.
Хотя Ely.by не поддерживает пользовательскую загрузку плащей, мы оставляем за собой право устанавливать дополнительные,
относительно официальной системы скинов, плащи. В любом случае, мы будет пользоваться теми же принципами, что и Mojang -
плащи только за великие заслуги.
.. function:: /textures/{nickname}
По этому URL вы можете получить текстуры для указанного в запросе **nickname**. Результатом является JSON строка, с
meta-информацией о скине следующего формата:
.. code-block:: javascript
{
'SKIN': {
'url': 'http://example.com/skin.png',
'hash': 'uniquehashofskin',
'metadata': {
'model': 'default' /* default или slim, в зависимости от формата скина */
}
},
'CAPE': {
'url': '',
'hash': ''
}
}
*В абсолютном большинстве случаев, содержание CAPE будет именно таким, как показано выше.*
.. note:: Ник не чувствителен к регистру и внутри обработчика в любом случае приводится к нижнему регистру.
Кроме того, для всех запросов необходимо в GET параметрах передать следующие значения:
:version: Версия протокола, по которому идёт запрос на скины. На данный момент таковым является 2 протокол, т.е. вам
нужно всегда указывать version=2.
:minecraft_version: Версия Minecraft, с которой идёт запрос. Этот параметр можно не передавать в том случае, если вы
передаёте параметр authlib_version.
:authlib_version: Версия authlib, с которой выполняется запрос. Этот параметр актуален для версий Minecraft 1.7.6+, когда
для загрузки скинов стала использоваться отдельная библиотека, а не реализация внутри игры.
Параметр может быть передан вместо параметра **minecraft_version**.
Если в запросе не будет параметра **version** и **minecraft_version** или **authlib_version**, сервер ответит 400
ошибкой и скин не будет загружен.
Примеры запросов
~~~~~~~~~~~~~~~~
.. code-block:: http
http://skinsystem.ely.by/skins/erickskrauch.png?version=2&minecraft_version=1.7.2
Получает скин игрока **erickskrauch** с версии Minecraft 1.7.2.
.. code-block:: http
http://skinsystem.ely.by/cloaks/notch?version=2&minecraft_version=1.6.4
Получает плащ игрока **notch** с версии Minecraft 1.6.4. Обратите внимание, что расширение ".png" не передано.
.. code-block:: http
http://skinsystem.ely.by/textures/EnoTiK?version=2&authlib_version=1.5.17
Получает текстуры игрока **EnoTiK** с версии authlib 1.5.17 (версия Minecraft 1.8).
Вспомогательные адреса запросов
===============================
Кроме того, во 2 версии протокола системы скинов определены несколько специальных URL, которые проксируют трафик внутрь
основных запросов, перечисленных выше.
Ник как GET параметр
~~~~~~~~~~~~~~~~~~~~
Эти URL, в отличие от основных запросов, позволяют передать ник игрока в качестве одного из GET параметров. Такие запросы
полезены для версии Minecraft 1.5.2 и ниже, когда внутри кода игры не использовалась подстановка %s для ника, а производилась
простая конкатенация строк. Таким образом можно передать все необходимые GET параметры, указав ник последним.
.. function:: /skins/?name={nickname}.png
Тот же запрос на скин. Вместо параметра **nickname** необходимо передать ник игрока. Расширение .png можно опустить.
.. function:: /cloaks/?name={nickname}.png
Тот же запрос на плащ. Вместо параметра **nickname** необходимо передать ник игрока. Расширение .png можно опустить.
Примеры запросов:
"""""""""""""""""
.. code-block:: http
http://skinsystem.ely.by/skins/?version=2&minecraft_version=1.5.2&name=erickskrauch.png
Получает скин игрока **erickskrauch** с версии Minecraft 1.5.2.
.. code-block:: http
http://skinsystem.ely.by/cloaks/?version=2&minecraft_version=1.4.7&name=notch
Получает плащ игрока **notch** с версии Minecraft 1.4.7. Обратите внимание, что расширение ".png" не передано.
Старый формат запроса
~~~~~~~~~~~~~~~~~~~~~
В 1 версии протокола системы скинов применялся другой способ загрузки скинов. Все запросы шли по URL
**http://ely.by/minecraft.php** и все данные передавались через GET параметры.
На данный момент любой запрос, выполненный на вышеуказанный URL приведёт к 301 редиректу на
**http://skinsystem.ely.by/minecraft.php**, где запрос будет проксирован на основные запросы.
Этот запрос является fallback роутом, применяемым для обратной совместимости с 1 версией и не рекомендуется для
использования в новых проектах. Тем не менее, он должен быть описан, так как применятся и будет достаточно долго применяться
в связи с долгосрочным переходом на 2 версию протокола системы скинов.
1 версия системы скинов (deprecated)
====================================
.. warning:: Информация в этом разделе является устаревшей и приведена здесь только ради создания иллюзии крутого развития
проекта. В любом случае вы **не должны** использовать этот протокол, т.к. в один момент он окончательно перестанет
работать.
На старте проекта применялся URL для загрузки скинов **http://ely.by/minecraft.php**, в который через GET параметры
передавались данные. Сейчас этот URL является устаревшим и планомерно выводится из обращения в пользу 2 версии протокола.
.. function:: /minecraft.php
Параметры, передаваемые в этот запрос:
:name: Имя игрока без учёта регистра и без расширения **.png**.
:type: Тип запрашиваемых данных. Возможные значения: skin и cloack. Изначально была допущена ошибка, из-за которой
запрос на плащи шёл с значением cloack, вместо cloak. Увы, это так и останется в истории проекта.
:mine_ver: Версия Minecraft. Точки в версии должны были быть заменены на прочерки, т.е. 1.7.2 должно было быть передано
как 1_7_2. Хотя могло работать и с точками :)
:ver: Версия протокола. Обычно передавалось значение 1_0_0, которое, в принципе, ни на что не влияло, но тем не менее
передавалось. Сейчас применяется для идентификации запроса, проксируемого с 1 версии во 2.