mirror of
https://github.com/elyby/docs.git
synced 2025-05-02 15:53:45 +05:30
ru docs seems to be done
This commit is contained in:
parent
ea1227cdf9
commit
aa2f5a343f
@ -1,6 +1,6 @@
|
||||
# Ely.by API (симуляция Mojang API)
|
||||
|
||||
Здесь приведена информация об API, совместимом с функционалом [Mojang API](http://wiki.vg/Mojang_API) Обращаем ваше внимание на то, что это не полноценное API Ely.by, а только набор дополнительных запросов, реализованных на базе нашего [сервера авторизации](./minecraft-auth.md).
|
||||
Здесь приведена информация об API, совместимом с функционалом [Mojang API](http://wiki.vg/Mojang_API) Обращаем ваше внимание на то, что это не полноценное API Ely.by, а только набор дополнительных запросов, реализованных на базе нашего [сервера авторизации](./minecraft-auth).
|
||||
|
||||
## Запросы
|
||||
:::note
|
||||
@ -90,7 +90,7 @@ API не имеет ограничения на количество запро
|
||||
В случае, если один из переданных никнеймов не найден в базе данных, для него не будет возвращено значения (он будет просто пропущен). Учитывайте эту ситуацию при парсинге ответа.
|
||||
|
||||
### Запрос информации о профиле по UUID {#profile-by-uuid}
|
||||
См. [запрос профиля для сервера авторизации](./minecraft-auth.mdx#profile-request).
|
||||
См. [запрос профиля для сервера авторизации](./minecraft-auth#profile-request).
|
||||
|
||||
## Возможные ошибки {#possible-errors}
|
||||
|
||||
|
@ -26,7 +26,8 @@
|
||||
**Причина**: Пользователь ввёл/разработчик передал неверные значения.
|
||||
**Решение**: Необходимо вывести пользователю уведомление о неправильно введённых данных.
|
||||
|
||||
{#not-found}Для индикации ошибки **Not Found** используется ответ с `404` статусом
|
||||
#### Not Found {#not-found}
|
||||
Для индикации ошибки **Not Found** используется ответ с `404` статусом
|
||||
|
||||
## Авторизация в лаунчере {#launcher}
|
||||
В этом разделе описана авторизация для игрового лаунчера и описывает действия, необходимые для получения `accessToken` для игрового клиента Minecraft. В результате авторизации будет получен **JWT-токен** с [правами доступа](./oauth.md#available-scopes) `minecraft_server_session`.
|
||||
@ -100,7 +101,7 @@
|
||||
> * **clientToken** (*string*) – Уникальный идентификатор клиента, относительно которого получен accessToken.
|
||||
> * **requestUser** (*bool*) – Если поле передано как `true`, то в ответе сервера будет присутствовать поле `user`.
|
||||
|
||||
::note
|
||||
:::note
|
||||
В оригинальном протоколе так же передаётся значение `selectedProfile`, но в реализации Mojang он не влияет ни на что. Наша реализация сервера авторизации игнорирует этот параметр и опирается на значения `accessToken` и `clientToken`.
|
||||
:::
|
||||
|
||||
@ -217,10 +218,12 @@
|
||||
|
||||
Тем не менее, описанный ниже запрос актуален только для **Minecraft 1.7.6+**, когда для загрузки скинов стала использоваться Authlib.
|
||||
|
||||
> {#profile-request}**GET /session/profile/\{uuid\}**
|
||||
### Запрос профиля {#profile-request}
|
||||
> **GET /session/profile/\{uuid\}**
|
||||
>
|
||||
> Запрос на этот URL выполняется клиентом в одиночной игре на локальном сервере (созданном посредством самой игры). В URL передаётся UUID пользователя, с которым был запущен клиент, а в ответ получается информация о текстурах игрока в таком же формате, как и при `hasJoined` запросе.
|
||||
|
||||
|
||||
## Готовые библиотеки authlib {#premade-authlib}
|
||||
:::tip
|
||||
Ely.by поддерживает библиотеку authlib-injector. Это наиболее простой и универсальный способ установки системы авторизации в игру и игровые сервера. За подробностями обратитесь в [соответствующий раздел документации](./authlib-injector.md).
|
||||
@ -255,7 +258,7 @@ Ely.by поддерживает библиотеку authlib-injector. Это н
|
||||
Прежде чем производить установку, необходимо определить, какой именно файл подлежит модификации:
|
||||
* **>=1.16**: `libraries/net/minecraft/server/ВЕРСИЯ-ЦИФРЫ/server-ВЕРСИЯ-ЦИФРЫ-extra.jar`.
|
||||
* **1.13-1.15**: `libraries/net/minecraft/server/ВЕРСИЯ/server-ВЕРСИЯ-extra.jar`.
|
||||
* **<=1.12**: `minecraft_server.ВЕРСИЯ.jar`.
|
||||
* **\<=1.12**: `minecraft_server.ВЕРСИЯ.jar`.
|
||||
|
||||
Когда необходимый файл найден, выполните для него установку authlib, аналогично [оригинальному серверу](#authlib-server-vanilla).
|
||||
|
||||
@ -314,4 +317,4 @@ java -jar cache/patched-ВЕРСИЯ.jar
|
||||
|
||||
Ту же самую операцию вам необходимо провести и с сервером, только заменить ссылку на `hasJoined`.
|
||||
|
||||
После этих действий вам нужно в настройках включить online-mode=true и сервер станет пускать на себя только тех игроков, которые будут авторизованы через Ely.by.
|
||||
После этих действий вам нужно в настройках включить `online-mode=true` и сервер станет пускать на себя только тех игроков, которые будут авторизованы через Ely.by.
|
||||
|
158
docs/oauth.md
158
docs/oauth.md
@ -41,13 +41,13 @@ https://example.com/oauth/ely.php?error=access_denied&error_message=The+resource
|
||||
| *prompt* | `consent` или `select_account` | Принудительно отобразить запрос прав (`consent`) или принудительно запросить выбор аккаунта (`select_account`). |
|
||||
| *login_hint* | `erickskrauch` или `erickskrauch@ely.by` | Если у пользователя есть несколько аккаунтов, то указав в этом параметре username или E-mail пользователя, вы автоматически выберете аккаунт за него. Это полезно в случае повторного входа, когда токен истёк. |
|
||||
|
||||
### Перечень доступных scopes {#oauth-scopes}
|
||||
### Перечень доступных scopes {#available-scopes}
|
||||
|
||||
| **Scope** | **Описание** |
|
||||
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **account_info** | Получение информации о пользователе. |
|
||||
| **account_email** | В ответе на запрос информации о пользователе будет также присутствовать его email. |
|
||||
| **offline_access** | Вместе с `access_token` вы также получите и `refresh_token`. Смотрите подробнее в [соответствующем разделе](#refresh-token-grant). |
|
||||
| **offline_access** | Вместе с `access_token` вы также получите и `refresh_token`. Смотрите подробнее в [соответствующем разделе](#refresh-token). |
|
||||
| **minecraft_server_session** | `access_token` можно будет использовать в качестве сессии для Minecraft. |
|
||||
|
||||
## Обмен кода на ключ {#access_key}
|
||||
@ -91,9 +91,161 @@ if (!is_null($_GET['code'])) {
|
||||
curl_close($curl);
|
||||
}
|
||||
```
|
||||
Пояснение к коду:
|
||||
:::info[Пояснения к коду]
|
||||
Сначала мы объявляем переменную `$oauthParams`, в которую заносим значения, полученные после регистрации приложения.
|
||||
Затем проверяем, не возникла-ли ошибка. В этом случае сразу же прерываем выполнение.
|
||||
Формируем POST запрос к форме обмена `code` на `access_token`, передавая необходимые поля.
|
||||
Выполняем запрос, получаем ответ, переводим его из JSON в ассоциативный массив.
|
||||
:::
|
||||
|
||||
### Ответ сервера {#access_key_result}
|
||||
В случае успешного запроса в теле ответа будет находиться результат обмена кода авторизации на `access_token`. Данные являются JSON документом и могут быть легко интерпретированы средствами используемого языка программирования.
|
||||
Тело JSON документа содержит следующие поля:
|
||||
```json
|
||||
{
|
||||
"access_token": "4qlktsEiwgspKEAotazem0APA99Ee7E6jNryVBrZ",
|
||||
"refresh_token": "m0APA99Ee7E6jNryVBrZ4qlktsEiwgspKEAotaze", // Представлен только в случае запроса с правами offline_access
|
||||
"token_type": "Bearer",
|
||||
"expires_in": 86400 // Количество секунд, на которое выдан токен
|
||||
}
|
||||
```
|
||||
На этом процедура авторизации закончена. Полученный `access_token` может быть использован для получения информации о пользователе и взаимодействия с нашим API.
|
||||
|
||||
## Получение информации о пользователе {#get-user-info}
|
||||
Если полученный токен имеет scope `account_info`, то вы можете запросить информацию об аккаунте пользователя. Для этого необходимо отправить запрос на URL:
|
||||
```url
|
||||
https://account.ely.by/api/account/v1/info
|
||||
```
|
||||
Для передачи `access_token` используется заголовок `Authorization` со значением `Bearer {access_token}`.
|
||||
|
||||
```php title="Пример реализации получения информации о пользователе на PHP"
|
||||
<?php
|
||||
$accessToken = 'some_access_token_value';
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, 'https://account.ely.by/api/account/v1/info');
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, [
|
||||
'Authorization: Bearer ' . $accessToken,
|
||||
]);
|
||||
$result = json_decode(curl_exec($curl), true);
|
||||
curl_close($curl);
|
||||
```
|
||||
В ответ вы получите JSON документ со следующим содержимым:
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"uuid": "ffc8fdc9-5824-509e-8a57-c99b940fb996",
|
||||
"username": "ErickSkrauch",
|
||||
"registeredAt": 1470566470,
|
||||
"profileLink": "http:\/\/ely.by\/u1",
|
||||
"preferredLanguage": "be",
|
||||
"email": "erickskrauch@ely.by"
|
||||
}
|
||||
```
|
||||
|
||||
## Обновление токена доступа {#refresh-token}
|
||||
Если при выполнении авторизации вами было запрошено право на получение scope `offline_access`, то вместе с `access_token` вы также получите и `refresh_token`. Данный токен не истекает и может быть использован для получения нового токена доступа, когда он истечёт.
|
||||
|
||||
Для выполнения операции обновления токена необходимо отправить **POST** запрос на тот же URL, что использовался и при обмене кода на ключ доступа, но со следующими параметрами:
|
||||
| **Параметр** | **Описание** |
|
||||
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `client_id` | ClientID, полученный при регистрации приложения. |
|
||||
| `client_secret` | ClientSecret, полученный при регистрации приложения. |
|
||||
| `scope` | Те же scope, что были запрошены и при получении начального токена доступа. Попытка запросить большее количество прав приведёт к ошибке. |
|
||||
| `refresh_token` | Непосредственно токен, полученный вместе с начальным токеном доступа. |
|
||||
|
||||
```php title="Пример реализации обновления токена доступа на PHP"
|
||||
<?php
|
||||
// refresh_token, полученный при завершении авторизации
|
||||
$refreshToken = 'm0APA99Ee7E6jNryVBrZ4qlktsEiwgspKEAotaze';
|
||||
|
||||
$requestParams = [
|
||||
'client_id' => 'ely', // Ваш ClientId, полученный при регистрации
|
||||
'client_secret' => 'Pk4uCtZw5WVlSUpvteJuTZkVqHXZ6aNtTaLPXa7X', // Ваш ClientSecret, полученный при регистрации
|
||||
'scope' => 'account_info account_email',
|
||||
'refresh_token' => $refreshToken,
|
||||
'grant_type' => 'refresh_token',
|
||||
];
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, 'https://account.ely.by/api/oauth2/v1/token');
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_POST, true);
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($requestParams));
|
||||
$result = json_decode(curl_exec($curl), true);
|
||||
curl_close($curl);
|
||||
```
|
||||
В качестве ответа будет точно такое же тело, какое было получено в результате [обмена кода на ключ доступа](#access_key_result). Поле `refresh_token` будет отсутствовать.
|
||||
|
||||
## Готовые библиотеки {#libraries}
|
||||
Более простым способом будет использовать уже готовую библиотеку, которой будет необходимо передать лишь регистрационные параметры. Ниже перечислены библиотеки для различных языков программирования. Вы можете дополнить этот список своей библиотекой.
|
||||
* **PHP**:
|
||||
* [Официальная] https://github.com/elyby/league-oauth2-provider
|
||||
* **Ruby**:
|
||||
* [Официальная] https://github.com/elyby/omniauth-ely
|
||||
|
||||
## Возможные ошибки {#errors}
|
||||
Ниже приведены стандартные ошибки, которые вы можете получить в случае неправильной передачи данных на сервер авторизации. Если вы столкнулись с ошибкой, не описанной в этой документации, пожалуйста, сообщите о ней через [форму обратной связи](https://ely.by/site/contact).
|
||||
|
||||
### Ошибки при инициализации авторизации {#errors-init-auth}
|
||||
Этот раздел описывает ошибки, отображаемые при переадресации пользователя с вашего сайта на нашу страницу инициализации авторизации.
|
||||
|
||||
```
|
||||
Invalid request ({parameter} required).
|
||||
```
|
||||
Данная ошибка означает, что вы передали не все необходимые параметры. Чтобы решить эту ошибку просто добавьте недостающий параметр.
|
||||
|
||||
```
|
||||
Invalid response type '{invalid_response_type_value}'.
|
||||
```
|
||||
Данная ошибка означает, что вы передали неподдерживаемый тип `response_type`. На данный момент поддерживается только значение `code`.
|
||||
|
||||
```
|
||||
Invalid scope '{invalid_scope}'.
|
||||
```
|
||||
Ошибка указывает на то, что было запрошено неизвестный `scope`. Убедитесь, что вы запрашиваете [поддерживаемые права](#available-scopes).
|
||||
|
||||
```
|
||||
Can not find application you are trying to authorize.
|
||||
```
|
||||
Данная ошибка говорит о том, что переданные параметры не соответствуют ни одному из зарегистрированных приложений. Для решения проблемы исправьте ваши значения `client_id` и `redirect_uri`.
|
||||
|
||||
### Ошибки при обмене кода на ключ {#issue-token-errors}
|
||||
В случае возникновения ошибки вместо ожидаемого ответа с `200` статусом вы получите `40x` код и следующие 2 поля:
|
||||
```json
|
||||
{
|
||||
"error": "invalid_request",
|
||||
"error_description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. Check the \"code\" parameter."
|
||||
}
|
||||
```
|
||||
В поле `error` находится системный идентификатор ошибки, в `error_description` — описание ошибки на английском языке.
|
||||
|
||||
#### Возможные значения error
|
||||
* `invalid_request`: Переданы не все необходимые параметры запроса или значение `code` не было найдено в базе выданных кодов.
|
||||
* `unsupported_grant_type`: Данная ошибка сигнализирует о том, что вы попытались произвести авторизацию по неизвестному для нашего OAuth2 сервера типу Grant.
|
||||
* `invalid_client`: Эта ошибка возникает в случае, когда трио значений `client_id`, `client_secret` и `redirect_uri` не совпали ни с одним из зарегистрированных приложений.
|
||||
|
||||
### Ошибки при запросе информации о пользователе {#errors-request-user}
|
||||
Ответ со статусом `401` указывает на то, что заголовок `Authorization` не присутствует в запросе или его значение сформировано неверно. Тело ответа будет следующим:
|
||||
```json
|
||||
{
|
||||
"name": "Unauthorized",
|
||||
"status": 401,
|
||||
"message": "Your request was made with invalid credentials."
|
||||
}
|
||||
```
|
||||
|
||||
Ответ со статусом `403` сигнализирует о том, что переданный в заголовке `Authorization` токен не содержит scope `account_info` или он истёк. Получаемый ответ будет иметь следующий формат:
|
||||
```json
|
||||
{
|
||||
"name": "Forbidden",
|
||||
"status": 403,
|
||||
"message": "You are not allowed to perform this action."
|
||||
}
|
||||
```
|
||||
|
||||
### Ошибки при обновлении токена доступа {#errors-renewing-token}
|
||||
При выполнении обновления токена доступа вам могут встретиться те же ошибки, что и при [обмене кода на ключ доступа](#issue-token-errors), а также несколько новых:
|
||||
* `invalid_request`: Переданы не все необходимые параметры запроса или значение `refresh_token` не был найден в базе выданных токенов.
|
||||
* `invalid_scope`: Были перечислены неподдерживаемые scope или запрошено больше, чем было у изначального токена.
|
||||
|
146
docs/skins-system.md
Normal file
146
docs/skins-system.md
Normal file
@ -0,0 +1,146 @@
|
||||
# Система скинов
|
||||
|
||||
На этой странице вы найдёте информацию о доступных запросах к сервису системы скинов Ely.by. Вы можете использовать любой из них как дополнительный или основной источник скинов для своего проекта.
|
||||
|
||||
Сервис системы скинов Ely.by обеспечивает [проксирование текстур владельцев лицензии Minecraft](#textures-proxy), что означает, что при использовании этого сервиса игроки будут видеть как скины премиум пользователей Minecraft, так и скины пользователей сервиса Ely.by.
|
||||
|
||||
Мы стремимся соответствовать официальной системе скинов и не поддерживаем ушки и HD-скины. Система поддерживает плащи, но не позволяет игрокам самостоятельно их надевать.
|
||||
|
||||
Если у вас есть предложения по развитию существующего функционала, пожалуйста, [создайте новый Issue](https://github.com/elyby/chrly/issues/new) в [репозитории проекта Chrly](https://github.com/elyby/chrly).
|
||||
|
||||
:::note
|
||||
Вы можете найти более подробную информацию о реализации сервера системы скинов в [репозитории проекта Chrly](https://github.com/elyby/chrly).
|
||||
:::
|
||||
|
||||
## URL-адреса запросов {#url}
|
||||
Система скинов размещена на домене `http://skinsystem.ely.by`.
|
||||
Во всех запросах параметр `nickname` должен быть заменён на ник игрока. Значение не чувствительно к регистру.
|
||||
|
||||
### Запрос скина {#skin-request}
|
||||
> **GET /skins/\{nickname\}.png**
|
||||
|
||||
URL для загрузки текстуры скина. Расширение `.png` опционально. Если текстура не будет найдена, сервер вернёт ответ с `404` статусом.
|
||||
|
||||
### Запрос плаща {#cape-request}
|
||||
> **GET /cloaks/\{nickname\}.png**
|
||||
|
||||
URL для загрузки текстуры плаща. Расширение `.png` опционально. Если текстура не будет найдена, сервер вернёт ответ с `404` статусом.
|
||||
|
||||
### Запрос текстур
|
||||
> **GET /textures/\{nickname\}**
|
||||
|
||||
По этому URL вы можете получить текстуры в формате, указанному в поле `textures` одноимённого property в [ответе на запрос подписанных текстур](https://wiki.vg/Mojang_API#UUID_-.3E_Profile_.2B_Skin.2FCape):
|
||||
```json
|
||||
{
|
||||
"SKIN": {
|
||||
"url": "http://example.com/skin.png",
|
||||
"metadata": {
|
||||
"model": "slim"
|
||||
}
|
||||
},
|
||||
"CAPE": {
|
||||
"url": "http://example.com/cape.png"
|
||||
}
|
||||
}
|
||||
```
|
||||
В зависимости от доступных игроку текстур могут отсутствовать поля `SKIN` или `CAPE`. Если модель скина не является `slim`, то поле `metadata` также будет отсутствовать.
|
||||
|
||||
Если текстуры не будут найдены, сервер вернёт пустой ответ с `204` статусом.
|
||||
|
||||
### Запрос профиля
|
||||
> **GET /profile/\{nickname\}**
|
||||
|
||||
Данный запрос является аналогом запроса [профиля игрока в API Mojang](https://wiki.vg/Mojang_API#UUID_-.3E_Profile_.2B_Skin.2FCape), только вместо идентификации пользователя по UUID используется его ник. Также, как и в API Mojang, вы можете добавить к запросу `?unsigned=false`, чтобы получить текстуры с подписью. В ответе также будет присутствовать дополнительное property с `name` равным ely.
|
||||
|
||||
Если у пользователя нет текстур, то они будут запрошены через прокси Mojang, после чего переподписаны с использованием [нашего ключа подписи](#signature-verification-key-request).
|
||||
```json
|
||||
{
|
||||
"id": "ffc8fdc95824509e8a57c99b940fb996",
|
||||
"name": "ErickSkrauch",
|
||||
"properties": [
|
||||
{
|
||||
"name": "textures",
|
||||
"signature": "eks3dLJWzod92dLfWH6Z8uc6l3+IvrZtTj3zjwnj0AdVt44ODKoL50N+RabYxf7zF3C7tlJwT1oAtydONrxXUarqUlpVeQzLlfsuqUKBLi0L+/Y9yQLG3AciNqzEWq3hYaOsJrsaJday/hQmKFnpXEFCThTMpSuZhoAZIiH4VG48NhP70U93ejyXF9b1nPYnXP6k7BVB8LYSzcjZfdqY88jQJbbvRzOyX14ZSD0Ma92jceLNKmkTVc2UfRLUNXtQKtVSFUzlAjCXPJW89IIOZTRqLg65qstWwBvn6VuikyUB5EIxM8vuCh7zTkrMOx1v2Q0xIj8YSFcbnBH2bo87SYOIe1bOK57ZEeUJqY6uSgMlWs7dI5D3nmhFptErm72hg55Axdo1xbG4mvnmLYF7SA4yMDSytPPL+kA+sw3pafnvU2IZo38gqJSDOOpkOpdhUoHx85fzRJL8AcLSJiFlCZDl4pSi3cVuKy/xY5ohT/fJ6GEqpbZp3gACymn47zzI42VSh6j1DQnx2wnhqalTv0kE3qpAFpK/htSboQkFCW/bULO3b+vgU87XPlReT7UtH4yGLtixgs5GC8AzBraN8vOMv8TZCX9ab6mBBjOoDJjXa8Tq637TC75GxRHlpAN2jRHYvyp2zJwjUrML3u4eD4osHW+VBfl8D2l3nLJuemQ=",
|
||||
"value": "eyJ0aW1lc3RhbXAiOjE2MTQ5MzczMjc0MzcsInByb2ZpbGVJZCI6ImZmYzhmZGM5NTgyNDUwOWU4YTU3Yzk5Yjk0MGZiOTk2IiwicHJvZmlsZU5hbWUiOiJFcmlja1NrcmF1Y2giLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly9lbHkuYnkvc3RvcmFnZS9za2lucy82OWM2NzQwZDI5OTNlNWQ2ZjZhN2ZjOTI0MjBlZmMyOS5wbmcifX19"
|
||||
},
|
||||
{
|
||||
"name": "ely",
|
||||
"value": "but why are you asking?"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Если запрошенный никнейм не будет найден ни в локальном хранилище, ни у Mojang, сервер вернёт пустой ответ с `204` статусом.
|
||||
|
||||
### Запрос публичного ключа {#signature-verification-key-request}
|
||||
> **GET /signature-verification-key.der**
|
||||
|
||||
Данный запрос возвращает публичный ключ, который может быть использован для проверки подписи текстур. Ключ предоставляется в формате `DER`. Этот формат используется внутри Authlib, поэтому ключ может быть в ней использован без модификации алгоритма проверки подписи.
|
||||
|
||||
> **GET /signature-verification-key.pem**
|
||||
|
||||
Такой же запрос, что и предыдущий, но возвращает ключ в формате `PEM`.
|
||||
|
||||
### Запрос подписанных текстур
|
||||
> **GET /textures/signed/\{nickname\}**
|
||||
|
||||
Этот запрос используется в нашем [плагине серверной системы скинов](https://ely.by/server-skins-system) для загрузки текстур с оригинальной подписью Mojang. Полученные в ответе текстуры могут быть без изменений переданы в немодифицированный игровой клиент. В ответе также будет присутствовать дополнительное property с `name` равным ely.
|
||||
```json
|
||||
{
|
||||
"id": "ffc8fdc95824509e8a57c99b940fb996",
|
||||
"name": "ErickSkrauch",
|
||||
"properties": [
|
||||
{
|
||||
"name": "textures",
|
||||
"signature": "QH+1rlQJYk8tW+8WlSJnzxZZUL5RIkeOO33dq84cgNoxwCkzL95Zy5pbPMFhoiMXXablqXeqyNRZDQa+OewgDBSZxm0BmkNmwdTLzCPHgnlNYhwbO4sirg3hKjCZ82ORZ2q7VP2NQIwNvc3befiCakhDlMWUuhjxe7p/HKNtmKA7a/JjzmzwW7BWMv8b88ZaQaMaAc7puFQcu2E54G2Zk2kyv3T1Bm7bV4m7ymbL8McOmQc6Ph7C95/EyqIK1a5gRBUHPEFIEj0I06YKTHsCRFU1U/hJpk98xXHzHuULJobpajqYXuVJ8QEVgF8k8dn9VkS8BMbXcjzfbb6JJ36v7YIV6Rlt75wwTk2wr3C3P0ij55y0iXth1HjwcEKsg54n83d9w8yQbkUCiTpMbOqxTEOOS7G2O0ZDBJDXAKQ4n5qCiCXKZ4febv4+dWVQtgfZHnpGJUD3KdduDKslMePnECOXMjGSAOQou//yze2EkL2rBpJtAAiOtvBlm/aWnDZpij5cQk+pWmeHWZIf0LSSlsYRUWRDk/VKBvUTEAO9fqOxWqmSgQRUY2Ea56u0ZsBb4vEa1UY6mlJj3+PNZaWu5aP2E9Unh0DIawV96eW8eFQgenlNXHMmXd4aOra4sz2eeOnY53JnJP+eVE4cB1hlq8RA2mnwTtcy3lahzZonOWc=",
|
||||
"value": "eyJ0aW1lc3RhbXAiOjE0ODYzMzcyNTQ4NzIsInByb2ZpbGVJZCI6ImM0ZjFlNTZmNjFkMTQwYTc4YzMyOGQ5MTY2ZWVmOWU3IiwicHJvZmlsZU5hbWUiOiJXaHlZb3VSZWFkVGhpcyIsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83Mzk1NmE4ZTY0ZWU2ZDhlYzY1NmFkYmI0NDA0ZjhlYmZmMzQxMWIwY2I5MGIzMWNiNDc2ZWNiOTk2ZDNiOCJ9fX0="
|
||||
},
|
||||
{
|
||||
"name": "ely",
|
||||
"value": "but why are you asking?"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
По умолчанию для этого запроса не применяется проксирование текстур. Чтобы его включить, добавьте дополнительный **GET** параметр `?proxy=true`.
|
||||
|
||||
Если текстуры не будут найдены, сервер вернёт пустой ответ с 204 статусом.
|
||||
|
||||
### Дополнительные параметры
|
||||
При совершении любого из вышеописанных запросов вы также можете передать ряд дополнительных **GET** параметров. Они будут использованы для анализа использования сервиса разными версиями игры.
|
||||
* `version`: Версия протокола, по которому идёт запрос на скины. На данный момент это версия `2` , т.е. вам необходимо указать `version=2`.
|
||||
* `minecraft_version`: Версия Minecraft, с которой идёт запрос.
|
||||
* `authlib_version`: Версия используемой Authlib. Этот параметр актуален для версий Minecraft 1.7.6+, где для загрузки скинов стала использоваться отдельная библиотека, а не внутриигровой код.
|
||||
|
||||
Пример запроса текстур с передачей вышеописанных параметров:
|
||||
```url
|
||||
http://skinsystem.ely.by/textures/erickskrauch?version=2&minecraft_version=1.14.0&authlib_version=1.5.25
|
||||
```
|
||||
|
||||
### Вспомогательные URL
|
||||
Также запрос скина и плаща можно выполнить, передавая ник через GET параметр. Эта возможность используется для передачи аналитических параметров в версиях игры до 1.5.2, когда ник просто добавлялся в конец строки. Для этого вся строка выстраивается таким образом, чтобы последним параметром шёл name, после добавления ника к которому получался полный запрос на текстуру.
|
||||
|
||||
> **GET /skins?name=\{nickname\}.png**
|
||||
|
||||
Смотрите [запрос на получение скина](#skin-request).
|
||||
|
||||
> **GET /cloaks?name=\{nickname\}.png**
|
||||
|
||||
Смотрите [запрос на получение плаща](#cape-request).
|
||||
|
||||
```url title="Пример запросов на текстуры с передачей параметров выше"
|
||||
http://skinsystem.ely.by/skins?version=2&minecraft_version=1.5.2&name=erickskrauch.png
|
||||
http://skinsystem.ely.by/cloaks?version=2&minecraft_version=1.4.7&name=notch
|
||||
```
|
||||
|
||||
## Проксирование текстур {#textures-proxy}
|
||||
Сервис системы скинов Ely.by получает текстуры из официальной системы скинов в случае, если в базе данных не было найдено информации о текстурах для запрошенного имени пользователя. Также запрос будет проксирован, если запись о скине будет найдена, но он будет стандартным.
|
||||
|
||||
Для улучшения пропускной способности проксирующего алгоритма, информация о текстурах кешируется в 2 стадии:
|
||||
* Соответствие ника и UUID хранится [в течение 30 дней](https://help.minecraft.net/hc/en-us/articles/360034636712-Minecraft-Usernames#article-container:~:text=How%20often%20can%20I%20change%20my%20username%3F).
|
||||
* Информация о текстурах обновляется не чаще [раза в минуту](https://wiki.vg/Mojang_API#UUID_-.3E_Profile_.2B_Skin.2FCape:~:text=You%20can%20request%20the%20same%20profile%20once%20per%20minute).
|
||||
|
||||
Если вы владеете лицензионным аккаунтом Minecraft, но ваш ник занят, пожалуйста, обратитесь в [службу поддержки](https://ely.by/site/contact) и после небольшой проверки мы передадим ник в ваше пользование.
|
||||
|
||||
## Готовые реализации
|
||||
Готовые реализации патчей и инструкции по их установке могут быть найдены в [разделе загрузок на главном сайте Ely.by](https://ely.by/load).
|
@ -119,8 +119,8 @@ const config: Config = {
|
||||
'properties',
|
||||
'json',
|
||||
'batch',
|
||||
'url',
|
||||
'html',
|
||||
'uri',
|
||||
'markup',
|
||||
'php',
|
||||
],
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Ely.by API (Mojang API simulation)
|
||||
|
||||
This article contains information about the API compatible with the [Mojang API](http://wiki.vg/Mojang_API) functionality. Please note that this is not a full-fledged API of Ely.by, but only a set of additional requests implemented based on our `[authorization server](./minecraft-auth.md)`.
|
||||
This article contains information about the API compatible with the [Mojang API](http://wiki.vg/Mojang_API) functionality. Please note that this is not a full-fledged API of Ely.by, but only a set of additional requests implemented based on our `[authorization server](./minecraft-auth)`.
|
||||
|
||||
## Requests
|
||||
:::note
|
||||
@ -90,7 +90,7 @@ The data is returned in the same order they were requested.
|
||||
If one of the passed usernames isn’t found in the database, no value will be returned for it (it will be skipped). Keep this in mind when parsing the response.
|
||||
|
||||
### Profile info by UUID {#profile-by-uuid}
|
||||
See the `[profile request for the authorization server](./minecraft-auth.md#profile-request)`.
|
||||
See the `[profile request for the authorization server](./minecraft-auth#profile-request)`.
|
||||
|
||||
## Possible errors {#possible-errors}
|
||||
|
||||
|
@ -1,23 +0,0 @@
|
||||
/**
|
||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||
* and scoped locally.
|
||||
*/
|
||||
|
||||
.heroBanner {
|
||||
padding: 4rem 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 996px) {
|
||||
.heroBanner {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
import clsx from 'clsx';
|
||||
import Link from '@docusaurus/Link';
|
||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||
import Layout from '@theme/Layout';
|
||||
import HomepageFeatures from '@site/src/components/HomepageFeatures';
|
||||
import Heading from '@theme/Heading';
|
||||
|
||||
import styles from './index.module.css';
|
||||
|
||||
function HomepageHeader() {
|
||||
const {siteConfig} = useDocusaurusContext();
|
||||
return (
|
||||
<header className={clsx('hero hero--primary', styles.heroBanner)}>
|
||||
<div className="container">
|
||||
<Heading as="h1" className="hero__title">
|
||||
{siteConfig.title}
|
||||
</Heading>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className={styles.buttons}>
|
||||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/docs/intro">
|
||||
Docusaurus Tutorial - 5min ⏱️
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Home(): JSX.Element {
|
||||
const {siteConfig} = useDocusaurusContext();
|
||||
return (
|
||||
<Layout
|
||||
title={`Hello from ${siteConfig.title}`}
|
||||
description="Description will go into a meta tag in <head />">
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
title: Markdown page example
|
||||
---
|
||||
|
||||
# Markdown page example
|
||||
|
||||
You don't need React to write simple standalone pages.
|
Loading…
x
Reference in New Issue
Block a user