Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Способ запуска клиента игры из Лаунчера Часть 2

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем Racvol, 22 дек 2012.

  1. shamahn

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

    Баллы:
    78
    Имя в Minecraft:
    shamahn
    Сессию всегда можно перехватить при обращении клиента к серверу и подставить в батник независимо зашифрована она или нет[DOUBLEPOST=1389506390,1389506327][/DOUBLEPOST]Только если шифрование клиента и сервера не изменено
     
  2. Хостинг MineCraft
    <
  3. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Шифрование трафика?
     
  4. shamahn

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

    Баллы:
    78
    Имя в Minecraft:
    shamahn
    уточняю, каким образом?
     
    ПриветОтЛайки нравится это.
  5. Автор темы
    Racvol

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

    Баллы:
    123
    Sirse, я так и не понял что за момент изменения переменной в машине Java, однако как тут и говорили сессию можно перехватить снифером если трафик не шифрован, после того как сессию передали JavaVM ее можно перехватить если клиент взломан.
    Начиная с версии 1.5.2 запускать клиент стало... хм иначе.
    1) minecraft.jar переместился в папку versions\{version} и переименовался в {version}.jar например 1.7.2.jar
    2) нативные библиотеки динамически создаются в папке versions\{version} с рандомным именем
    3) библиотеки классов находятся в \libraries, и каждая по своему собственному пути
    4) библиотеки классов могут отсутствовать после установки minecraft, какие библиотеки нужно подгружать и откуда находятся в versions\{version}\{version}.json

    Вот пример запуска 1.7.2 с установленным Forge на С++
    PHP:
    #include <jni.h>
    #include <windows.h>

    typedef jint(JNICALL *JNI_CREATEJAVAVM)(JavaVM **, JNIEnv **, void *);
    JNI_CREATEJAVAVM jni_JNI_CreateJavaVM NULL;

    static 
    JavaVMjvm NULL;
    static 
    JNIEnvenv NULL;

    extern "C" __declspec(dllexport)
    void __cdecl  CreateMinecraftGame(LPTSTR jvmPathLPSTR optionString0LPSTR optionString1LPSTR optionString2)
    {
        
    //char* jvmPath = "C:\\Users\\Admin\\Documents\\visual studio 2013\\Projects\\Launcher\\Launcher\\bin\\x64\\Debug\\jre7\\bin\\server\\jvm.dll";
        //char* optionString0 = -Xmx2G -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true
        //char* optionString1 =
        //    "-Djava.class.path=C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\minecraft\\launchwrapper\\1.9\\launchwrapper-1.9.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\minecraftforge\\forge\\1.7.2-10.12.0.971\\forge-1.7.2-10.12.0.971.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\ow2\\asm\\asm-all\\4.1\\asm-all-4.1.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\scala-lang\\scala-library\\2.10.2\\scala-library-2.10.2.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\scala-lang\\scala-compiler\\2.10.2\\scala-compiler-2.10.2.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\sf\\jopt-simple\\jopt-simple\\4.5\\jopt-simple-4.5.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\lzma\\0.0.1\\lzma-0.0.1.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\io\\netty\\netty-all\\4.0.10.Final\\netty-all-4.0.10.Final.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\google\\guava\\guava\\15.0\\guava-15.0.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\com\\mojang\\authlib\\1.3\\authlib-1.3.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.0\\lwjgl-2.9.0.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;"
        //    "C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\libraries\\1.7.2-Forge10.12.0.976\\1.7.2-Forge10.12.0.976.jar";
        //char* optionString2 = "-Djava.library.path=C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\versions\\1.7.2-Forge10.12.0.976\\1.7.2-Forge10.12.0.976-natives";

        
    HMODULE hJvm = ::LoadLibrary(jvmPath); // Загружаем jvm.dll
        
    jni_JNI_CreateJavaVM = (JNI_CREATEJAVAVM)GetProcAddress(hJvm"JNI_CreateJavaVM"); //Получаем адреес функции в dll

        
    JavaVMOption options[3];
        
    options[0].optionString optionString0;
        
    options[1].optionString optionString1;
        
    options[2].optionString optionString2;

        
    //Формируем опции запуска виртуальной машины
        
    JavaVMInitArgs args;
        
    args.options options;
        
    args.nOptions 3// Количество опций
        
    args.ignoreUnrecognized FALSE;
        
    args.version JNI_VERSION_1_6;


        
    //Вызываем функцию JNI_CreateJavaVM из dll адресс которой получили ранее
        
    jni_JNI_CreateJavaVM(&jvm, &env, &args);


        
    //Forge 1.7.2 вызываем main функцию класса net.minecraft.launchwrapper.Launch
        
    jclass class_Launch env->FindClass("net/minecraft/launchwrapper/Launch");

        
    jmethodID mid env->GetStaticMethodID(class_Launch"main""([Ljava/lang/String;)V");
        
    jobjectArray str_array env->NewObjectArray(12env->FindClass("java/lang/String"), env->NewStringUTF(""));
        
    env->SetObjectArrayElement(str_array0env->NewStringUTF("--username"));
        
    env->SetObjectArrayElement(str_array1env->NewStringUTF("Player"));
        
    env->SetObjectArrayElement(str_array2env->NewStringUTF("--version"));
        
    env->SetObjectArrayElement(str_array3env->NewStringUTF("1.7.2-Forge10.12.0.976"));
        
    env->SetObjectArrayElement(str_array4env->NewStringUTF("--gameDir"));
        
    env->SetObjectArrayElement(str_array5env->NewStringUTF("C:\\Users\\Admin\\AppData\\Roaming\\.minecraft"));
        
    env->SetObjectArrayElement(str_array6env->NewStringUTF("--assetsDir"));
        
    env->SetObjectArrayElement(str_array7env->NewStringUTF("C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\assets\\virtual\\legacy"));
        
    env->SetObjectArrayElement(str_array8env->NewStringUTF("--accessToken"));
        
    env->SetObjectArrayElement(str_array9env->NewStringUTF("0"));
        
    env->SetObjectArrayElement(str_array10env->NewStringUTF("--tweakClass"));
        
    env->SetObjectArrayElement(str_array11env->NewStringUTF("cpw.mods.fml.common.launcher.FMLTweaker"));

        
    env->CallStaticVoidMethod(class_Launchenv->GetStaticMethodID(class_Launch"main""([Ljava/lang/String;)V"), str_array);
    }
    Я закоментировал что передается в параметрах метода.
    По поводу нативных библиотек которое создаются динамически, я создал папку по пути versions\{version}\{version}-natives разархивировал туда нативные библиотеки и подгрузил с помощь строки
    PHP:
    -Djava.library.path=C:\\Users\\Admin\\AppData\\Roaming\\.minecraft\\versions\\1.7.2-Forge10.12.0.976\\1.7.2-Forge10.12.0.976-natives
    Сами нативные библиотеки находятся в
    libraries\net\java\jinput\jinput-platform и
    libraries\org\lwjgl\lwjgl\lwjgl-platform
     
    Последнее редактирование: 12 янв 2014
  6. dzikar

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

    Баллы:
    88
    Skype:
    kabala1790
    Имя в Minecraft:
    dzikar
    На C# у меня например, шифрование трафика оболочкой лаунчера идёт, и передаёт расшифрованную сесию в майнкрафт. Пока организовываю рандомный таймер, который будет через случайное время посылать запросы авторизации, и счётчик неудачных запросов(от 2 до 5 запросов оболочка лаунчера может не получить потом происходит блокировка, либо кикнет с сервера, либо принудительно будет остановлена ява машина. ). На С++ такое организовать тоже не сложно. Самое проблемотичное было и пока не до конца работает, это шифрование. Слишком много косяков. Но уже школьник не сможет перехватить сессию, алгоритм шифрования достаточно надёжный. и без знания ключа, его долго вскрывать придётся. Проще разлопатить код. Подставить перехваченный код тоже не выйдет, тем же рандомным таймером меняется ключ, после первого запуска.
     
  7. shamahn

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

    Баллы:
    78
    Имя в Minecraft:
    shamahn
    Непосредственно сам клиент при обращении к серверу отправляет ему Get запрос, который легко перехватить, к примеру HTTPAnalyzer. В нем будет логин и сессия, которая вставляется в батник и запускается клиент с читами.
    Если в классе майнкрафт вы не делали изменений, то сессия легко переватывается.
    Также шифрование можно сделать через прокси подключение.[DOUBLEPOST=1389691706,1389691634][/DOUBLEPOST]
    поправка, 1.5.2 еще старый запуск
     
  8. dzikar

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

    Баллы:
    88
    Skype:
    kabala1790
    Имя в Minecraft:
    dzikar
    Всё соединение идёт через некое подобие сокета, через пхп скрипт, как в стандартном лаунчере на ява с небольшой правкой, на сервере, и самим лаунчером в нутре которого запустилась ява машина. Так что вполне устойчивый канал шифрования. Защита хоть и нубская, но школьников поставит в ступор. Более или менее разбирающиеся, шифрование вскроют. Причина прозаична. Так что хоть и простая схема ваши анализаторы покажут фигу. Ибо запрос на подключение пройдёт только после получения второй части ключа для шифрования от сервера. Что плохо, нагрузка на сервер существенная. Каждое соединение это лишняя нагрузка, поэтому и сам метод шифрования пока самый простой и быстрый.
    Если бы кто посоветовал какую хорошую книгу почитать о том как делать шифрование на C#, был бы благодарен.
    В любом случае самый перспективный способ делать лаунчеры, это писать их на нормальных языках программирования, а не на яве.

    ЗЫ Как только сделаю стабильную версию, если это когда нибудь произойдёт, то скину сюда в халявные лаунчеры. :)
     
    Последнее редактирование: 14 янв 2014
  9. Автор темы
    Racvol

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

    Баллы:
    123
    Ты лучше код сразу выкладывай чтобы его можно было покритиковать
     
  10. RunFMe

    RunFMe Участник Пользователь

    Баллы:
    38
    На чем лучше писать лаунчер? У меня диллема, лаунчер не только для майна, но и для других игр, есть вариант писать на c++ с помощью qt или на java. Что лучше, эффективней, быстрей и проще?
     
  11. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Проще - Java. Лучше, эффективней и быстрей - си/делфи.
    Ну и ассемблер.

    @Racvol, вы где-то писали что экспериментировали с запуском JNI в C#, не поделитесь наработками?
     
    Лайка2 нравится это.
  12. RunFMe

    RunFMe Участник Пользователь

    Баллы:
    38
    Ассемблер? Нет, наша жизнь слишком коротка, пожалуй выберу c++ и фреймворк qt
     
    Лайка2, Лайка и alexandrage нравится это.
  13. Автор темы
    Racvol

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

    Баллы:
    123
    ПриветОтЛайки, Лайка2 и Лайка нравится это.
  14. Natsu

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

    Баллы:
    88
    Skype:
    korotickiyvit
    Имя в Minecraft:
    Natsu_Zirok
    Эта страница еще поддерживается автором? Если да, то можно узнать как запускать 1.7.5?:creeper:[DOUBLEPOST=1401863016,1401620268][/DOUBLEPOST]Ребят, что бы найти jni.h надо скачать JRE! (Я сам тупил:eek:)(Для тех кому лень искать в теме)[DOUBLEPOST=1401866729][/DOUBLEPOST]
    Привет, единомышленник по лаунчером, советую C++. Почему? Ответ прост: Java код можно изменить через InClassTranslator.[DOUBLEPOST=1401867403][/DOUBLEPOST]ТС! Хватит спать! Мне надоело уже разбираться с косяками 1.7.5!
     
    ПриветОтЛайки, Лайка2 и mahimamax нравится это.
  15. shamahn

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

    Баллы:
    78
    Имя в Minecraft:
    shamahn
    Так не используй эту версию))
     
    Лайка3, Лайка2 и mahimamax нравится это.
  16. Natsu

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

    Баллы:
    88
    Skype:
    korotickiyvit
    Имя в Minecraft:
    Natsu_Zirok
    я про запуск через JNI.
    Выложить код на 1.7.2 с forge, и не выложить на 1.7.5 ваниль (Хотя за forge отдельное спасибо)
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  17. Автор темы
    Racvol

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

    Баллы:
    123
    Так с forge сложнее было на тот момент, щас все проще что с forge что с ванила, просто фигачиш подготовленный массив строк в main функцию
     
    Лайка3, Mr_RoboMan, mahimamax и ещё 1-му нравится это.
  18. Natsu

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

    Баллы:
    88
    Skype:
    korotickiyvit
    Имя в Minecraft:
    Natsu_Zirok
    Ни чего ни понял:confused:[DOUBLEPOST=1418445264,1402052769][/DOUBLEPOST]ТС, ты тут?! Обновляй тему =) Буду по твоему уроку видеоурок пилить.(Так и не понял как запустить:confused:)[DOUBLEPOST=1418446867][/DOUBLEPOST]
    Код:
    typedef jint(JNICALL *JNI_CREATEJAVAVM)(JavaVM **, JNIEnv **, void *);
    JNI_CREATEJAVAVM jni_JNI_CreateJavaVM = NULL;
    
    static JavaVM* jvm = NULL;
    static JNIEnv* env = NULL;
    
    void CreateMinecraftGame(LPTSTR jvmPath, LPSTR optionString0, LPSTR optionString1, LPSTR optionString2)
    {
        char* jvmPath = "C:\\MLS_Client\\JNI_Files\\jvm.dll";
        char* optionString0 = "-Xmx1G -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true";
        char* optionString1 =
            "-Djava.class.path=C:\\MLS_Client\\libraries\\net\\minecraft\\launchwrapper\\1.9\\launchwrapper-1.9.jar;"
            "C:\\MLS_Client\\libraries\\net\\minecraftforge\\forge\\1.7.2-10.12.0.971\\forge-1.7.2-10.12.0.971.jar;"
            "C:\\MLS_Client\\libraries\\org\\ow2\\asm\\asm-all\\4.1\\asm-all-4.1.jar;"
            "C:\\MLS_Client\\libraries\\org\\scala-lang\\scala-library\\2.10.2\\scala-library-2.10.2.jar;"
            "C:\\MLS_Client\\libraries\\org\\scala-lang\\scala-compiler\\2.10.2\\scala-compiler-2.10.2.jar;"
            "C:\\MLS_Client\\libraries\\java3d\\vecmath\\1.3.1\\vecmath-1.3.1.jar;"
            "C:\\MLS_Client\\libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;"
            "C:\\MLS_Client\\libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;"
            "C:\\MLS_Client\\libraries\\net\\sf\\jopt-simple\\jopt-simple\\4.5\\jopt-simple-4.5.jar;"
            "C:\\MLS_Client\\libraries\\lzma\\0.0.1\\lzma-0.0.1.jar;"
            "C:\\MLS_Client\\libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;"
            "C:\\MLS_Client\\libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;"
            "C:\\MLS_Client\\libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;"
            "C:\\MLS_Client\\libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;"
            "C:\\MLS_Client\\libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;"
            "C:\\MLS_Client\\libraries\\io\\netty\\netty-all\\4.0.10.Final\\netty-all-4.0.10.Final.jar;"
            "C:\\MLS_Client\\libraries\\com\\google\\guava\\guava\\15.0\\guava-15.0.jar;"
            "C:\\MLS_Client\\libraries\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar;"
            "C:\\MLS_Client\\libraries\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar;"
            "C:\\MLS_Client\\libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;"
            "C:\\MLS_Client\\libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;"
            "C:\\MLS_Client\\libraries\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar;"
            "C:\\MLS_Client\\libraries\\com\\mojang\\authlib\\1.3\\authlib-1.3.jar;"
            "C:\\MLS_Client\\libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar;"
            "C:\\MLS_Client\\libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar;"
            "C:\\MLS_Client\\libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.0\\lwjgl-2.9.0.jar;"
            "C:\\MLS_Client\\libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.0\\lwjgl_util-2.9.0.jar;"
            "C:\\MLS_Client\\libraries\\1.7.2-Forge10.12.0.976\\1.7.2-Forge10.12.0.976.jar";
        char* optionString2 = "-Djava.library.path=C:\\MLS_Client\\versions\\1.7.2-Forge10.12.0.976\\1.7.2-Forge10.12.0.976-natives";
    
        HMODULE hJvm = ::LoadLibrary(jvmPath); // Загружаем jvm.dll
        jni_JNI_CreateJavaVM = (JNI_CREATEJAVAVM)GetProcAddress(hJvm, "JNI_CreateJavaVM"); //Получаем адреес функции в dll
    
        JavaVMOption options[3];
        options[0].optionString = optionString0;
        options[1].optionString = optionString1;
        options[2].optionString = optionString2;
    
        //Формируем опции запуска виртуальной машины
        JavaVMInitArgs args;
        args.options = options;
        args.nOptions = 3; // Количество опций
        args.ignoreUnrecognized = FALSE;
        args.version = JNI_VERSION_1_6;
    
    
        //Вызываем функцию JNI_CreateJavaVM из dll адресс которой получили ранее
        jni_JNI_CreateJavaVM(&jvm, &env, &args);
    
    
        //Forge 1.7.2 вызываем main функцию класса net.minecraft.launchwrapper.Launch
        jclass class_Launch = env->FindClass("net/minecraft/launchwrapper/Launch");
    
        jmethodID mid = env->GetStaticMethodID(class_Launch, "main", "([Ljava/lang/String;)V");
        jobjectArray str_array = env->NewObjectArray(12, env->FindClass("java/lang/String"), env->NewStringUTF(""));
        env->SetObjectArrayElement(str_array, 0, env->NewStringUTF("--username"));
        env->SetObjectArrayElement(str_array, 1, env->NewStringUTF("Natsu_Zirok"));
        env->SetObjectArrayElement(str_array, 2, env->NewStringUTF("--version"));
        env->SetObjectArrayElement(str_array, 3, env->NewStringUTF("1.7.2-Forge10.12.0.976"));
        env->SetObjectArrayElement(str_array, 4, env->NewStringUTF("--gameDir"));
        env->SetObjectArrayElement(str_array, 5, env->NewStringUTF("C:\\MLS_Client"));
        env->SetObjectArrayElement(str_array, 6, env->NewStringUTF("--assetsDir"));
        env->SetObjectArrayElement(str_array, 7, env->NewStringUTF("C:\\MLS_Client\\assets\\virtual\\legacy"));
        env->SetObjectArrayElement(str_array, 8, env->NewStringUTF("--accessToken"));
        env->SetObjectArrayElement(str_array, 9, env->NewStringUTF("0"));
        env->SetObjectArrayElement(str_array, 10, env->NewStringUTF("--tweakClass"));
        env->SetObjectArrayElement(str_array, 11, env->NewStringUTF("cpw.mods.fml.common.launcher.FMLTweaker"));
    
        env->CallStaticVoidMethod(class_Launch, env->GetStaticMethodID(class_Launch, "main", "([Ljava/lang/String;)V"), str_array);
    }
    
    Выделены(ошибки):
    В начале: JNICALL, *JNI_CREATEJAVAVM(Звездочка), JNI_CREATEJAVAVM
    В середине: JNI_CREATEJAVAVM, (JNI_CREATEJAVAVM)(Здесь требует ';')GetProcAddress
     
    Лайка3, Mr_RoboMan, Лайка2 и 3 другим нравится это.
  19. BlackSun

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

    Баллы:
    78
    Ты заголовочные файлы то подключил? Или думаешь, что оно само всё найдет и подключит?
     
  20. Natsu

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

    Баллы:
    88
    Skype:
    korotickiyvit
    Имя в Minecraft:
    Natsu_Zirok
    :eek:Да ты КЭП!
    *facepalm* Да вот только подключен он.
    Безымянный 2.png Безымянный.png
    Не учи программиста со стажем в год(Хоть и с маленькими знаниями) программировать.
     
  21. BlackSun

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

    Баллы:
    78
    Не стоит спорить с тем, кто программирует с 2005го. Не все заголовочные подключил.
    Выхода два - либо добавь в проект путь до <твои заголовочные с jdk>\win32
    Либо в файле jni.h напрямую смени строку
    #include "jni_md.h"
    На
    #include "win32\jni_md.h"

    2014-12-14_12-28_JNITest.jpg
     
    Последнее редактирование: 14 дек 2014

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