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

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

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

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

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

    Баллы:
    76
    И так, я решил написать лаунчер для майнкрафта, как бы это ужасно не звучало...... на c#. (Только не обвиняйте меня в этом)
    На 18 стр я решил написать пробную команду запуска на жаве, но её там дико обосрали, хотя это пробник пробником (это можно сказать, лишь сама команда), но уже прекрасно запускающий майн.
    Моя первая идея (ужасная), это взять любой пиратский лаунчер с консолью и в настройках включить полную команду запуска майна, затем просто стащить эту команду
    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#?
    Спасибо!
     
    Последнее редактирование: 4 апр 2017
  2. KobaltMr

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

    Баллы:
    88
    Имя в Minecraft:
    KobaltMR_
    Я просто брал команду запуска из TLauncher и в лаунчере выполнял её как обычную cmd команду
     
  3. alexandrage

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    76
    Слушай, я уже весь мозг сломал, помоги, как пропарсить либрариансы?
    Я так понял это что-то типа цикла должно быть?
    Ура! Нарыл я способ считать все библиотеки! Короче всё! У меня имеется читатель 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

    Если что, вот сам JSON: https://yadi.sk/d/tFnZGACDvoxoF
     
    Последнее редактирование: 27 сен 2016
  17. alexandrage

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

    Баллы:
    173
    "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. Только версию не перепутай.
     
  18. MySt1k

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

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

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

    Баллы:
    173
    Пусть сперва json осилит, чтоб хоть как то запустить.
     
  20. Автор темы
    Oinvizion Craft

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

    Баллы:
    76
    Всё! Запуск любой версии майна, как vanilla, так и с Forge по JSON-у я сделал.
    Теперь у меня огромнейшая проблема! Это скачивание файлов! Я решил начать с либрариансов. Принцип прост:
    каждый name из librarians из JSON-а проверяются на существование, и если его нет, он проверят на существование все папки, если их тоже нет, он их создаёт. Но тут возникла проблемка!
    С такими библиотеками, как:
    {
    "name": "net.sf.trove4j:trove4j:3.0.3"
    },
    {
    "name": "com.ibm.icu:icu4j-core-mojang:51.2"
    },
    {
    "name": "net.sf.jopt-simple:jopt-simple:4.5"
    },
    всё норм.
    Вот пример одной ссылки:
    https://libraries.minecraft.net/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar
    Все остальные библиотеки грузятся по этому же принципу!

    С загрузкой Forge - файлов, тоже проблем не возникло: Просто читаем exact_url и url из JSON-а, соответствующие каждому name.

    Но кода дело дошло до lwjgl... Тут и пошли проблемы....

    Дело в том, что libraries.minecraft.net некоторые либрариансы не знает!
    org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20131017
    Ссылка выходит такая:
    https://libraries.minecraft.net/org...017/lwjgl-platform-2.9.1-nightly-20131017.jar

    И всё! Лаунчер тупо вылетает!
    Подскажите пожалуйста, как быть с lwjgl, потому что больше половины нельзя скачать!
    Или может их как-нибудь просто взять и пропустить!
    Причём JSON трогать не надо!
    Сейчас заметил, что TLauncher качает не все библиотеки из json. Тогда что же получается, необходимо под каждую версию прописывать какие именно надо качать библиотеки? Или есть какой-нибудь способ узнать по JSON, какие библиотеки качать?
    Ещё сейчас при запуске заметил проблемы со звуком:

    [14:35:16] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:music.menu
    [14:35:30] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:gui.button.press
    Это я решил заменой ${game_assets} не просто на assets, а на \assets\virtual\legacy
    Сколько не рылся пока ни одной толковой идеи по скачиванию файлов, используя JSON не нашёл
    Ура! Спустя 4 часа безуспешного печатания кода, я реализовал загрузку либрариансов по JSON!
    Короче принцип такой:
    У нас есть главный цикл считывания name из libraries
    Затем от строит путь к каждому файлу и проверят, если пути нет, он создаёт папки, затем загружает файл.
    Если при этом существуют параметры exact_url и/или deleteEntries, он грузить exact_url и затем удаляет deleteEntries из скаченного jar, редактируя его как архив и используя Ionic.Zip.dll
    Теперь осталось ещё подумать над закачкой папки assets
    Если кому-нибудь не сложно напишите полный принцип скачивания assets, я примерно уже и сам понял.
    Тут главный файл indexes/legacy.json (путь у нему также указан в JSON-е версии) из которого скачиваются файлы по принципу:
    И потом переименовываются во что надо.
    Но если кому не лень, можете написать!
    Ребят, помогите плиз, как сделать загрузку natives?
     

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