Skip to content
This repository was archived by the owner on Sep 23, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ jobs:
env:
password: ${{ secrets.ELLIE_MINI_SECRET }}
run: |
export BRANCH=${{ github.head_ref || github.ref_name }}
export PATH=/opt/procursus/bin:/opt/homebrew/bin:$PATH
export RUNNER=1 SLIMMED=1
if [ "${{ matrix.platform_name }}" == "ios" ]; then
Expand Down
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ WORKINGDIR := $(SOURCEDIR)/Natives/build
DETECTPLAT := $(shell uname -s)
DETECTARCH := $(shell uname -m)
VERSION := 3.0
BRANCH := $(shell git branch --show-current)
BRANCH ?= $(shell git branch --show-current)
COMMIT := $(shell git log --oneline | sed '2,10000000d' | cut -b 1-7)
PLATFORM ?= 2

Expand All @@ -28,8 +28,8 @@ SLIMMED_ONLY ?= 0

# If not in a GitHub repository, default to these
# so that compiling doesn't fail
BRANCH ?= "unknown"
COMMIT ?= "unknown"
BRANCH := $(if $(BRANCH),$(BRANCH),"unknown")
COMMIT := $(if $(COMMIT),$(COMMIT),"unknown")

# Team IDs and provisioning profile for the codesign function
# Default to -1 for check
Expand Down
33 changes: 22 additions & 11 deletions Natives/JavaLauncher.m
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,24 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi

NSString *librariesPath = [NSString stringWithFormat:@"%@/libs", NSBundle.mainBundle.bundlePath];
margv[++margc] = [NSString stringWithFormat:@"-javaagent:%@/patchjna_agent.jar=", librariesPath].UTF8String;

// Load java
NSString *libjlipath8 = [NSString stringWithFormat:@"%@/lib/jli/libjli.dylib", javaHome]; // java 8
NSString *libjlipath11 = [NSString stringWithFormat:@"%@/lib/libjli.dylib", javaHome]; // java 11+
BOOL isJava8Path = [fm fileExistsAtPath:libjlipath8];

// Important: Add Java 9+ permissions before loading the Cosmetica agent
if(!isJava8Path) {
// Required by Cosmetica to inject DNS
margv[++margc] = "--add-opens=java.base/java.net=ALL-UNNAMED";
// Additional permissions for Cosmetica to access internal InetAddress classes
margv[++margc] = "--add-exports=java.base/sun.net.dns=ALL-UNNAMED";
margv[++margc] = "--add-exports=java.base/sun.net=ALL-UNNAMED";
margv[++margc] = "--add-opens=java.base/sun.net=ALL-UNNAMED";
margv[++margc] = "--add-opens=java.base/sun.net.dns=ALL-UNNAMED";
}

// Add Cosmetica agent after Java 9+ permissions are set
if(getPrefBool(@"general.cosmetica")) {
margv[++margc] = [NSString stringWithFormat:@"-javaagent:%@/arc_dns_injector.jar=23.95.137.176", librariesPath].UTF8String;
}
Expand All @@ -211,11 +229,7 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi
// Disable Forge 1.16.x early progress window
margv[++margc] = "-Dfml.earlyprogresswindow=false";

// Load java
NSString *libjlipath8 = [NSString stringWithFormat:@"%@/lib/jli/libjli.dylib", javaHome]; // java 8
NSString *libjlipath11 = [NSString stringWithFormat:@"%@/lib/libjli.dylib", javaHome]; // java 11+
BOOL isJava8 = [fm fileExistsAtPath:libjlipath8];
setenv("INTERNAL_JLI_PATH", (isJava8 ? libjlipath8 : libjlipath11).UTF8String, 1);
setenv("INTERNAL_JLI_PATH", (isJava8Path ? libjlipath8 : libjlipath11).UTF8String, 1);
void* libjli = dlopen(getenv("INTERNAL_JLI_PATH"), RTLD_GLOBAL);

if (!libjli) {
Expand All @@ -232,14 +246,11 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi
margv[++margc] = "-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler";
margv[++margc] = [NSString stringWithFormat:@"-Dcacio.managed.screensize=%dx%d", width, height].UTF8String;
margv[++margc] = "-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel";
if (isJava8) {
if (isJava8Path) {
// Setup Caciocavallo
margv[++margc] = "-Dawt.toolkit=net.java.openjdk.cacio.ctc.CTCToolkit";
margv[++margc] = "-Djava.awt.graphicsenv=net.java.openjdk.cacio.ctc.CTCGraphicsEnvironment";
} else {
// Required by Cosmetica to inject DNS
margv[++margc] = "--add-opens=java.base/java.net=ALL-UNNAMED";

// Setup Caciocavallo
margv[++margc] = "-Dawt.toolkit=com.github.caciocavallosilano.cacio.ctc.CTCToolkit";
margv[++margc] = "-Djava.awt.graphicsenv=com.github.caciocavallosilano.cacio.ctc.CTCGraphicsEnvironment";
Expand All @@ -266,8 +277,8 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi
}

// Add Caciocavallo bootclasspath
NSString *cacio_classpath = [NSString stringWithFormat:@"-Xbootclasspath/%s", isJava8 ? "p" : "a"];
NSString *cacio_libs_path = [NSString stringWithFormat:@"%@/libs_caciocavallo%s", NSBundle.mainBundle.bundlePath, isJava8 ? "" : "17"];
NSString *cacio_classpath = [NSString stringWithFormat:@"-Xbootclasspath/%s", isJava8Path ? "p" : "a"];
NSString *cacio_libs_path = [NSString stringWithFormat:@"%@/libs_caciocavallo%s", NSBundle.mainBundle.bundlePath, isJava8Path ? "" : "17"];
NSArray *files = [fm contentsOfDirectoryAtPath:cacio_libs_path error:nil];
for(NSString *file in files) {
if ([file hasSuffix:@".jar"]) {
Expand Down