Всем привет. Поскольку когда сам искал инфу то сильно страдал, тут хочу разжевать всем кому надо как оно делается.
Для запуска майнкрафта нужно сформировать специальную команду запуска. От версии к версии команда меняется.
Для того чтобы батник сработал правильно нужно соблюдать некоторые условия:
1) Все пути в батнике должны быть абсолютными, файлы и папки к которым они ведут должны существовать.
2) Все пути в батнике нужно взять в двойные кавычки ("путь") иначе они могут не сработать если существуют пробелы.
3) Желательно чтобы в названиях файлов и папок в клиенте не было пробелов.
4) В команде запуска не должно быть переносов строки (enter-ов по простому), вся команда должна быть одной целой строкой.
Мой клиент лежал для примера в папке C:\1\Hyperion\, у вас соответственно будет своя, по этому все пути поменяются.
У меня получился для версии 1.6.4 такой батник (Для наглядности я разделил всю команду запуска энтерами, но внутри батника их быть не должно):
Код:
"C:\Program Files\Java\jre1.8.0_45\bin\javaw.exe"
-Xmx512M
-Djava.library.path="C:\1\Hyperion\versions\ForgeOptiFine_1.6.4\natives"
-cp "C:\1\Hyperion\libraries\optifine\OptiFine\1.6.4_HD_U_D1\OptiFine-1.6.4_HD_U_D1.jar";
"C:\1\Hyperion\libraries\fyberoptic\forgefix\1.6.4\forgefix-1.6.4.jar";
"C:\1\Hyperion\libraries\net\minecraftforge\minecraftforge\9.11.1.965\minecraftforge-9.11.1.965.jar";
"C:\1\Hyperion\libraries\net\minecraft\launchwrapper\1.8\launchwrapper-1.8.jar";
"C:\1\Hyperion\libraries\org\ow2\asm\asm-all\4.1\asm-all-4.1.jar";
"C:\1\Hyperion\libraries\org\scala-lang\scala-library\2.10.2\scala-library-2.10.2.jar";
"C:\1\Hyperion\libraries\org\scala-lang\scala-compiler\2.10.2\scala-compiler-2.10.2.jar";
"C:\1\Hyperion\libraries\lzma\lzma\0.0.1\lzma-0.0.1.jar";
"C:\1\Hyperion\libraries\net\sf\jopt-simple\jopt-simple\4.5\jopt-simple-4.5.jar";
"C:\1\Hyperion\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar";
"C:\1\Hyperion\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar";
"C:\1\Hyperion\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar";
"C:\1\Hyperion\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar";
"C:\1\Hyperion\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar";
"C:\1\Hyperion\libraries\argo\argo\2.25_fixed\argo-2.25_fixed.jar";
"C:\1\Hyperion\libraries\org\bouncycastle\bcprov-jdk15on\1.47\bcprov-jdk15on-1.47.jar";
"C:\1\Hyperion\libraries\com\google\guava\guava\14.0\guava-14.0.jar";
"C:\1\Hyperion\libraries\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar";
"C:\1\Hyperion\libraries\commons-io\commons-io\2.4\commons-io-2.4.jar";
"C:\1\Hyperion\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar";
"C:\1\Hyperion\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar";
"C:\1\Hyperion\libraries\com\google\code\gson\gson\2.2.2\gson-2.2.2.jar";
"C:\1\Hyperion\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar";
"C:\1\Hyperion\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jar";
"C:\1\Hyperion\versions\ForgeOptiFine_1.6.4\ForgeOptiFine_1.6.4.jar"
-Dfml.ignoreInvalidMinecraftCertificates=true
-Dfml.ignorePatchDiscrepancies=true
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:-UseAdaptiveSizePolicy
-Xmn128M net.minecraft.launchwrapper.Launch
--username ReaktivGirl
--session null
--version ForgeOptiFine_1.6.4
--gameDir "C:\1\Hyperion"
--assetsDir "C:\1\Hyperion\assets\virtual\legacy"
--tweakClass cpw.mods.fml.common.launcher.FMLTweaker
--width 925
--height 530
Пример:
start.zip
Далее.
Для тех кто хочет сделать свой лаунчер поведаю как делаю я.
Для написания моя использовать Delphi 7 ибо больше ничего использовать не умею.
В делфи существует несколько способов запускать сторонние файлы:
1) Используя оператор WinExec
Код:
WinExec(PAnsiChar('команда'), SW_SHOWNORMAL);
У меня этот метод работать отказался. Предполагаю что PAnsiChar() просто не способно передать такую длинную строку
2) Используя оператор ShellExecute
Код:
ShellExecute(0,'open','команда',nil,nil,sw_hide);
У меня этот метод заявил что команда слишком длинная и отказался работать.
3) В связи с проблемами в первых двух методах я решил использовать третий способ: Собрать команду запуска, запихнуть ее в батник, запустить батник из делфи.
Вот ключевые куски кода:
Код:
memo1.Text:=le0; //Запихиваем полученную полную команду запуска в мемо
memo1.Lines.SaveToFile('start.bat'); //Сохраняем все что есть в мемо в текстовый (бат) файл, и не спрашивай почему из мемо - потому что так понятнее
ShellExecute(0,'open','start.bat',nil,nil,sw_hide); //Запускаем полученный батник в скрытом режиме (sw_hide - скрыто, для отладки используй sw_show - показывать)
sleep(1000); //Ждем секунду чтобы батник успел выполнится
DeleteFile('start.bat'); //Удаляем нахрен батник, чтобы без нас не запускали потом хитрозадые юзеры
Вот исходник:
source_delphi7.zip
Если кому надо для тестов сам клиент - могу отправить лично, сюда прилагать думаю нерационально.
З.Ы. Наиболее удобно для примера стырить работающую команду запуска из чужого лаунчера, мне например помог TLauncher, в нем в настройках есть галка "Показывать полную команду запуска" благодаря которой из консоли можно эту команду выколупать потом. Отдельное спасибо создателям TLauncher-а.
Если кто предложит вариант запуска из Delphi 7 лучше - буду очень рад. Только пожалуйста с примерами, а то от голых слов толку мало. Так же было бы неплохо если бы кто-нибудь шаристый расписал для нешаристых как работает авторизация.