Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

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

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

  • Определенно да!

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

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

    53 голосов 19,4%
Подскажите, вот я скачал исходники JMCLauncherFX-test v0.8 и при компилировании лаунчера выдаётся ошибка. Использую Java 7 u21
ant -f "C:\\Users\\Admin\\Desktop\\Minecraft Yomu\\JMCLauncherFX-test\\JMCLauncherFX-test" jfx-rebuild
init:
deps-clean:
Created dir: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build
Updating property file: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\built-clean.properties
Deleting directory C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build
clean:
init:
deps-jar:
Created dir: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build
Updating property file: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\built-jar.properties
Created dir: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\classes
Created dir: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\empty
Created dir: C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\generated-sources\ap-source-output
Compiling 30 source files to C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\build\classes
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:70: error: cannot find symbol
Utils.openLink(new URL(GlobalVar.RegURL).toURI());
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:70: error: cannot find symbol
Utils.openLink(new URL(GlobalVar.RegURL).toURI());
symbol: variable Utils
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:72: error: cannot find symbol
Utils.LogPrint("web", "Error open link to registration");
symbol: variable Utils
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:79: error: cannot find symbol
GlobalVar.userName = UsernameField.getText();
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:80: error: cannot find symbol
GlobalVar.password = UserpassField.getText();
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:92: error: cannot find symbol
GlobalVar.CurrentServer = ComboBoxClients.getSelectionModel().getSelectedIndex();
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:93: error: cannot find symbol
ConfigLoaderCore cfs = new ConfigLoaderCore();
symbol: class ConfigLoaderCore
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:93: error: cannot find symbol
ConfigLoaderCore cfs = new ConfigLoaderCore();
symbol: class ConfigLoaderCore
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:94: error: cannot find symbol
cfs.LoadClientConfig(GlobalVar.itemsServers[GlobalVar.CurrentServer]);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:94: error: cannot find symbol
cfs.LoadClientConfig(GlobalVar.itemsServers[GlobalVar.CurrentServer]);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:99: error: cannot find symbol
if(GlobalVar.isOnline)
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:101: error: cannot find symbol
webEngineClientInfo.load(GlobalVar.DownloadClientRootURL+"/"+GlobalVar.itemsServers[GlobalVar.CurrentServer]+"/"+"info.html");
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:101: error: cannot find symbol
webEngineClientInfo.load(GlobalVar.DownloadClientRootURL+"/"+GlobalVar.itemsServers[GlobalVar.CurrentServer]+"/"+"info.html");
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:101: error: cannot find symbol
webEngineClientInfo.load(GlobalVar.DownloadClientRootURL+"/"+GlobalVar.itemsServers[GlobalVar.CurrentServer]+"/"+"info.html");
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:107: error: cannot find symbol
BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/Configs/clientinfo/"+GlobalVar.itemsServers[GlobalVar.CurrentServer]+".html"), "UTF-8"));
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:107: error: cannot find symbol
BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/Configs/clientinfo/"+GlobalVar.itemsServers[GlobalVar.CurrentServer]+".html"), "UTF-8"));
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:120: error: cannot find symbol
ConfigLoaderCore cfg = new ConfigLoaderCore();
symbol: class ConfigLoaderCore
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:120: error: cannot find symbol
ConfigLoaderCore cfg = new ConfigLoaderCore();
symbol: class ConfigLoaderCore
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:127: error: cannot find symbol
GlobalVar.isRememberUserNamePass = CheckBoxSavelogin.isSelected(); //Стоит ли галка о запоминании данных
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:128: error: cannot find symbol
if(GlobalVar.isOnline)// is Online?
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:130: error: cannot find symbol
if(Utils.login(GlobalVar.userName, GlobalVar.password))//Login succes ?
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:130: error: cannot find symbol
if(Utils.login(GlobalVar.userName, GlobalVar.password))//Login succes ?
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:130: error: cannot find symbol
if(Utils.login(GlobalVar.userName, GlobalVar.password))//Login succes ?
symbol: variable Utils
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:134: error: cannot find symbol
RunGame.Init(ProgressCurrent,ProgressGlobal); //Запускаем обновление, потом игру
symbol: variable RunGame
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:145: error: cannot find symbol
GlobalVar.sessionId = "000000";
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:146: error: cannot find symbol
MCGameRuner grun = new MCGameRuner();
symbol: class MCGameRuner
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:146: error: cannot find symbol
MCGameRuner grun = new MCGameRuner();
symbol: class MCGameRuner
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:174: error: cannot find symbol
if(GlobalVar.isOnline){
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:175: error: cannot find symbol
webEngineNews.load(GlobalVar.NewsURL);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:177: error: cannot find symbol
ObservableList<String> ClientNames = FXCollections.observableArrayList(GlobalVar.ClientNames);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:179: error: cannot find symbol
ComboBoxClients.getSelectionModel().select(GlobalVar.CurrentServer);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:180: error: cannot find symbol
UsernameField.setText(GlobalVar.userName);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\MainFormController.java:181: error: cannot find symbol
UserpassField.setText(GlobalVar.password);
symbol: variable GlobalVar
location: class MainFormController
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\api\fsMan.java:131: error: cannot find symbol
path = URLDecoder.decode(getWorkingDirectory() + File.separator + GlobalVar.itemsServers[GlobalVar.CurrentServer],"UTF-8");
symbol: variable GlobalVar
location: class fsMan
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\src\jmc\api\fsMan.java:131: error: cannot find symbol
path = URLDecoder.decode(getWorkingDirectory() + File.separator + GlobalVar.itemsServers[GlobalVar.CurrentServer],"UTF-8");
symbol: variable GlobalVar
location: class fsMan
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
35 errors
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\nbproject\jfx-impl.xml:3438: The following error occurred while executing this line:
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\nbproject\build-impl.xml:924: The following error occurred while executing this line:
C:\Users\Admin\Desktop\Minecraft Yomu\JMCLauncherFX-test\JMCLauncherFX-test\nbproject\build-impl.xml:264: Compile failed; see the compiler error output for details.
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 2 секунды)
 
