- Баллы
- 103
LMCLauncherFX 0.7.1
На скриншоте главное окно со стандартным шаблоном.
Возможности текущей версии:
Скачать готовы лаунчер и исходники можно отсюда:
(все конфиги реальные и в боевых условиях)
pantheria.ru/MineCraft/MinecraftDownload/JMCLauncherFX.jar
|Исходники|
На всякий случай закинул все необходимое на гуглодиск(лаунчер,пример скинов, клиент ванилы и техно) https://drive.google.com/folderview?id=0B7oNw-Nr1ciRN1dxSDhMZVVGYmM&usp=sharing
Обновления еще будут но хз как скоро, завал с работой и диплом приближается к сдаче.
На скриншоте главное окно со стандартным шаблоном.
Как все начиналось?. Началось примерно в июне сего года когда проект в котором я участвую обзавелся новыми мощностями и было решено поднимать второй сервер на новой версии игры. Тут встала проблема, что старый лаунчер от нотча не умел запускать новую версию игры и не поддерживал мультиклинтность. Кроме того в нем имелось огромное количество неудобностей лично для меня. Тогда же я начал поиск других лаунчеров, но все они не удовлетворяли необходимым мне требованиям а именно кроссплатформенности, мультиклиентности, гибких настроек и возможности кастомизировать загружаемый список файлов для облегчения обновлений на стороне клиента. Поэтому было решено писать свое с блэк джеком и путанами.
Возможности текущей версии:
- Для настройки лаунчера и изменения интерфейса не требуется его компиляция, все настройки хранятся в json файлах внутри архива.
- Возможность полностью изменить интерфейс лаунчера в удобном графическом представлении на привычном css3.
- Запускает любую версию игры.
- Умный апдейтер. Количество архивов на скачивание и распаковку до 255 штук, конфигурируется в json для каждого конкретного клиента. Сверяет и обновляет только изменившиеся архивы. Если название архива соответствует папке в клиенте то происходит очистка папки перед распаковкой.
- Кросплатформенный
- Не требует каких либо хаков в клиентах.
- Работает на стандартном принципе авторизации. На сервере необходим скрипт auth.php(WebMCR,бухарь ...)
- Умеет работать как в стандартом режиме, так в портативном(на флешке и т.д.), а также есть установка в выбранную папку в системы.
- Индивидуальные настройки ява машины для каждого клиента. Возможность выбрать стороннюю ява машину из системы, задать параметры создания ява машины.
- Мультиклиентный.
- Размер меньше 80 кб.
- Исходники на гитхабе
- Бесплатность
- Полноценная страница новостей на движке WebKit с полной поддержкой HTML5 и css3.(Можете делать очень красивые страницы с новостями в лаунчере)
Задача для примера:
Два клиента. Первый майнкрафт 1.4.7 . Второй 1.6.2. Придумываем название каждого , я назову первый "Techno 1.4.7" а второй "Техно мир 1.6.2" . Придумываемкраткое название рабочей папки для каждого , у меня это "techno147" и "techno162".
Все настройка окончена. Теперь можете запускать и пользоваться лаунчером, Если вам понадобится обновить лаунчер то вы просто загружаете новую версию на сервер и все клиенты автоматически обновятся, если вы обновить какой либо архив в дистрибутиве с любым клиентом то у всех игроков он также автоматически обновится. Никакого шаманства не нужно, все просто и легко.
Два клиента. Первый майнкрафт 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 не учитывается) названию папок в клиенте и если находит что папка существует полностью удаляет ее. Функция очень удобная т.к. обновлении становится очень легким и вместо перекачивания всей игры качается только то что обновилось.
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 и видим примерно следующее содержание конфига
Подробнее:
"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 либо 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 (он какразтаки и будет говорит лаунчеру обновлся какойто архив или нет) с содержимым:
Сохраняем и даем права на выполнение скрипта.
Теперь финальное действие. Копируем наш лаунчер в корень "ClientDownloadRootFolder" и названием "LauncherFileName". Именно отсюда будет обновляться лаунчер. Сам лаунчер будет автоматически определять изменился ли размер лаунчера на сервере и если да он моментально обновляет себе(моментально потому что лаунчер весит меньше 80 кб).
Открываем 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"]
}
"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 у компонентов и их тип(заменять например прогрессбар на текстовое поле и т.п.). Можно добавлять свои небольшие компоненты типо лейблов и панелей. Можно по необходимости убрать скрыть например панель новостей выставив в свойствах невидимость но ни в коем случае нельзя удалять компоненты которые уже есть на формах.
В интернете куча видеогайдов и статей как сделать красиво с помощью редактора. Описывать все возможности и мануал у меня уже сил не осталось =(.
Скриншоты будут позже.
Из архива лаунчера достаем 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
[WebMoney RUB] R201451785464
[QIWI] +79873195616
Последнее редактирование:

