diff --git a/JavaApp/libs_caciocavallo/ResConfHack.jar b/JavaApp/libs_caciocavallo/ResConfHack.jar new file mode 100644 index 00000000..05b93e0c Binary files /dev/null and b/JavaApp/libs_caciocavallo/ResConfHack.jar differ diff --git a/JavaApp/libs_caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar b/JavaApp/libs_caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar new file mode 100644 index 00000000..4d8b0ad1 Binary files /dev/null and b/JavaApp/libs_caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar differ diff --git a/JavaApp/libs_caciocavallo/cacio-shared-1.10-SNAPSHOT.jar b/JavaApp/libs_caciocavallo/cacio-shared-1.10-SNAPSHOT.jar new file mode 100644 index 00000000..a7129ca1 Binary files /dev/null and b/JavaApp/libs_caciocavallo/cacio-shared-1.10-SNAPSHOT.jar differ diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java index 65330c2b..7c57f0ab 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java @@ -16,6 +16,8 @@ public class UIKit { } public static void callback_SurfaceViewController_launchMinecraft(int width, int height) { + System.setProperty("cacio.managed.screensize", width + "x" + height); + GLFW.internalChangeMonitorSize(width, height); CallbackBridge.mouseX = width / 2; CallbackBridge.mouseY = height / 2; diff --git a/Makefile b/Makefile index 5bacc07a..1d5559db 100644 --- a/Makefile +++ b/Makefile @@ -125,9 +125,10 @@ package: @if [ '$(IOS)' = '0' ]; then \ cp -R Natives/resources/* Natives/build/PojavLauncher.app/ || exit 1; \ cp Natives/build/libpojavexec.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ - mkdir Natives/build/PojavLauncher.app/libs; \ + mkdir Natives/build/PojavLauncher.app/{libs,libs_caciocavallo}; \ cp JavaApp/local_out/launcher.jar Natives/build/PojavLauncher.app/libs/launcher.jar || exit 1; \ cp -R JavaApp/libs/* Natives/build/PojavLauncher.app/libs/ || exit 1; \ + cp -R JavaApp/libs_caciocavallo/* Natives/build/PojavLauncher.app/libs_caciocavallo/ || exit 1; \ mkdir -p packages/pojavlauncher_iphoneos-arm/{Applications,var/mobile/Documents/minecraft,var/mobile/Documents/.pojavlauncher}; \ sudo chown 501:501 packages/pojavlauncher_iphoneos-arm/var/mobile/Documents/* || exit 1; \ cp -R Natives/build/PojavLauncher.app packages/pojavlauncher_iphoneos-arm/Applications; \ @@ -143,6 +144,7 @@ package: cp -R Natives/build/libpojavexec.dylib Natives/build/PojavLauncher.app/Frameworks/libpojavexec.dylib || exit 1; \ cp -R Natives/resources/* Natives/build/PojavLauncher.app/ || exit 1; \ cp -R JavaApp/libs Natives/build/PojavLauncher.app/libs || exit 1; \ + cp -R JavaApp/libs_caciocavallo Natives/build/PojavLauncher.app/libs_caciocavallo || exit 1; \ cp JavaApp/local_out/launcher.jar Natives/build/PojavLauncher.app/libs/ || exit 1; \ mkdir -p packages/pojavlauncher_iphoneos-arm/{Applications,var/mobile/Documents/minecraft,var/mobile/Documents/.pojavlauncher}; \ sudo chown 501:501 packages/pojavlauncher_iphoneos-arm/var/mobile/Documents/* || exit 1; \ diff --git a/Natives/JavaLauncher.c b/Natives/JavaLauncher.c index a2afa158..c75b9b6e 100644 --- a/Natives/JavaLauncher.c +++ b/Natives/JavaLauncher.c @@ -197,14 +197,6 @@ int launchJVM(int argc, char *argv[]) { margv[margc++] = "-Dorg.lwjgl.system.allocator=system"; init_loadCustomJvmFlags(); - - margv[margc++] = "-cp"; - margv[margc++] = classpath; - margv[margc++] = "net.kdt.pojavlaunch.PLaunchApp"; - - for (int i = 0; i < argc; i++) { - margv[margc++] = argv[i]; - } } else { // Locate gl4es library name: // Reverse the loop, since it is overridable. @@ -229,16 +221,51 @@ int launchJVM(int argc, char *argv[]) { char libjlipath16[2048]; // java 16+ (?) sprintf(libjlipath8, "%s/lib/jli/libjli.dylib", javaHome); sprintf(libjlipath16, "%s/lib/libjli.dylib", javaHome); - void* libjli = dlopen(libjlipath8, RTLD_LAZY | RTLD_GLOBAL); + void* libjli = dlopen(libjlipath16, RTLD_LAZY | RTLD_GLOBAL); if (!libjli) { - libjli = dlopen(libjlipath16, RTLD_LAZY | RTLD_GLOBAL); + debug("[Init] Can't load %s, trying %s", libjlipath16, libjlipath8); + libjli = dlopen(libjlipath8, RTLD_LAZY | RTLD_GLOBAL); if (!libjli) { debug("[Init] JLI lib = NULL: %s", dlerror()); return -1; } + + if (!started) { + // Setup Caciocavallo + margv[margc++] = "-Djava.awt.headless=false"; + margv[margc++] = "-Dcacio.font.fontmanager=sun.awt.X11FontManager"; + margv[margc++] = "-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler"; + margv[margc++] = "-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel"; + margv[margc++] = "-Dawt.toolkit=net.java.openjdk.cacio.ctc.CTCToolkit"; + margv[margc++] = "-Djava.awt.graphicsenv=net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment"; + + // Generate Caciocavallo bootclasspath + char cacio_libs_path[2048]; + char cacio_classpath[8192]; + sprintf((char*) cacio_libs_path, "%s/libs_caciocavallo", getenv("BUNDLE_PATH")); + cplen = sprintf(cacio_classpath, "-Xbootclasspath/p"); + d = opendir(cacio_libs_path); + if (d) { + while ((dir = readdir(d)) != NULL) { + cplen += sprintf(cacio_classpath + cplen, ":%s/%s", cacio_libs_path, dir->d_name); + } + closedir(d); + } + margv[margc++] = cacio_classpath; + } } debug("[Init] Found JLI lib"); + + if (!started) { + margv[margc++] = "-cp"; + margv[margc++] = classpath; + margv[margc++] = "net.kdt.pojavlaunch.PLaunchApp"; + + for (int i = 0; i < argc; i++) { + margv[margc++] = argv[i]; + } + } JLI_Launch_func *pJLI_Launch = (JLI_Launch_func *)dlsym(libjli, "JLI_Launch"); @@ -249,7 +276,13 @@ int launchJVM(int argc, char *argv[]) { } debug("[Init] Calling JLI_Launch"); - + +/* + for (int i = 0; i < margc; i++) { + debug("arg[%d] = %s", i, margv[i]); + } +*/ + int targc = started ? argc : margc; char **targv = started ? argv : margv;