diff --git a/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-shared-1.18-SNAPSHOT.jar b/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-shared-1.18-SNAPSHOT.jar new file mode 100644 index 000000000..0d4859d2d Binary files /dev/null and b/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-shared-1.18-SNAPSHOT.jar differ diff --git a/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-tta-1.18-SNAPSHOT.jar b/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-tta-1.18-SNAPSHOT.jar new file mode 100644 index 000000000..179e59cbd Binary files /dev/null and b/app_pojavlauncher/src/main/assets/components/caciocavallo17/cacio-tta-1.18-SNAPSHOT.jar differ diff --git a/app_pojavlauncher/src/main/assets/components/caciocavallo17/version b/app_pojavlauncher/src/main/assets/components/caciocavallo17/version new file mode 100644 index 000000000..918be360b --- /dev/null +++ b/app_pojavlauncher/src/main/assets/components/caciocavallo17/version @@ -0,0 +1 @@ +20220819 diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java index 2815780a9..6955e1856 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java @@ -117,13 +117,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc }); try { - JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(LauncherPreferences.PREF_DEFAULT_RUNTIME); - if (JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")) { - MultiRTUtils.setRuntimeNamed(this,LauncherPreferences.PREF_DEFAULT_RUNTIME); - } else { - MultiRTUtils.setRuntimeNamed(this,MultiRTUtils.getExactJreName(8)); - JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(); - } + MultiRTUtils.setRuntimeNamed(this,LauncherPreferences.PREF_DEFAULT_RUNTIME); placeMouseAt(CallbackBridge.physicalWidth / 2, CallbackBridge.physicalHeight / 2); @@ -247,7 +241,8 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc List javaArgList = new ArrayList(); // Enable Caciocavallo - Tools.getCacioJavaArgs(javaArgList,false); + JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(LauncherPreferences.PREF_DEFAULT_RUNTIME); + Tools.getCacioJavaArgs(javaArgList,JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")); if (javaArgs != null) { javaArgList.addAll(Arrays.asList(javaArgs.split(" "))); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index 5576cfc52..f1eecd1f0 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -344,6 +344,7 @@ public class PojavLoginActivity extends BaseActivity { AssetManager am = this.getAssets(); unpackComponent(am, "caciocavallo"); + unpackComponent(am, "caciocavallo17"); // Since the Java module system doesn't allow multiple JARs to declare the same module, // we repack them to a single file here diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index 55aa7780c..13d8c08dc 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -141,13 +141,7 @@ public final class Tools { List javaArgList = new ArrayList(); - // Only Java 8 supports headful AWT for now - if (JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")) { - getCacioJavaArgs(javaArgList, false); - } else if (LauncherPreferences.PREF_ARC_CAPES) { - // Opens the java.net package to Arc DNS injector on Java 9+ - javaArgList.add("--add-opens=java.base/java.net=ALL-UNNAMED"); - } + getCacioJavaArgs(javaArgList, JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")); /* int mcReleaseDate = Integer.parseInt(versionInfo.releaseTime.substring(0, 10).replace("-", "")); @@ -179,20 +173,46 @@ public final class Tools { JREUtils.launchJavaVM(activity, javaArgList); } - public static void getCacioJavaArgs(List javaArgList, boolean isHeadless) { - javaArgList.add("-Djava.awt.headless="+isHeadless); + public static void getCacioJavaArgs(List javaArgList, boolean isJava8) { // Caciocavallo config AWT-enabled version + javaArgList.add("-Djava.awt.headless=false"); javaArgList.add("-Dcacio.managed.screensize=" + AWTCanvasView.AWT_CANVAS_WIDTH + "x" + AWTCanvasView.AWT_CANVAS_HEIGHT); // javaArgList.add("-Dcacio.font.fontmanager=net.java.openjdk.cacio.ctc.CTCFontManager"); - javaArgList.add("-Dcacio.font.fontmanager=sun.awt.X11FontManager"); javaArgList.add("-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler"); javaArgList.add("-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel"); - javaArgList.add("-Dawt.toolkit=net.java.openjdk.cacio.ctc.CTCToolkit"); - javaArgList.add("-Djava.awt.graphicsenv=net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment"); + if (isJava8) { + javaArgList.add("-Dcacio.font.fontmanager=sun.awt.X11FontManager"); + javaArgList.add("-Dawt.toolkit=net.java.openjdk.cacio.ctc.CTCToolkit"); + javaArgList.add("-Djava.awt.graphicsenv=net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment"); + } else { + javaArgList.add("-Dcacio.font.fontmanager=com.github.caciocavallosilano.cacio.ctc.CTCFontManager"); + javaArgList.add("-Dawt.toolkit=com.github.caciocavallosilano.cacio.ctc.CTCToolkit"); + javaArgList.add("-Djava.awt.graphicsenv=com.github.caciocavallosilano.cacio.ctc.CTCGraphicsEnvironment"); + javaArgList.add("-Djava.system.class.loader=com.github.caciocavallosilano.cacio.ctc.CTCPreloadClassLoader"); + + javaArgList.add("--add-exports=java.desktop/java.awt=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/java.awt.peer=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.awt.image=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.java2d=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/java.awt.dnd.peer=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.awt=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.awt.event=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.awt.datatransfer=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.desktop/sun.font=ALL-UNNAMED"); + javaArgList.add("--add-exports=java.base/sun.security.action=ALL-UNNAMED"); + javaArgList.add("--add-opens=java.base/java.util=ALL-UNNAMED"); + javaArgList.add("--add-opens=java.desktop/java.awt=ALL-UNNAMED"); + javaArgList.add("--add-opens=java.desktop/sun.font=ALL-UNNAMED"); + javaArgList.add("--add-opens=java.desktop/sun.java2d=ALL-UNNAMED"); + javaArgList.add("--add-opens=java.base/java.lang.reflect=ALL-UNNAMED"); + + // Opens the java.net package to Arc DNS injector on Java 9+ + javaArgList.add("--add-opens=java.base/java.net=ALL-UNNAMED"); + } StringBuilder cacioClasspath = new StringBuilder(); - cacioClasspath.append("-Xbootclasspath/p"); - File cacioDir = new File(DIR_GAME_HOME + "/caciocavallo"); + cacioClasspath.append("-Xbootclasspath/" + (isJava8 ? "p" : "a")); + File cacioDir = new File(DIR_GAME_HOME + "/caciocavallo" + (isJava8 ? "" : "17")); if (cacioDir.exists() && cacioDir.isDirectory()) { for (File file : cacioDir.listFiles()) { if (file.getName().endsWith(".jar")) { diff --git a/app_pojavlauncher/src/main/jni/awt_bridge.c b/app_pojavlauncher/src/main/jni/awt_bridge.c index 2a0b6fd9b..da62f03fd 100644 --- a/app_pojavlauncher/src/main/jni/awt_bridge.c +++ b/app_pojavlauncher/src/main/jni/awt_bridge.c @@ -35,6 +35,10 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_AWTInputBridge_nativeSendData(JN if (method_ReceiveInput == NULL) { class_CTCAndroidInput = (*runtimeJNIEnvPtr_INPUT)->FindClass(runtimeJNIEnvPtr_INPUT, "net/java/openjdk/cacio/ctc/CTCAndroidInput"); + if ((*runtimeJNIEnvPtr_INPUT)->ExceptionCheck(runtimeJNIEnvPtr_INPUT) == JNI_TRUE) { + (*runtimeJNIEnvPtr_INPUT)->ExceptionClear(runtimeJNIEnvPtr_INPUT); + class_CTCAndroidInput = (*runtimeJNIEnvPtr_INPUT)->FindClass(runtimeJNIEnvPtr_INPUT, "com/github/caciocavallosilano/cacio/ctc/CTCAndroidInput"); + } assert(class_CTCAndroidInput != NULL); method_ReceiveInput = (*runtimeJNIEnvPtr_INPUT)->GetStaticMethodID(runtimeJNIEnvPtr_INPUT, class_CTCAndroidInput, "receiveData", "(IIIII)V"); assert(method_ReceiveInput != NULL); @@ -64,6 +68,10 @@ JNIEXPORT jintArray JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_renderAWTScr if (method_GetRGB == NULL) { class_CTCScreen = (*runtimeJNIEnvPtr_GRAPHICS)->FindClass(runtimeJNIEnvPtr_GRAPHICS, "net/java/openjdk/cacio/ctc/CTCScreen"); + if ((*runtimeJNIEnvPtr_GRAPHICS)->ExceptionCheck(runtimeJNIEnvPtr_GRAPHICS) == JNI_TRUE) { + (*runtimeJNIEnvPtr_GRAPHICS)->ExceptionClear(runtimeJNIEnvPtr_GRAPHICS); + class_CTCScreen = (*runtimeJNIEnvPtr_GRAPHICS)->FindClass(runtimeJNIEnvPtr_GRAPHICS, "com/github/caciocavallosilano/cacio/ctc/CTCScreen"); + } assert(class_CTCScreen != NULL); method_GetRGB = (*runtimeJNIEnvPtr_GRAPHICS)->GetStaticMethodID(runtimeJNIEnvPtr_GRAPHICS, class_CTCScreen, "getCurrentScreenRGB", "()[I"); assert(method_GetRGB != NULL);