LMCLauncherFX 0.7.1
823554a4c4.jpg

На скриншоте главное окно со стандартным шаблоном.

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

Возможности текущей версии:
  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​
Вопросы только по сборке в нетбисе)
 
Сейчас другой лаунчер в разработке где почти все ошибки учтены и проект пашит на мавене т.е. следующий будет уже собираться в любой ide.
 
Сейчас другой лаунчер в разработке где почти все ошибки учтены и проект пашит на мавене т.е. следующий будет уже собираться в любой ide.
Да я вписал что нужно и у меня тупо лаунчер не открывается...
 
Попробуй так
Код:
{
"id": "1.7.10-Forge10.13.0.1208",
"mainClass": "net.minecraft.launchwrapper.Launch",
"minecraftArguments": "--username ${auth_player_name} --version 1.7.10 --gameDir ${game_directory} --assetsDir ${game_assets} --assetIndex 1.7.10 --uuid ${auth_session} --accessToken ${auth_session} --userProperties {} --userType legacy --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"DownloadZipList":["bin.zip","assets.zip","config.zip","mods.zip"]
}
Нужна помощь! Я хочу сделать клиент версии 1.7.10 с forge, а он просто не запускается, вообще ничего не происходит. Всё делал по инструкции сверху. Вот лог:
Код:
[17:34:38] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[17:34:38] [main/INFO]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[17:34:38] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
[17:34:38] [main/INFO]: Forge Mod Loader version 7.10.85.1230 for Minecraft 1.7.10 loading
[17:34:38] [main/INFO]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_67, running on Windows 8.1:amd64:6.3, installed at C:\Program Files\Java\jre7
[17:34:38] [main/WARN]: The coremod rangatangaa.minecraft.Blocks3D.B3DFMLLoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
[17:34:38] [main/WARN]: The coremod atomicstryker.dynamiclights.common.DLFMLCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
[17:34:38] [main/WARN]: The coremod micdoodle8.mods.miccore.MicdoodlePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
[17:34:38] [main/INFO]: Loading tweaker optifine.OptiFineForgeTweaker from OptiFine_1.7.10_HD_U_A4.jar
[17:34:38] [main/INFO]: Loading tweaker shadersmodcore.loading.SMCTweaker from ShadersModCore-v2.3.22-mc1.7.10-f1208.jar
[17:34:38] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:34:38] [main/INFO]: Loading tweak class name optifine.OptiFineForgeTweaker
[17:34:38] [main/INFO]: Loading tweak class name shadersmodcore.loading.SMCTweaker
[17:34:38] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker
[17:34:38] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:34:38] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:34:38] [main/INFO]: Calling tweak class optifine.OptiFineForgeTweaker
[17:34:38] [main/INFO]: [optifine.OptiFineForgeTweaker:dbg:49]: OptiFineForgeTweaker: acceptOptions
[17:34:38] [main/INFO]: [optifine.OptiFineForgeTweaker:dbg:49]: OptiFineForgeTweaker: injectIntoClassLoader
[17:34:38] [main/INFO]: [optifine.OptiFineClassTransformer:dbg:179]: OptiFine ClassTransformer
[17:34:38] [main/INFO]: [optifine.OptiFineClassTransformer:dbg:179]: OptiFine URL: file:/C:/Users/Дима/AppData/Roaming/.emerald-craft/emerald-craft_1.7.10/.minecraft/mods/OptiFine_1.7.10_HD_U_A4.jar
[17:34:38] [main/INFO]: [optifine.OptiFineClassTransformer:dbg:179]: OptiFine ZIP file: java.util.zip.ZipFile@e060a95
[17:34:38] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:40] [main/INFO]: Found valid fingerprint for Minecraft Forge. Certificate fingerprint e3c3d50c7c986df74c645c0ac54639741c90a557
[17:34:40] [main/INFO]: Found valid fingerprint for Minecraft. Certificate fingerprint cd99959656f753dc28d863b46769f7f8fbaefcfc
[17:34:40] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:40] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:40] [main/INFO]: [rangatangaa.minecraft.Blocks3D.B3DFMLLoadingPlugin:getASMTransformerClass:18]: [Blocks3D]  Class = rangatangaa.minecraft.Blocks3D.ClassPatcher
[17:34:40] [main/INFO]: [rangatangaa.minecraft.Blocks3D.B3DFMLLoadingPlugin:getASMTransformerClass:18]: [Blocks3D]  Class = rangatangaa.minecraft.Blocks3D.ClassPatcher
[17:34:40] [main/INFO]: [rangatangaa.minecraft.Blocks3D.B3DFMLLoadingPlugin:injectData:37]: [Blocks3D] injectData for I3DMod
[17:34:40] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:40] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:40] [main/INFO]: [micdoodle8.mods.miccore.MicdoodlePlugin:getASMTransformerClass:104]: Successfully Registered Transformer
[17:34:41] [main/INFO]: [micdoodle8.mods.miccore.MicdoodlePlugin:injectData:292]: [Micdoodle8Core]: Patching game...
[17:34:41] [main/INFO]: [micdoodle8.mods.miccore.MicdoodlePlugin:injectData:292]: [Micdoodle8Core]: Patching game...
[17:34:41] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:41] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:41] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:34:41] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker
Exception in thread "main" [17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.NoSuchMethodError: com.google.common.io.CharSource.readLines(Lcom/google/common/io/LineProcessor;)Ljava/lang/Object;
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at cpw.mods.fml.common.asm.transformers.AccessTransformer.processATFile(AccessTransformer.java:125)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at cpw.mods.fml.common.asm.transformers.AccessTransformer.readMapFile(AccessTransformer.java:120)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at cpw.mods.fml.common.asm.transformers.AccessTransformer.<init>(AccessTransformer.java:101)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at cpw.mods.fml.common.asm.transformers.AccessTransformer.<init>(AccessTransformer.java:97)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at java.lang.reflect.Constructor.newInstance(Unknown Source)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at java.lang.Class.newInstance(Unknown Source)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at net.minecraft.launchwrapper.LaunchClassLoader.registerTransformer(LaunchClassLoader.java:88)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at cpw.mods.fml.common.launcher.FMLDeobfTweaker.injectIntoClassLoader(FMLDeobfTweaker.java:32)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at net.minecraft.launchwrapper.Launch.launch(Launch.java:115)
[17:34:41] [main/INFO]: [java.lang.Throwable$WrappedPrintStream:println:-1]:  at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Помогите пожалуйста!
 
А лаунчер поддерживает версии 1.7.*???
 
Разобрался уже 3 дня назад, просто забыл об этом написать. В общем проблема была в том что были две лишние библиотеки, назывались как-то так: guava 15.0 и compression lang-lang3 3.1
А лаунчер поддерживает версии 1.7.*???
Лаунчер запускает даже версию 1.8!
 
Разобрался уже 3 дня назад, просто забыл об этом написать. В общем проблема была в том что были две лишние библиотеки, назывались как-то так: guava 15.0 и compression lang-lang3 3.1

Лаунчер запускает даже версию 1.8!
Спасибо за ответ!
А у него с forge проблемы? И почему ссылка на скачивание не работает????
 
Скажите нубу вот скачаю я исходники, как для своего сервера их переделать, какой программой?
 
В чём проблема? Лаунчер начинает скачку клиента.
5f28d60e.png
И когда всё закачивается всё останавливается и ничего больше не происходит.
cc150e78.png

1.4.7 + Forge
 
В новой версии ява фх поменяли обращение к данным и названия методов некоторых, надо втыкать асерты или проверки на обращение к данным. Там сильно вероятно что у меня выпадает исключение но оно не обрабатывается и не выводится в лог т.е. надо это поправить чтобы понять точную проблему. Так же возможен вариант что неправильно сконфигурирован клиент для запуска.
 
В новой версии ява фх поменяли обращение к данным и названия методов некоторых, надо втыкать асерты или проверки на обращение к данным. Там сильно вероятно что у меня выпадает исключение но оно не обрабатывается и не выводится в лог т.е. надо это поправить чтобы понять точную проблему. Так же возможен вариант что неправильно сконфигурирован клиент для запуска.

Яву какой версии нужно?
 
Собиралось когда то под 7u20 кажется. В целом косяк может решится попыткой пересборки на ява 8, он при компиляции будет матюкаться на ошибки и надо будет только их исправить.
 

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

Назад
Верх