From 0783f2d43ad48cfb8085ade350cfb7f3588ba3ed Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Thu, 25 Aug 2022 07:14:31 +0700 Subject: [PATCH] Java 8: Fix awt_xawt and Caciocavallo --- .../java/net/kdt/pojavlaunch/uikit/UIKit.java | 43 +++++++++++-------- Natives/JavaGUIViewController.m | 4 ++ Natives/JavaLauncher.m | 4 +- 3 files changed, 31 insertions(+), 20 deletions(-) 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 def91843..e0426508 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java @@ -38,27 +38,32 @@ public class UIKit { } catch (ClassNotFoundException e) { getCurrentScreenRGB = Class.forName("com.github.caciocavallosilano.cacio.ctc.CTCScreen").getMethod("getCurrentScreenRGB"); } + } catch (Throwable th) { + System.err.println("Failed to find class CTCScreen"); + th.printStackTrace(); + System.exit(1); + return; + } - long lastTime = System.currentTimeMillis(); - while (true) { - int[] pixelsArray = null; - try{ - pixelsArray = (int[])getCurrentScreenRGB.invoke(null); - } catch (NullPointerException e) { - Thread.sleep(500); - } - if (pixelsArray != null) { - //System.out.println(java.util.Arrays.toString(pixelsArray)); - refreshAWTBuffer(pixelsArray); - } - long currentTime = System.currentTimeMillis(); - if (currentTime - lastTime < 16) { - Thread.sleep(16 - (currentTime - lastTime)); - } - lastTime = currentTime; + long lastTime = System.currentTimeMillis(); + while (true) { + int[] pixelsArray = null; + try{ + pixelsArray = (int[])getCurrentScreenRGB.invoke(null); + } catch (Throwable e) {} + if (pixelsArray != null) { + //System.out.println(java.util.Arrays.toString(pixelsArray)); + refreshAWTBuffer(pixelsArray); } - } catch (Throwable e) { - e.printStackTrace(); + long currentTime = System.currentTimeMillis(); + if (currentTime - lastTime < 16) { + try { + Thread.sleep(16 - (currentTime - lastTime)); + } catch (InterruptedException e) { + break; + } + } + lastTime = currentTime; } }, "AWTFBRefreshThread").start(); diff --git a/Natives/JavaGUIViewController.m b/Natives/JavaGUIViewController.m index 275f5e90..13f72b9a 100644 --- a/Natives/JavaGUIViewController.m +++ b/Natives/JavaGUIViewController.m @@ -111,6 +111,10 @@ const void * _CGDataProviderGetBytePointerCallbackAWT(void *info) { } - (void)surfaceOnClick:(UITapGestureRecognizer *)sender { + if (runtimeJNIEnvPtr == NULL) { + return; + } + if (method_ReceiveInput == NULL) { class_CTCAndroidInput = (*runtimeJNIEnvPtr)->FindClass(runtimeJNIEnvPtr, "net/java/openjdk/cacio/ctc/CTCAndroidInput"); if ((*runtimeJNIEnvPtr)->ExceptionCheck(runtimeJNIEnvPtr) == JNI_TRUE) { diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index ce83fe94..b8969176 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -50,7 +50,9 @@ void init_loadCustomEnv() { /* Define default env */ // I accidentally patched a bit wrong, the value should be a path containing libawt_xawt.dylib, but here is libawt.dylib path (no need to exist) - setenv("JAVA_AWT_PATH", [NSString stringWithFormat:@"%s/Frameworks/libawt.dylib", getenv("BUNDLE_PATH")].UTF8String, 1); + if (getenv("POJAV_DETECTEDJB")) { + setenv("JAVA_AWT_PATH", [NSString stringWithFormat:@"%s/Frameworks/libawt.dylib", getenv("BUNDLE_PATH")].UTF8String, 1); + } // Disable overloaded functions hack for Minecraft 1.17+ setenv("LIBGL_NOINTOVLHACK", "1", 1);