diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java index 559db0de..c011b21a 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java @@ -44,7 +44,7 @@ public class MinecraftAccount } static { - System.load(System.getenv("BUNDLE_PATH") + "/PojavLauncher"); + System.loadLibrary("PojavAccountJNI"); } public static native String getAccessTokenFromKeychain(String xuid); } diff --git a/Natives/CMakeLists.txt b/Natives/CMakeLists.txt index c036a8da..43e29610 100644 --- a/Natives/CMakeLists.txt +++ b/Natives/CMakeLists.txt @@ -90,6 +90,12 @@ target_link_libraries(AFNetworking "-framework UIKit" ) +# MinecraftAccount JNI +add_library(PojavAccountJNI SHARED + authenticator/MinecraftAccountJNI.m +) +target_link_libraries(PojavAccountJNI) + # PojavLauncher add_executable(PojavLauncher dyld_bypass_validation.m diff --git a/Natives/authenticator/MicrosoftAuthenticator.m b/Natives/authenticator/MicrosoftAuthenticator.m index cc2d041d..fefba00d 100644 --- a/Natives/authenticator/MicrosoftAuthenticator.m +++ b/Natives/authenticator/MicrosoftAuthenticator.m @@ -289,17 +289,3 @@ typedef void(^XSTSCallback)(NSString *xsts, NSString *uhs); } @end - -JNIEXPORT jstring JNICALL Java_net_kdt_pojavlaunch_value_MinecraftAccount_getAccessTokenFromKeychain(JNIEnv *env, jclass clazz, jstring xuid) { - // This function should only be called once - static BOOL called = NO; - if (called) { - abort(); - } - called = YES; - - const char *xuidC = (*env)->GetStringUTFChars(env, xuid, 0); - NSString *accessToken = [MicrosoftAuthenticator tokenDataOfProfile:@(xuidC)][@"accessToken"]; - (*env)->ReleaseStringUTFChars(env, xuid, xuidC); - return (*env)->NewStringUTF(env, accessToken.UTF8String); -} diff --git a/Natives/authenticator/MinecraftAccountJNI.m b/Natives/authenticator/MinecraftAccountJNI.m new file mode 100644 index 00000000..16c3947b --- /dev/null +++ b/Natives/authenticator/MinecraftAccountJNI.m @@ -0,0 +1,16 @@ +#import "BaseAuthenticator.h" +#include "jni.h" + +JNIEXPORT jstring JNICALL Java_net_kdt_pojavlaunch_value_MinecraftAccount_getAccessTokenFromKeychain(JNIEnv *env, jclass clazz, jstring xuid) { + // This function should only be called once + static BOOL called = NO; + if (called) { + abort(); + } + called = YES; + + const char *xuidC = (*env)->GetStringUTFChars(env, xuid, 0); + NSString *accessToken = [NSClassFromString(@"MicrosoftAuthenticator") tokenDataOfProfile:@(xuidC)][@"accessToken"]; + (*env)->ReleaseStringUTFChars(env, xuid, xuidC); + return (*env)->NewStringUTF(env, accessToken.UTF8String); +}