Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.

Обсудим Лепим пиратский лаунчер на c#

Тема в разделе "Управление сервером Bukkit", создана пользователем Oinvizion Craft, 27 сен 2016.

  1. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Требуется помощь! Желательно по-быстрее!
    И так, я решил написать лаунчер для майнкрафта, как бы это ужасно не звучало...... на c#. (Только не обвиняйте меня в этом)
    Моя первая идея, это взять любой пиратский лаунчер с консолью и в настройках включить полную команду запуска майна, затем просто стащить эту команду
    C:\Program Files\Java\jre1.8.0_66\bin\javaw.exe -XX:HeapDumpPath=ThisTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx7000M -Djava.library.path=C:\Users\Имя_пользователя\AppData\Roaming\minecraft\versions\Forge 1.7.2\natives -cp C:\Users\Имя_пользователя\AppData\Roaming\minecraft\libraries\fyberoptic\forgefix\1.7.2\forgefix-1.7.2.jar;C:\Users\Имя_пользователя\AppData\Roaming\minecraft\libraries\net\minecraftforge\forge\1.7.2-10.12.2.1147\forge-1.7.2-10.12.2.1147.jar;

    тут уйма всяких библиотек

    C:\Users\Имя_пользователя\AppData\Roaming\minecraft\libraries\net\minecraft\launchwrapper\1.9\launchwrapper-1.9.jar;C:\Users\Имя_пользователя\AppData\Roaming\minecraft\versions\Forge 1.7.2\Forge 1.7.2.jar -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true -Xms256M -XX:+UseG1GC -XX:ConcGCThreads=4 -Xms7000m -Xmx7000m net.minecraft.launchwrapper.Launch --username player --version Forge 1.7.2 --gameDir C:\Users\Имя_пользователя\AppData\Roaming\minecraft --assetsDir C:\Users\Имя_пользователя\AppData\Roaming\minecraft\assets\virtual\legacy --uuid 00000000-0000-0000-0000-000000000000 --accessToken null --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --width 1670 --height 980

    И тут и есть самая большая проблема!!! Как переделать эту команду на c#???????????

    Недавно на просторах гугла накопал кучу костыльного кода для запуска майна, спустя немного времени, я выделил из него то, что мне надо:

    string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    string MinePath = appData + "\\minecraft"; (не пишите про то, что папка называется не .minecraft, а просто minecraft!!!)

    ProcessStartInfo mcStartInfo = new ProcessStartInfo("javaw.exe", "-Xincgc -Xms1G -Xmx1G" +

    " -Djava.library.path=\"" +

    MinePath + "\\versions\\1.7.2\\natives\"" + " -cp \"" +

    MinePath + "\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;" +

    гора библиотек

    MinePath + "\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;" +

    MinePath + "\\versions\\1.7.2\\1.7.2.jar\" " +

    "net.minecraft.client.main.Main " +

    "--username " + textBox1.Text + " --version 1.7.2 --gameDir " +

    MinePath + " --assetsDir " +

    MinePath + "\\assets\\virtual\\legacy --accessToken 1");

    Process.Start(mcStartInfo);

    И после многочисленных доработок этот код таки запустил майнкрафт 1.7.2!

    Я пробовал поставить первый код по этой же структуре, но ничего не вышло! Программа 1-2 секунду что-то думает и....... всё! Никакой рекции!

    Так вот, тут есть хотя бы один мудрец, который скажет, как перевести ту команду, которую я писал в 1 случае на c#!

    В основном мне это надо для версий Forge 1.7.10, Forge 1.7.2, Vanilla 1.10, Vanilla 1.8

    Кстати, это уже 3 форум, где я задаю этот вопрос, и пока нигде никто ничего не знает!
    Прошу помощи! Буду очень благодарен! Заранее спасибо!
     
  2. Mr Hosting
  3. KobaltMr

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

    Баллы:
    88
    Skype:
    mr.dill9
    Я просто брал команду запуска из TLauncher и в лаунчере выполнял её как обычную cmd команду
     
  4. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Я просто парсю папку бин и набираю из нее класспатч, аргументы запуска определяю по наличию или отсутствию классов форджа и лайтлоадера. В труелаунчере, я парсю json файл version и беру с него класспатч и аргументы запуска.
    А тс больной на всю башку видимо. Как и чел постом выше.
     
    Последнее редактирование: 27 сен 2016
  5. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    В этом-то вся и фишка! Так можно запустить только Vanilla-клиент, а Forge оно не запускает, я сам хз почему!
    Пробовал сначала через обычный батник по этому принципу:
    Код (Text):
    1. javaw.exe команда_запуска_майна
    Запускает только без Forge! А с Forge просто пропускает команду и всё!
    Я беру команду запуска любой версии без Forge, всё норм, а всё тоже самое, но для Forge... НИФИГА!
    Тогда уже другой вопрос, как запустить Forge при помощи cmd команды??
    И кстати, за то что напомнил про запуск через cmd команду, огромное спасибо тебе!
     
  6. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Там запуск отличается же. Другой главный класс и твик класс.
     
  7. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Ну твика на vanilla вообще нет! Может его как-то надо по-другому прописывать? А не просто:
    --tweakClass cpw.mods.fml.common.launcher.FMLTweaker
    --- Сообщения объединены: 27 сен 2016, предыдущее сообщение: 27 сен 2016 ---
    Я беру команду целиком, просто копирую из консольки тлаунчера и в батник! С чистыми, без Forge версиями всё норм! А вот если взять команду для Forge, он её тупо посылает!
     
  8. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Весь запуск и класспатч прописан в json файле. Читаешь его и берешь с него запуск.
     
  9. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Для меня JSON как китайский язык! Объясни, почему нельзя просто стащить команду запуска из консоли TLauncher-а?
    --- Сообщения объединены: 27 сен 2016, предыдущее сообщение: 27 сен 2016 ---
    Ведь чистые версии она при переносе в cmd запускает прекрасно! А вот с Forge - нихрена!
    --- Сообщения объединены: 27 сен 2016 ---
     
  10. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    А ты хоть пробовал? Уверен что на шарпе полно примеров как его читать. И тебе все равно придется учится его парсить. Иначе так до старости будешь искать строку запуска под все новые версии.
     
  11. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Хорошо, допустим мы его прочитали.
    И какая должна быть структура выходной команды в шарпе?
    --- Сообщения объединены: 27 сен 2016, предыдущее сообщение: 27 сен 2016 ---
    И какие именно параметры нужны из JSON-а для запуска майна, а то как я понял такие параметры, как
    "time": "2016-07-17T05:18:17-05:00",
    "releaseTime": "2013-10-25T08:00:00-05:00"
    не нужны =D, какие именно брать? И как их составить для запуска майна
     
  12. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    1) Ну первое, аргументы запуска minecraftArguments:
    2) Главный класс mainClass:
    3) Библиотеки libraries: тут придется подумать, чтобы собрать путь до джарника.
    4) inheritsFrom: если есть, 2й файл от куда нужно добавить libraries:
    5) jar: если есть, из какой папки брать джарник клиента.
     
  13. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Теперь буду гуглить про чтение JSON-ов!
    Эх и долгое это будет занятие............
     
  14. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Там нет ничего сложного, по сути те же самые объекты String, int, ArrayList, HashMap и тп. Переменная - значение.
     
  15. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Да уже понял, только вот сам метод чтения...
    --- Сообщения объединены: 27 сен 2016, предыдущее сообщение: 27 сен 2016 ---
    Ну всё! Принцип считывания я понял, сейчас сделаю считывание всего того, что ты написал, но вопрос, что потом делать с этими переменными, и ещё если можно про считывание либраинсов по-подробнее.
     
  16. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Ну тебе нужно привести args.args:args1:args2 к такому виду args/args/args1/args2/args1-args2.jar
     
  17. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Слушай, я уже весь мозг сломал, помоги, как пропарсить либрариансы?
    --- Сообщения объединены: 27 сен 2016, предыдущее сообщение: 27 сен 2016 ---
    Я так понял это что-то типа цикла должно быть?
    --- Сообщения объединены: 27 сен 2016 ---
    Ура! Нарыл я способ считать все библиотеки! Короче всё! У меня имеется читатель JSON, что теперь делать с этими данными?
    Вот результат считывания:
    Либрариансы: tlauncher.forge.config:FixSplashScreen:1.0; net.minecraftforge:forge:1.7.10-10.13.4.1558-1.7.10; net.minecraft:launchwrapper:1.12; org.ow2.asm:asm-all:5.0.3; com.typesafe.akka:akka-actor_2.11:2.3.3; com.typesafe:config:1.2.1; org.scala-lang:scala-actors-migration_2.11:1.1.0; org.scala-lang:scala-compiler:2.11.1; org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2; org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2; org.scala-lang:scala-library:2.11.1; org.scala-lang:scala-parser-combinators_2.11:1.0.1; org.scala-lang:scala-reflect:2.11.1; org.scala-lang:scala-swing_2.11:1.0.1; org.scala-lang:scala-xml_2.11:1.0.2; lzma:lzma:0.0.1; net.sf.jopt-simple:jopt-simple:4.5; com.google.guava:guava:17.0; org.apache.commons:commons-lang3:3.3.2; com.mojang:realms:1.3.5; org.apache.commons:commons-compress:1.8.1; org.apache.httpcomponents:httpclient:4.3.3; commons-logging:commons-logging:1.1.3; org.apache.httpcomponents:httpcore:4.3.2; java3d:vecmath:1.3.1; net.sf.trove4j:trove4j:3.0.3; com.ibm.icu:icu4j-core-mojang:51.2; net.sf.jopt-simple:jopt-simple:4.5; com.paulscode:codecjorbis:20101023; com.paulscode:codecwav:20101023; com.paulscode:libraryjavasound:20101123; com.paulscode:librarylwjglopenal:20100824; com.paulscode:soundsystem:20120107; io.netty:netty-all:4.0.10.Final; com.google.guava:guava:15.0; org.apache.commons:commons-lang3:3.1; commons-io:commons-io:2.4; commons-codec:commons-codec:1.9; net.java.jinput:jinput:2.0.5; net.java.jutils:jutils:1.0.0; com.google.code.gson:gson:2.2.4; com.mojang:authlib:1.5.21; org.apache.logging.log4j:log4j-api:2.0-beta9; org.apache.logging.log4j:log4j-core:2.0-beta9; org.lwjgl.lwjgl:lwjgl:2.9.1; org.lwjgl.lwjgl:lwjgl_util:2.9.1; org.lwjgl.lwjgl:lwjgl-platform:2.9.1; net.java.jinput:jinput-platform:2.0.5; tv.twitch:twitch:5.16; tv.twitch:twitch-platform:5.16; tv.twitch:twitch-external-platform:4.5; minecraftArguments: --username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userProperties ${user_properties} --userType ${user_type} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker Главный гласс: net.minecraft.launchwrapper.Launch
    --- Сообщения объединены: 27 сен 2016 ---
    Если что, вот сам JSON: https://yadi.sk/d/tFnZGACDvoxoF
     
    Последнее редактирование: 27 сен 2016
  18. GoodCoder

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

    Баллы:
    76
    Что тут не понятно? ${assets_root} - это как бы переменные. Через string replace заменяешь их на значения. Разве это так сложно?
     
  19. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    "jar": "1.7.10" путь до джарника versions/1.7.10/1.7.10.jar
    "minecraftArguments": тут проверяешь наличие аргументов и подменяешь их значения --username ${auth_player_name}
    "mainClass": Майн класс с которого запускается клиент.
    "assets": "1.7.10" имя файла в папке assets/indexes/1.7.10.json
    "libraries": [ класспатч всех джарников.
    "name": "net.minecraftforge:forge:1.7.10-10.13.4.1558-1.7.10",
    name: тут путь до джарника, писал выше как юзать.
    natives: означает что тут джаркик внутри которого dll шки, ${arch} архитектура 32 или 64.
    Полные нативы качай с сайта lwjgl под 32 и 64. Только версию не перепутай.
     
  20. MySt1k

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

    Баллы:
    173
    Хотел скинуть код, но не смог, ибо данные на убитом HDD :(
    На C# реализовывал запуск майна через JNI с помощью библиотеки от @HoShiMin.
    Думаю, ТС`у это было бы полезней, чем просто голый стартер майна.
     
  21. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Пусть сперва json осилит, чтоб хоть как то запустить.
     

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