Скины и плащи
Публичные адреса текстур для лаунчеров, серверов и рендеров
Скин и плащ игрок загружает из кабинета. Наружу они отдаются двумя способами: по постоянному адресу с ником или UUID и статикой по имени файла. Авторизация не нужна ни там, ни там — лаунчеру, серверному плагину и скин-рендеру токена взять неоткуда.
По нику или UUID
| Путь | Что отдаёт |
|---|---|
/cabinet/skin/public/skin/username/:username | Скин по нику |
/cabinet/skin/public/skin/uuid/:uuid | Скин по UUID |
/cabinet/skin/public/cloak/username/:username | Плащ по нику |
/cabinet/skin/public/cloak/uuid/:uuid | Плащ по UUID |
Ответ — PNG с Content-Type: image/png. Хвост .png у ника или UUID допускается: /cabinet/skin/public/skin/username/Steve.png отдаёт то же, что и без него, — это удобно для модов и плагинов, которые подставляют расширение сами.
Адреса постоянные, а файл за ними меняется при каждой загрузке, поэтому сервер отдаёт их с Cache-Control: no-cache и ETag. Клиент, который умеет условные запросы, шлёт If-None-Match и получает 304 Not Modified, пока скин не сменился; новый скин видно сразу после загрузки.
| Ситуация | Скин | Плащ |
|---|---|---|
| У игрока загружен файл | Файл игрока | Файл игрока |
| Файла нет | Скин по умолчанию из storage/default/skin.png | 404 |
| Игрока нет | Скин по умолчанию | 404 |
Плащ без файла — 404 намеренно: прозрачная заглушка вместо плаща скрыла бы элитры у игроков. Если проекту нужен общий плащ по умолчанию, положите его в storage/default/cloak.png — тогда он будет отдаваться вместо 404.
Статикой
В публичном профиле и в ответах лаунчеру поля skin.file и cloak.file содержат имя файла. Файл доступен как {API_BASEURL}/{file} — это то, что показывают сайт и панель. Имя случайное и меняется при каждой загрузке, поэтому такой адрес можно кэшировать сколько угодно: старый файл после замены просто перестаёт существовать.
Ограничения загрузки
Загрузка идёт из кабинета по праву player.skin.upload и player.cloak.upload. Принимается только PNG не больше 2 МБ. Обычный скин — 64×64 или 64×32, обычный плащ — 64×32; текстуры крупнее открывают права player.skin.hd и player.cloak.hd, их обычно продают как привилегию.
GravitLauncher
Модуль UnicoreProvider получает адрес и хеш скина прямо в ответе на запрос игрока, отдельно настраивать адреса не нужно — см. Лаунчер.