- Баллы
- 66
- Имя в Minecraft
- TaoGunner
От автора:
Я перестал следить за темой. Если нужна более свежая библиотека - пишите в телегу.
Сделаю по мере появления времени.
Telegram: TaoGunner
Я перестал следить за темой. Если нужна более свежая библиотека - пишите в телегу.
Сделаю по мере появления времени.
Telegram: TaoGunner
Уже давно Mojang ввела цифровую подпись каждого скина, который находится на их серверах. Если отдать клиенту игры текстуру игрока без цифровой подписи, он применит стандартную текстуру Стива, поэтому у многих начиная с версии 1.8 скины просто так работать не захотели. Тем более, в новых версиях библиотеки authlib существует проверка на домен, с которого эта информация поступает на клиент. Обычно эту проблему решал аддон Skin Restorer. В пропатченной библиотеке удалены все проверки, позволяя грузить ваши скины откуда угодно. Начинают работать скины игрока, плащей, а также отображаются лица в списке игроков.
Последнее изменение: от 25.05.2026г.
Какие изменения сделаны в оригинальной библиотеке:
- [Patch] Убрана проверка цифровой подписи скинов и плащей;
- [Patch] Убрана проверка домена, с которого клиент получает скины;
- [Patch] Ссылки на скрипты авторизации серверов Mojang заменены ссылками на localhost (127.0.0.1:8000);
- [Patch] Во все запросы добавлен User-Agent (против блокировки CloudFlare);
- [Misc] Добавлен вывод в лог сообщения SkinFix by TaoGunner (сообщение позволяет определить, загрузилась ли библиотека);
Требования:
- Minecraft версии 1.7.10 и выше;
- Знание системы авторизации Yggdrasil;
- Умение работать с JSON.
Как пользоваться:
- Находим в своём клиенте игры библиотеку authlib . В зависимости от версии клиента это могут быть разные версии библиотек:
Код:Minecraft authlib -------------------- 26.1.2 authlib-7.0.63.jar 1.21.0 authlib-6.0.54.jar 1.20.6 authlib-6.0.54.jar 1.20.2 authlib-5.0.47.jar 1.20.1 authlib-4.0.43.jar 1.20.0 authlib-4.0.43.jar 1.19.4 authlib-3.18.38.jar 1.19.2 authlib-3.11.39.jar 1.18.2 authlib-3.3.39.jar 1.17.1 authlib-2.3.31.jar 1.16.5 authlib-2.1.28.jar 1.15.2 authlib-1.5.25.jar 1.14.4 authlib-1.5.25.jar 1.13.2 authlib-1.5.25.jar 1.12.2 authlib-1.5.25.jar 1.12.0 authlib-1.5.25.jar 1.10.2 authlib-1.5.22.jar (удалено чтобы загрузить файл) 1.9.4 authlib-1.5.22.jar (удалено чтобы загрузить файл) 1.8.9 authlib-1.5.21.jar (удалено чтобы загрузить файл) 1.7.10 authlib-1.5.21.jar (удалено чтобы загрузить файл) - Определившись, запоминаем её и ищем в архиве исправленную библиотеку с подходящей версией. Открываем исправленную библиотеку с помощью онлайн-редактора и ищем такие строки:
Код:http://127.0.0.1:8000/auth/join.php http://127.0.0.1:8000/auth/hasJoined.php http://127.0.0.1:8000/auth/profile.php?uuid= - Меняем пути до скриптов на ваши, например:
Код:Пример путей для скриптов на PHP: http://my-minecraft-server.ru:80/minecraft/join.php http://my-minecraft-server.ru:80/minecraft/hasJoined.php http://my-minecraft-server.ru:80/minecraft/profile.php?uuid= Пример путей для скриптов на других языках: http://localhost:8080/minecraft/join http://localhost:8080/minecraft/hasJoined http://localhost:8080/minecraft/profile/ - Сохраняем изменения в библиотеку. Теперь необходимо поместить её и в клиент, и на сервер:
- КЛИЕНТ: удаляем оригинальную библиотеку и заменяем её на нашу (обычно она лежит по пути libraries/com/mojang/authlib);
- СЕРВЕР: классы библиотеки находятся внутри minecraft_server.1.xx.x.jar (внутри jar ищите com/mojang/authlib). Открываем jar-файл пропатченной библиотеки и заменяем файлы сервера. Внимание! Некоторые сервера, например Forge, не используют minecraft_server.1.xx.x.jar, ищите где лежит authlib внимательнее)
- Теперь остается лишь настроить скрипты для обработки запросов клиента и сервера. Примеры скриптов на PHP лежат в архиве и достаточно подробно снабжены комментариями.
[config.php] Основной файл с настройками, всегда начинайте с него! Тут указываем параметры подключения к MySQL, а также пути до скинов. Один из важных параметров на время настройки это $DEBUG. Поменяйте его значение на TRUE и у вас будет создан файл debug.log, в котором можно узнать, как отрабатывает тот или иной скрипт.
[join.php] Обрабатывает POST-запросы клиента игры (в формате JSON) при подключении к серверу.
[hasJoined.php] Обрабатывает GET-запросы сервера игры, когда к нему пытаются подключиться.
[profile.php] Отвечает за выдачу скинов и плащей.
[launcher.php] Этот скрипт не для официальной системы авторизации Yggdrasil и нужен лишь для примера обвязки с каким-нибудь "абстрактным" лаунчером. Выдает параметры запуска для клиента игры: UUID и accessToken.
Вопрос: Для чего вообще использовать эту библиотеку, если есть плагины на регистрацию (например AuthMe) и починку текстур (например SkinRestorer)?
Ответ: Эта патченная библиотека нужна для:
- для серверов, не поддерживающих плагины;
- для серверов, на которые игроки заходят с НЕлицензионного лаунчера;
- для тех администраторов, кто хочет, чтобы игроки не вводили при входе на сервер пароль;
- для тех, кто хочет разобраться и создает свой лаунчер или скрипты для системы регистрации игроков.
Вопрос: Виден ли мой скин для других игроков?
Ответ: Да. Всё работает так, как на лицензионных серверах.
Вопрос: Я написал свои скрипты и почему-то у меня текстура игрока отображается на плаще (или наоборот). Почему?
Ответ: Потому что имена текстур в ссылках на скины плаща и игрока у тебя одинаковые, пусть даже ссылки на файлы текстур разные. Например:
Клиент скачает вначале первый taogunner.png (скин плаща) и сохранит в assets/skins/. А затем скачает второй taogunner.png (скин игрока) и заменит им первый. Поэтому вместо скина плаща отобразится скин игрока.Код:Плащ: http://hostname.com/cape/taogunner.png Скин: http://hostname.com/skin/taogunner.png
Вопрос: Я заменил скин игрока на сайте, перезагрузил клиент игры, но отображается старый скин. Почему?
Ответ: Очисти папку assets/skins/ в клиенте игры и повтори попытку. Если всё получилось - значит твой новый скин имеет то же имя, что и старый. Клиент не дурак: если он уже скачал taogunner.png, то заного он скачивать его не будет. Чтобы не очищать клиент каждый раз - при смене скина на сервере изменяй ссылку. Я использую md5(текстура.png).
Вопрос: Я использую лицензионный сервер версии 1.18 или выше. При запуске он создаёт рядом с собой папку libraries, а внутри я нашел и заменил jar-файл с authlib. Но при запуске сервера он пишет, что хеш библиотеки не сходится - и заменяет её на оригинальную. Как заставить его этого не делать?
Ответ: Внутри файла server.jar есть папка /META-INF. В ней найди и замени оригинальную библиотеку на пропатченную, а также обнови хеш этой библиотеки в файле /META-INF/libraries.list.
Вопрос: Я использую лицензионный сервер версии 1.19 или выше. При попытке игроков подключиться появляется сообщение:
Ответ: Это из-за новой системы репортов, которая требует, чтобы все сообщения игроков были подписаны индивидуальным RSA-ключом. Эту опцию можно безопасно отключить server.properties сделав enforce-secure-profile=false.Код:Failed to validate profile key: Missing profile public key. This server requires secure profiles.
Вопрос: Я использую защиту CloudFlare и система авторизации не работает. Почему?
Ответ: Отвечу цитатой одного человека, который разобрался в чем причина и даже подсказал, как решить проблему блокировки запросов клиента и сервера игры системой CloudFlare:
В общем, всё оказалось намного интереснее.
Дело оказалось вот в чём. Cloudflare использует не просто защищённые сервера, но и оптимизирует запросы используя CDN.
Как я понял отсутствие значение User-Agent для неё само по себе является "аномалией". Обычно пустые User-Agent используют боты. Cloudflare это фиксирует . И для снижение нагрузки на конечный сервер, стремиться убрать "мусор", запросы с пустыми User-Agent будут заблокированы на уровне CDN. Иными словами до нашего сервера и до NGINX не дойдут.
В Cloudflare в раздели Security есть вкладка, WAF которую можно использовать в качестве настройки User-Agent. Как это работает. Допустим один и тот же user-Agent может создавать атаку некую, искусственные запросы и прочее. Мы можем обнаружить атаку и заблокировать её вписав User-Agent. И атака не дойдёт даже до нашего сервера. Но, должны быть правила "разрешить", я пытался разрешить пустой User-Agent, ну не получилось, возможно я ещё до конца не разобрался, но увы.
Вложения:
Последнее редактирование:
