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

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

Лаунчер JMCLauncherFX, мультиклиент, шаблоны UPD 0.7.1

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

?

Нужен ли такой лаунчер?

  1. Определенно да!

    169 голосов
    61,9%
  2. Подожду новую версию

    51 голосов
    18,7%
  3. Ненужен

    53 голосов
    19,4%
  1. Автор темы
    dimana90

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

    Баллы:
    103
    LMCLauncherFX 0.7.1
    [​IMG]
    На скриншоте главное окно со стандартным шаблоном.

    Как все начиналось?. Началось примерно в июне сего года когда проект в котором я участвую обзавелся новыми мощностями и было решено поднимать второй сервер на новой версии игры. Тут встала проблема, что старый лаунчер от нотча не умел запускать новую версию игры и не поддерживал мультиклинтность. Кроме того в нем имелось огромное количество неудобностей лично для меня. Тогда же я начал поиск других лаунчеров, но все они не удовлетворяли необходимым мне требованиям а именно кроссплатформенности, мультиклиентности, гибких настроек и возможности кастомизировать загружаемый список файлов для облегчения обновлений на стороне клиента. Поэтому было решено писать свое с блэк джеком и путанами.

    Возможности текущей версии:
    1. Для настройки лаунчера и изменения интерфейса не требуется его компиляция, все настройки хранятся в json файлах внутри архива.
    2. Возможность полностью изменить интерфейс лаунчера в удобном графическом представлении на привычном css3.
    3. Запускает любую версию игры.
    4. Умный апдейтер. Количество архивов на скачивание и распаковку до 255 штук, конфигурируется в json для каждого конкретного клиента. Сверяет и обновляет только изменившиеся архивы. Если название архива соответствует папке в клиенте то происходит очистка папки перед распаковкой.
    5. Кросплатформенный
    6. Не требует каких либо хаков в клиентах.
    7. Работает на стандартном принципе авторизации. На сервере необходим скрипт auth.php(WebMCR,бухарь ...)
    8. Умеет работать как в стандартом режиме, так в портативном(на флешке и т.д.), а также есть установка в выбранную папку в системы.
    9. Индивидуальные настройки ява машины для каждого клиента. Возможность выбрать стороннюю ява машину из системы, задать параметры создания ява машины.
    10. Мультиклиентный.
    11. Размер меньше 80 кб.
    12. Исходники на гитхабе
    13. Бесплатность
    14. Полноценная страница новостей на движке WebKit с полной поддержкой HTML5 и css3.(Можете делать очень красивые страницы с новостями в лаунчере)
    Задача для примера:
    Два клиента. Первый майнкрафт 1.4.7 . Второй 1.6.2. Придумываем название каждого , я назову первый "Techno 1.4.7" а второй "Техно мир 1.6.2" . Придумываемкраткое название рабочей папки для каждого , у меня это "techno147" и "techno162".

    1.4.7 Заходим в папку и просто запаковываем каждую папку в zip архив. На выходе получим к примеру такое bin.zip config.zip mods.zip Flan.zip coremods.zip resource.zip .
    1.6.2 Структуру необходимо привести к виду старых версий(особенность лаунчера, скоро необходимость отпадет). Дл этого создаем папку куда соберем нужную структуру. Копируем сразу в нее папки assets и mods, создаем папку bin и заходим в нее. Теперь запаковываем винраром всю папку libraries (обязательно в свойствах при создании зайти во вкладку "Файлы" и вместо "Сохранять относительные пути" выставляем "Не сохранять пути"). Теперь открываем полученный архив и видим кучу файлов без папок. Распаковываем все файлы кроме содержащих в названии @natives@ в нашу созданную папку bin. Создаем в bin папку natives и вытаскиваем в нее все dll файлы из архивов в которых в названии содержится слово natives(на выходе будут dll либо so для линукса). Теперь закрываем архив и переходим снова в bin но теперь копируем в него главный файл игры из папки versions\1.6.2\1.6.2.jar
    Запаковываем в zip и получаем bin.zip assets.zip mods.zip .

    Немного объясню принцип как лаунчер будет смотреть на все это при обновлении. Лаунчер при запуске игры смотрит md5 хеш файла у игрока и на сервере, если например 1 из 5 архивов отличается то лаунчер записывает себе новый хеш этого файла, качает только этот файл ,смотрит соответствует ли название архива например mods.zip(расширение zip не учитывается) названию папок в клиенте и если находит что папка существует полностью удаляет ее. Функция очень удобная т.к. обновлении становится очень легким и вместо перекачивания всей игры качается только то что обновилось.


    Качаем сам лаунчер. Открываем его и достаем всю папку Configs. Обязательно качаем Notepad++ т.к. содержимое фалов должно быть в кодировке ANSI а нп++ как раз прекрасно и удобно дает эту возможность.
    Открываем CoreConfig.json и видим примерно следующее содержание конфига
    Код:
    [/FONT][/FONT]
    {
    "Version":"13",
    "LauncherRootDir":"pantheria",
    "LauncherFileName":"JMCLauncherFX.jar",
    "WindowTitle":"Pantheria launcher",
    "HostUrl":"http://pantheria.ru",
    "NewsUrl":"http://pantheria.ru/MineCraft/news.php",
    "clientnames":["Techno 1.4.7","Vanila 1.6.2","Техно мир 1.6.2"],
    "clientdirnames":["techno147","vanila162","techno162"],
    "AuthUrl":"http://pantheria.ru/MineCraft/auth.php",
    "RegUrl":"http://pantheria.ru/index.php?mode=start",
    "ClientDownloadRootFolder":"http://pantheria.ru/MineCraft/MinecraftDownload/NewLauncher/"
    }
    
    Подробнее:
    "Version":"13" - Вписываем версию которая в WebMCR для примера прописана в админ панели в пункте версия лаунчера.
    "LauncherRootDir" Корневая папка в которой работает лаунчер(обязательно латинскими буквами и слитно). У пользователя эта папка создается автоматически при запуске клиента. В стандартном режиме лаунчера она создается в %APPDATA%/.dirname/ . Обычно название задают относительно проекта у меня это pantheria . Дает гарантию что ваш проект не будет мешать другим проектам. Лицензионный лаунчер и многие аналоги используют папку minecraft что затрудняет игроку жизнь =) тут эта проблема решена.
    "ClientDownloadRootFolder" - url путь до корневой папки на сервер где будут лежать обновления на клиент и сам лаунчер. У меня это http://pantheria.ru/MineCraft/MinecraftDownload/NewLauncher/" . Для этого идем на сервер и создаем там все папки в соответствии с указанной вами ссылкой.
    "LauncherFileName" - Полное название лаунчера без пробелов и латинским именем. Говорит лаунчеру о том как лаунчер называется на сервере чтобы проверять обновления. Причем независимо от того как называется лаунчер у игрока(например игрок его переименовал с JMCLauncher.jar в Лаунчер Пантерии.jar) то лаунчер автоматически будет обновляться у него в его же личное название.
    "WindowTitle" - Название окна лаунчера которое отображается в заголовке окна.
    "HostUrl" - задаем адресс вашего сайта, Лаунчер проверяет есть ли коннект к вашему сайту именно через эту ссылку и если есть говорит что все оналйн функции будут работать.
    "NewsUrl" - путь до вашей странички новостей которая бедут отображаться в лаунчере
    "clientnames" - Названия каждого клиента(До 255 штук) . Вписываем сюда имена которые придумали еще на стадии задачи а именно "Techno 1.4.7" а второй "Техно мир 1.6.2" . Обратите внимание на синтаксис их записи в файле и будьте внимательны.
    "clientdirnames" - Сюда вписываем названия рабочих папок клиентов которые придумали еще на стадии задачи, у меня это "techno147" и "techno162" . Тут важный момент что если в "clientnames" первым написан Techno 1.4.7" то тут на первом месте должна быть его рабочая папка "techno147".
    "AuthUrl" - полный путь до скрипта авторизации лаунчера.
    "RegUrl" - Ссылка на страницу регистрации на вашем сайте.

    Сохраняем конфиг не забывая про ANSI кодировку.

    Теперь идем в Configs\clientinfo\ . Тут мы создаем html странички с кратким содержанием информации о клиенте и\или сервере. Названия берем те которые написали в CoreConfig.json в параметре"clientdirnames" . Т.е. в нашем случае необходимо создать 2 html странички с названием techno147.html и techno162.html. Эти странички будут отвечать за инфу о клиенте если сервер не доступен. Точно также создаем или изменяем мои конфиги json(techno147.json и techno162.json). Подробно я опишу только один конфиг techno162.json (кодировка снова обязательно ANSI). Содержимое такое:
    Код:
    {
    "info": "",
    "RunAsOlderMinecraft": false,
    "RunMinecraftAsFML16x": true,
    "DownloadZipList":["bin.zip","assets.zip","config.zip","mods.zip"]
    }
    
    "info" - Пока присутствует но будет убрано в следующей версии. Параметр обязательно должен быть! иначе могут быть проблемы в работе
    "RunAsOlderMinecraft" - Булевой тип (false либо true). Говорит лаунчеру что этот клиент надо запускать старым методом(все старые майнкрафты). Т.к. этот конфиг для майнкрафта 1.6.2 то выставляем false
    "RunMinecraftAsFML16x" -Булевой тип (false либо true). Говорит лаунчеру о том как именно запускать игру, При false лаунчер будет запускать игру как чистый ванильный клиент, при true как модифицированный майнкрафт.
    "DownloadZipList" - тут вписываем имена архивов которые мы создали в пункте подготовки клиентов. Будьте внимательны с синтаксисом.

    Сохраняем все конфиги и запаковываем обратно в лаунчер.

    Теперь идем на сервер в папку которую указали в CoreConfig.json в параметре "ClientDownloadRootFolder" , у меня это "http://pantheria.ru/MineCraft/MinecraftDownload/NewLauncher/" . Тут нам снова понадобятся названия рабочих папок которые мы вписывали в CoreConfig.json в параметр "clientdirnames" , у меня это "techno147" и "techno162" . Создаем папки по этим названиям и копируем в каждую принадлежащую ей html с описанием который мы ложили рядом с конфигом клиента только изменяем название на info.html . Теперь копируем в каждую папку его дистрибутив который мы подготовили в самом начале(все zip архивы). Создаем в каждой папке файл md5check.php (он какразтаки и будет говорит лаунчеру обновлся какойто архив или нет) с содержимым:
    PHP:
    <?php
    $file 
    $_POST['file'];
    exit(
    md5_file($file));
    ?>
    Сохраняем и даем права на выполнение скрипта.

    Теперь финальное действие. Копируем наш лаунчер в корень "ClientDownloadRootFolder" и названием "LauncherFileName". Именно отсюда будет обновляться лаунчер. Сам лаунчер будет автоматически определять изменился ли размер лаунчера на сервере и если да он моментально обновляет себе(моментально потому что лаунчер весит меньше 80 кб).

    Все настройка окончена. Теперь можете запускать и пользоваться лаунчером, Если вам понадобится обновить лаунчер то вы просто загружаете новую версию на сервер и все клиенты автоматически обновятся, если вы обновить какой либо архив в дистрибутиве с любым клиентом то у всех игроков он также автоматически обновится. Никакого шаманства не нужно, все просто и легко.

    Для редактирования интерфейса понадобится Java FX Scene Builder который нужно скачать с http://www.oracle.com/technetwork/java/javafx/tools/index.html.

    Скриншоты будут позже.

    Из архива лаунчера достаем 2 формы из папки jmclauncherfx с названиями MainForm.fxml и OptionsWindow.fxml . Как нетрудно догадаться это главная форма и форма с опциями. Открываем и видим удобный интерфейс конструктора, делаем что душе угодно, пишем свои css стили с клевыми эффектами и т.п.

    Важно ни в коем случае не менять fxid у компонентов и их тип(заменять например прогрессбар на текстовое поле и т.п.). Можно добавлять свои небольшие компоненты типо лейблов и панелей. Можно по необходимости убрать скрыть например панель новостей выставив в свойствах невидимость но ни в коем случае нельзя удалять компоненты которые уже есть на формах.
    В интернете куча видеогайдов и статей как сделать красиво с помощью редактора. Описывать все возможности и мануал у меня уже сил не осталось =(.

    Скачать готовы лаунчер и исходники можно отсюда:
    (все конфиги реальные и в боевых условиях)
    pantheria.ru/MineCraft/MinecraftDownload/JMCLauncherFX.jar
    |Исходники|

    На всякий случай закинул все необходимое на гуглодиск(лаунчер,пример скинов, клиент ванилы и техно) https://drive.google.com/folderview?id=0B7oNw-Nr1ciRN1dxSDhMZVVGYmM&usp=sharing
    Обновления еще будут но хз как скоро, завал с работой и диплом приближается к сдаче.

    Если вы хотите выразить благодарность мне материально:
    [WebMoney RUB] R201451785464
    [QIWI] +79873195616
     
    Последнее редактирование: 14 янв 2014
    poiNt_3D, andreivvs, craZZ и 24 другим нравится это.
  2. CoLLaPssE

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

    Баллы:
    103
    Имя в Minecraft:
    CoLLaPssE
    скрины
     
  3. MrMario1337

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

    Баллы:
    103
  4. DIMASIK1502

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

    Баллы:
    78
    Имя в Minecraft:
    DIMASIK1502
    Мне нравится:)
     
  5. Автор темы
    dimana90

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

    Баллы:
    103
    Update 0.4
    Новое:
    1. Добавлена возможность установки параметра XX:MaxPermSize для ява машины в настройках
    2. Добавлена но не проверена поддержка Linux и OS X
    3. Добавлена возможность оффлайн игры при отсутствии интернета(клиент должен быть скачан)
    Закрытые баги:
    1. Исправлен висяк лаунчера при неправильном логине\пароле
    2. Лаунчер похудел с 776 435 кб до 254 270 кб !
    3. Исправлена кнопка открытия каталога с текущим клиентом в настройках.
    4. Некоторые оптимизации кода
    5. Небольшие исправления с возможными исключениями и ошибками
    TO DO на новый релиз(заявки также принимаются в теме):
    1. Написание функционала принудительного обновления через настройки
    2. Возможно переход с yml формата на json для дальнейшего уменьшения размера лаунчера
    3. Обработка еще большего количества исключение
    Попробую оживить обсуждение в теме, поэтому задам пару вопросов по сомнительному функционалу:
    1. Нужна ли опциональная функция автоматического подключения к серверу во время запуска игры?
    2. Нужны ли какие либо опциональные параметры принимаемые во время запуска, какие на ваш взгляд?
    3. Ваши предложения по функционалу принимаются.
     
    Sanek001, dmtriy, DevilEz_Mc и 5 другим нравится это.
  6. DevilEz_Mc

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

    Баллы:
    103
    Имя в Minecraft:
    DevilEz
  7. misha124

    misha124 Активный участник

    Баллы:
    68
    Имя в Minecraft:
    misha124
    Хотелось бы узнать о защите
     
  8. andrew20

    andrew20 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    andrew20
    Автор мне сказал, что защиту он будет делать в следующих версиях, md5 кеширование вроде есть.
     
  9. sugarcubie

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

    Баллы:
    63
    Перспективно! Готов стать бета-тестером и внедрить его на своём проекте. На первое время прикрутил свою проверку по md5. Сейчас донастрою вёб-часть, да пущу народ, найденные баги буду сообщать.
     
    slavik123123123 нравится это.
  10. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    Расскажи процесс создания клиента 1.6.2
    + буду очень благодарен если выложишь видеогайд( я нуб в webmrc(так как у меня дле) )
     
  11. Автор темы
    dimana90

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

    Баллы:
    103
    Сразу оговорюсь что лаунчер в данный момент не умеет запускать fml версии 1.6.х, сейчас это в процессе реализации. Т.е. текущая версия лаунчера умеет запускать только старые версии майнкрафта с fml или ванильные и ТОЛЬКО ванильные 1.6.х.
    Клиент подготавливается таким способом:
    1) Создаем директорию в которой будем собирать клиент.
    2) Копируем в ее корень папку assets
    3)Создаем папку bin и копируем в нее все ФАЙЛЫ! из каталога и подкаталогов libraries
    4)Создаем папку bin\natives и ищем в libraries все файлы с расширением dll,jnilib и so . Копируем их в natives которую создали.
    5)Копируем в bin сам jar майнкрафта из папки versions/версиямайна(1.6.х)/название_файла.jar
    Рабочий пример ванилы 1.6.2 можете скачать и посмотреть с
    pantheria.ru/MineCraft/MinecraftDownload/NewLauncher/vanila162/bin.zip
    pantheria.ru/MineCraft/MinecraftDownload/NewLauncher/vanila162/content.zip

    PS: на самом деле из libraries нужны далеко не все файлы но искать именно нужные игре у меня руки еще не дошли.
     
  12. sugarcubie

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

    Баллы:
    63
    С клиентом всё понятно, спасибо. Я скачал образец и начал его ковырять. Прикручиваются standalone моды нормально, встал оптифайн, TMI, минимапа рея.

    Кстати, 1.6.4 запустился без проблем, если не тестили ещё.
     
    dimana90 нравится это.
  13. Автор темы
    dimana90

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

    Баллы:
    103
    Не тестил, спасибо.
     
    Сникерсни нравится это.
  14. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    Просит обновить лаунчер, что делать? где версию писать?
     
  15. Автор темы
    dimana90

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

    Баллы:
    103
    Если стоит вебмцр то посмотри какая версия лаунчера указана в панели управления и впиши ее в CoreConfig.yml в поле Version .
    Старый костыль которого не будет т.к. система обновления будет своя и похожая на принцип обновления клиента, т.е. не привязки к вебмцр в данном случае не будет.

    Баги еще есть т.к. версия все же сыровата и присутствуют костыли. Сейчас я занимаюсь написание запуска fml модификации 1.6.х , потом будет автообновлятор лаунчера, потом скорее всего будет отказ от jml в пользу json для уменьшения кода и размера лаунчера. Т.е. для меня сейчас самое главное в максимально короткий срок заложить весь функционал и по дороге править баги мешающие ему нормально и легко работать. Потом уже пойдет чистка кода и реорганизации некоторых методов, отказ от глобальных переменных. Далее в стабильной версии скорее всего будут написаны некоторые расширения индивидуальные и вынес необходимых апи для написания сторонних расширений.
    В общем и целом главная цель не изменна, а это написать лаунчер который сможет запускать абсолютно любую версию игры а также привлечь как профессионального админа-кодера который сможет переписать некоторые аспекты под себя так и совершенно не умеющих\не желающих что то кодить но при этом иметь продукт который максимально прост и легок в настройке.
     
    ВремяПриключений и Аравир нравится это.
  16. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    Спс, указал, всё почти норм, после авторизации не качает клиет, висят полоски и всё
     
  17. Автор темы
    dimana90

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

    Баллы:
    103
    Скинь конфиги все, быстрее пойму в чем дело.
    Надо будет ввести дебаг режим в лаунчере как нибудь что бы анализировать ошибки, сейчас в большинстве случаев на ошибку заглушки висят:(
     
    Аравир нравится это.
  18. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    Кстати, насчёт дебага, netbians в помощь, а пока конфиги:
    Код:
    version: 13
    released: 2013-09-21
    workdir: ExpCraft
    mainwindowtitle: ExpCraft launcher
    host: http://exp-craft.zz.mu/
    newsurl: http://exp-craft.zz.mu/777/news.php
    clientnames:
      - Techno 1.4.7
      - Vanila 1.6.2
    clientdirnames:
      - techno147
      - vanila162 
    authurl: http://exp-craft.zz.mu/MineCraft/auth.php
    regurl: http://exp-craft.zz.mu/index.php?mode=start
    launcherdownloadlink: http://exp-craft.zz.mu/index.php?mode=start
    clientdownloadroot: http://pantheria.ru/MineCraft/MinecraftDownload/777/
    Остальное я не трогал, клиенты тож твои, md5check создал
    заметил что неправильно -
    1. newsurl: http://exp-craft.zz.mu/777/news.php

    Хотел спросить эти файлы (.gitattributes , build.xml и ещё 2 ) их када нибудь надо заливать?
    А, тупанул, нашёл ошибку
    1. clientdownloadroot: http://pantheria.ru/MineCraft/MinecraftDownload/777/
     
  19. Автор темы
    dimana90

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

    Баллы:
    103
    Код:
    clientdownloadroot: http://pantheria.ru/MineCraft/MinecraftDownload/777/
    хост то мой указан :)
    Вопрос такой к заинтересованныйм, стоит ли параметры authurl, regurl и clientdownloadrootвынести в конфиг каждого клиента индивидуально? По факту добавит переносимости и союзную систему для серверов.
    Т.е. по факту можно будет найти еще несколько серверов, договориться и добавить друг друга в лаунчерах, получится взимопомощь и взимопиар обоим а значит и профит каждому владельцу сервера. Немного осложнит технически для меня в реализации т.к. надо будет разрабатывать и семну логина и пароля индивидуально но вполне реально.
     
  20. sugarcubie

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

    Баллы:
    63
    Такого ещё нигде не видел. Будет полезно для альянсов, но имхо, это уже индивидуальный заказ должен быть. Я ещё ни один альянс не встречал такого плана.)

    P.S. С кнопочки "я нашёл баг" ссылку было бы здорово вывести в конфиг :)
     

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