1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Сборник ссылок Лаунчер voxile.ru и веб-обвязка methuselah.ru

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем Reality_SC, 5 июн 2015.

  1. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    [update] ТЫК.

    Строго говоря, тут представлен не просто лаунчер, а комплекс из лаунчера, веб-обвязки, клиентского мода и серверного плагина. Работу всего комплекса можно опробовать в действии на моём проекте voxile.ru.

    Сам лаунчер не имеет каких-то особенных фич, в нём нет сколько-нибудь серьёзной защиты клиентов, и т.п. Выкладывается "потому что задолбало" — становление пабликом для него скорее всего единственный путь к развитию.
    А вот остальное может оказаться уже более полезным.

    В ближайшее время всё это будет мной как-то подчищаться и выглядеть более прилично. Небольшой части кода несколько лет, особенно в самом лаунчере (в это трудно поверить, но он основан на каком-то ужесно старом ломанном нотчевском), какие-то задумки не были доделаны до конца. Может быть никогда и не будут.

    Я искренне надеюсь, что толковые разработчики присоединятся к этой байде и помогут мне в тяжком деле :)

    В комплекте поставляются:
    upload_2015-7-13_17-1-18.png

    Все Java проекты автоматически и регулярно собираются на Jenkins и выкладываются в мой публичный репозиторий Maven.

    Основные положения обвязки и лаунчера.
    Задумывалось всё как мультипроектное/мультиклиентное/мультисерверное решение, которое предлагается владельцам проектов как услуга.
    Каждый проект получает свой случайный пятисимвольный буквенно-цифровой идентификатор, например мой проект voxile.ru имеет такой — MGMCV. Каждый проект может указать URL адрес своего сайта, где лежат специальные callback-скрипты, и система будет дрочить их, чтобы сайт подтверждал аккаунты своих игроков. Это прямопротивоположно ely.by и другим появлявшимся на rubukkit.org надпроектам.
    Каждый игрок получает свой уникальный идентификатор, uuid. Именно к uuid-у привязаны скины, способы аутентификации, прочая ересь. Проект проксирует все методы Mojang API для лицушников до Mojang, а для пиратов эмулирует его поведение.

    SSP и CSW используют для привязки клиента и сервера сразу несколько подходов, они описаны в посте про SSP (ниже).

    Плюсы для администраторов серверов:
    • Сервера в online-mode — отсутствие AuthMe и других регистраторов. Все игроки имеют уникальные uuid-ы, генерацией и обработкой которых занят не костыль на сервере, а что-то общее и стандартизированное для всех серверов.
    • Использование таких хаков, как подмена URLStreamHandler на стороне сервера, позволяет забыть об целенаправленном "обмане" любых плагинов, которые делают т.н. uuid bulk updates — все вызовы до Mojang API автоматически заменяются на аналогичные вызовы до Мафусаил API, вне зависимости от того, кто вызывает.
    • Клиентский мод заменяет всего лишь один класс (Property.class) в официальной библиотеке Mojang AuthLib с целью вырезать проверку сигнатуры. Этим мы позволяем игроку видеть скины не только лицензионщиков, но и всех остальных игроков. Никаких других изменений в клиентскую сборку на этапе её подготовки не производится! — клиентский мод сделает остальную привязку во время запуска игры.
    Послесловие.
    Выложенное в этой теме хоть и местами костыльно, не имеет фронт-энда, задирает до небес порог вхождения, требует доработки многих кусков (интеграции с различными CMS, рейтингами, ЛК, галереями скинов), но всё же имеет очень богатый потенциал к развитию. Наиболее сложной для меня задачей является написание фронт-енда к веб-обвязке, поэтому именно для её решения я надеюсь найти опытных помощников.

    Тем, кто ищет лёгкий путь, я рекомендую использовать Ely.by.
     
    Последнее редактирование: 21 янв 2016
  2. niki96

    niki96 Старожил Пользователь

    Баллы:
    123
    Опять на жабе. Омг.
    В чем прикол?
     
  3. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
     
  4. Kirich

    Kirich Активный участник Пользователь

    Баллы:
    78
    :ninja:
     
  5. niki96

    niki96 Старожил Пользователь

    Баллы:
    123
    Ясно.
     
  6. blogger2

    blogger2 Старожил Пользователь

    Баллы:
    123
    Skype:
    ilja0176
    Имя в Minecraft:
    XuPoH
    Опять Java, JNI.... rt.jar, и куча пр.
     
  7. Sm1leTwo

    Sm1leTwo Активный участник Пользователь

    Баллы:
    73
    Имя в Minecraft:
    Sm1leTwo
    Причем тут JNI?
     
  8. blogger2

    blogger2 Старожил Пользователь

    Баллы:
    123
    Skype:
    ilja0176
    Имя в Minecraft:
    XuPoH
    Гугли. Байт-код джавы, который можно менять через сторонние ПО.
     
  9. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    /* Reserved */
     
    Последнее редактирование: 13 июл 2015
  10. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    Думаю, ему не надо объяснять, что такое JNI :)
     
  11. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Никакого JNI тут нет и в помине. Только Java и php.
    На веб-сервер кидаются исходники auth.methuselah.ru, в мускуле создаются БД `authserver` и `projects` (при помощи восстановления дампа config/deploy.sql); создаётся какой-то юзер с доступом к ним, всё прописывается в config/yggdrasilSettings.php.
    В Methuselah AuthLib меняется эта ссылка на твой домен или IP, все проекты перекомпилируются.
    Плагин сразу готов после компиляции — его в plugins любого Spigot-а и сервер переключить в online-mode.
    Враппер нужно доработать совсем чуть-чуть, это скорее я сейчас сделаю через часок — чтобы он передавал командную строку в саму игру, а то там костыль ненужный.
    В собранный клиент client.jar (без разницы как он назван) враппер кидается тупо винраром или любым архиватором, просто drag'n'drop. Настраивать ничего не нужно.
    Если у тебя свой лаучнер, просто сделать так, чтобы он общался со скриптами как лицушный с моджангоскими: юзать токены и authenticate. Передавать токены игре, как всегда. Всё будет работать.
    Если мой лаунчер, ну там может поковыряться придётся и разобраться самому =) я делал для себя, а не для публики.
    Ну и на твой сайт надо заслать скрипты, они пока работают только с XenForo, но там по аналогии для любой CMS можно, потом в projects.projects создаёшь новую запись про свой проект, придумываешь 5-значный код, забиваешь url к скриптам, кодовое слово.
    Когда игроки будут авторизовываться, обвязка будет опрашивать эти указанные скрипты и те скажут ОК или НЕОК.

    Добавлено:

    Выложил исходный код сервера аутентификации auth.methuselah.ru: они независимы от лаунчера, могут использоваться с чем угодно. Чистый PHP 5.5+, без использования фреймворков. Предполагалось написать вокруг этой обвязки новый ЛК и многое другое, заложенная архитектура допускает расширение.
    • Поддержка нескольких проектов.
    • Поддержка лицензионных учёток через проксирование вызовов до серверов Mojang.
    • Генерация одноразовых Гостевых учётных записей.
    • Аутентификация юзеров происходит по указанным для каждого проекта URL специальных callback-скриптов. Пока поддерживаются только XenForo, дописать другие ни для кого не проблема.
    • Скины и плащи хранятся в виде URL, эти ссылки и отдаются серверам/клиентам.
    • Поддержка смены ников с полноценным ведением истории.
    • Приём callback-ов от mctop и topcraft; можно дописать другие.
    • Приём callback-а от yandex-money; можно дописать другие.
    • Дамп структуры БД находится в ./config/deploy.sql
     
    Последнее редактирование: 13 июл 2015
  12. Fourgotten

    Fourgotten Старожил Пользователь

    Баллы:
    103
    Ололо
     
  13. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    По мере того, как отдельные куски всего задуманного приобретают черты рабочего продукта, я решил сделать отдельный пост с подробным описанием для каждого из них.

    Server-Side Plugin (Methuselah SSP)
    Исходный код | Скачать

    То, что должно быть установлено на игровом сервере. Фактически это самостоятельный отдельный продукт, который все могут использовать у себя. Варианты установки различаются для разных серверных платформ:
    • Сервера, основанные на Bukkit API (CraftBukkit, Spigot, MCPC+/Cauldron):
      Разместите скачанный .jar файл в папке ./plugins/, перезапустите сервер.
      Поддерживается всегда самая актуальная версия, но я стараюсь сохранять совместимость максимально — плагин должен работать и на 1.5.2.
    • * Прокси-сервера на основе BungeeCord:
      Разместите скачанный .jar файл в папке ./plugins/, перезапустите прокси-сервер.
      Необходимости размещать плагин на каждом игровом сервере нет (но — a subject to change).
    • ** Сервера, основанные на Sponge API:
      Разместите скачанный .jar файл в папке ./mods/, перезапустите сервер.
    • Любые официальные сервера (ванильные) последних версий (в том числе промежуточные снапшоты):
      Запускайте сервер, используя скачанный .jar файл в качестве обёртки:
    * — md_5 отказал в Pull Request-е, который помог бы сделать это легко. Пока не работает, ищу другие пути интеграции.
    ** — работа начата, но результат ещё не достигнут.

    Что делает SSP?
    Во-первых, его задача — привязать сервер, работающий в online-mode, к соответствующей веб-обвязке. Изначально он был жестко привязан к веб-обвязке auth.methuselah.ru, но недавно появилась возможность использовать Ely.by (@ErickSkrauch), а также любые другие адреса. Ниже Вы увидете, как это сделать.

    Конфигурация плагина (Bukkit-режим).
    Код:
    general:
      # Допустимые варианты:
      # mojang (mojang.com)
      # ely.by (ely, minecraft.ely.by)
      # methuselah.ru (methuselah, auth.methuselah.ru)
      # custom
      links-provider: methuselah
      # Включить отладочные сообщения? (пока не работает)
      debug: false
    # Секция ниже используется только в случае, когда general.links-provider = methuselah
    methuselah:
      # Unique project code
      code: "<Enter your project's code (5 chars) here>"
      # That random chars from Web UI
      not-so-secret-keyword: "<Enter your not-so-secret keyword here>"
    internal:
      version: 1
    Если general.links-provider будет установлен в значение custom, после перезапуска плагин создаст ещё один файл custom-links.json следующего демонстрационного содержания:
    Код:
    {
        // Базовый адрес для конкатенации с остальными
        "urlBase": "https://auth.methuselah.ru",
        // http://wiki.vg/Authentication
        "methodAuthenticate": "/authenticate.php",
        "methodRefresh": "/refresh.php",
        "methodValidate": "/validate.php",
        "methodInvalidate": "/invalidate.php",
        "methodSignout": "/signout.php",
        // http://wiki.vg/Protocol_Encryption#Authentication
        "methodJoin": "/join.php",
        "methodHasJoined": "/hasJoined.php",
        // Для клиентов устаревших версий
        "legacyJoin": "/legacy/legacy_join.php",
        "legacyHasJoined": "/legacy/legacy_check.php",
        // http://wiki.vg/Mojang_API
        "apiNameToUUID": "/api/getuuid.php",
        "apiNameHistory": "/api/namehistory.php",
        "apiBulkNames": "/api/namestouuids.php",
        "apiProfile": "/api/clothes.php"
    }
    Администратор сервера может указать собственные произвольные адреса для запросов. Очевидно, что на данный момент именно режим работы custom представляет наибольший интерес большинству администраторов серверов на RuBukkit, потому что он позволяет подключить любой online-mode сервер к любому веб-серверу без ручной правки ссылок в файле ядре.

    Как он это делает?
    Интеграция происходит с использованием одновременно двух методик:
    • Производится поиск заранее известных классов и замена некоторых их private static final URL ... полей на новые значения.
    • Внедрение собственного наследника URLStreamHandler в качестве обработчика http/https протоколов внутри класса URL. За этот метод большое спасибо @Shevchik, без его MojangAPIProxy я бы сам не додумался.
      Эта методика позволяет перехватить запросы от любого плагина, не модифицируя его. Чаще всего это плагины, которые хотят обменять список имён игроков на их uuid-ы, либо, наоборот, по uuid-ам узнать, не изменились ли имена игроков (uuid fetching).
    Что ещё он умеет?
    Во-вторых, практически с самого начала SSP имеет публичное API. Сейчас оно скорее является заглушкой, нежели чем-то полезным, однако у меня очень много идей, что неожиданного и полезного можно включить в плагин.
    Вот здесь лежит его исходный код, а так его следует подключать к Вашему проекту:
    Код:
    <repositories>
        <repository>
            <id>methuselah-repo</id>
            <url>http://maven.methuselah.ru/</url>
        </repository>
        ...
    </repositories>
    ...
    <dependencies>
        <dependency>
            <groupId>ru.methuselah</groupId>
            <artifactId>serversideplugin-api</artifactId>
            <version>0.16a</version>
        </dependency>
        ...
    </dependencies>
     
    Последнее редактирование: 6 июл 2015
  14. MrTrojan

    MrTrojan Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    BlackTrojan
    К чему это было написано?
     
  15. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Это же великий Fourgotten, ему можно писать всё, что угодно =)

    На самом деле к тому, чтобы моё сообщение не объединилось с предыдущим в одно (хотел отдельный пост)
    Во, дописал до конца :)
     
    Последнее редактирование: 9 июл 2015
  16. MineOmega

    MineOmega Активный участник Пользователь

    Баллы:
    76
    Skype:
    mcrtm199
    полезная штука:good:
     
  17. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Оставлю свой комментарий, чтобы не потерять тему
    заинтересовала тема
     
  18. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    upload_2016-1-12_9-40-7.png
     
  19. Kimato

    Kimato Активный участник Пользователь

    Баллы:
    76
    [​IMG]
    Ну вот как тут можно не орать?
    Боже...
     
  20. dark13th

    dark13th Новичок

    Баллы:
    6
    Есть вопрос — можно ли как-то при это запустить не просто клиент майнкрафта, а Forge?
    Лаунчер я уже заставил скачать всё, что нужно для forge, остаётся понять, как подружить враппер Methuselah с враппером от Forge. Если у ТСа есть мысли по этому поводу, то я с удовольствием выслушаю.
     

Поделиться этой страницей