From 4cff4dc9493d633eff1159b0c5eb6d30da5b8a42 Mon Sep 17 00:00:00 2001 From: Eilionoir Tunnicliff Date: Mon, 8 May 2023 13:49:52 -0400 Subject: [PATCH] Migrate environment variables to preferences view controller Also, remove some more legacy code + make the migration code better --- Natives/JavaLauncher.m | 30 +++++------- Natives/LauncherPreferences.m | 2 +- Natives/LauncherPreferencesViewController.m | 6 +++ Natives/main.m | 45 +++++------------- Natives/resources/Assets.car | Bin 8810688 -> 8810688 bytes .../resources/en.lproj/Localizable.strings | 3 ++ 6 files changed, 35 insertions(+), 51 deletions(-) diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 3dbbfd4a..e8bc75a2 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -22,7 +22,7 @@ extern char **environ; static int margc = -1; static const char* margv[1000]; -void init_loadCustomEnv() { +void init_loadDefaultEnv() { /* Define default env */ // Silent Caciocavallo NPE error in locating Android-only lib @@ -42,35 +42,30 @@ void init_loadCustomEnv() { // Runs JVM in a separate thread setenv("HACK_IGNORE_START_ON_FIRST_THREAD", "1", 1); +} - /* Load custom env */ - NSString *envFile = [NSString stringWithFormat:@"%s/custom_env.txt", getenv("POJAV_HOME")]; - NSString *linesStr = [NSString stringWithContentsOfFile:envFile - encoding:NSUTF8StringEncoding error:nil]; - if (linesStr == nil) return; - NSLog(@"[Pre-init] Reading custom environment variables (custom_env.txt)"); - - NSArray *lines = [linesStr componentsSeparatedByCharactersInSet: - NSCharacterSet.newlineCharacterSet]; - - for (NSString *line in lines) { - if (line.length == 0 || [line hasPrefix:@"#"]) { - continue; - } else if (![line containsString:@"="]) { - NSLog(@"[Pre-init] Warning: skipped empty value custom env: %@", line); +void init_loadCustomEnv() { + NSString *envvars = getPreference(@"env_variables"); + if (envvars == nil) return; + NSLog(@"[JavaLauncher] Reading custom environment variables"); + for (NSString *line in [envvars componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceCharacterSet]) { + if (![line containsString:@"="]) { + NSLog(@"[JavaLauncher] Warning: skipped empty value custom env variable: %@", line); continue; } NSRange range = [line rangeOfString:@"="]; NSString *key = [line substringToIndex:range.location]; NSString *value = [line substringFromIndex:range.location+range.length]; setenv(key.UTF8String, value.UTF8String, 1); - NSLog(@"[Pre-init] Added custom env: %@", line); + NSLog(@"[JavaLauncher] Added custom env variable: %@", line); } } void init_loadCustomJvmFlags() { NSString *jvmargs = getPreference(@"java_args"); + if (jvmargs == nil) return; BOOL isFirstArg = YES; + NSLog(@"[JavaLauncher] Reading custom JVM flags"); for (NSString *jvmarg in [jvmargs componentsSeparatedByString:@" -"]) { if ([jvmarg length] == 0) continue; //margv[margc] = (char *) [jvmarg UTF8String]; @@ -108,6 +103,7 @@ NSString* environmentFailsafes(int minVersion) { } int launchJVM(NSString *username, id launchTarget, int width, int height, int minVersion) { + init_loadDefaultEnv(); init_loadCustomEnv(); NSString *librariesPath = [NSString stringWithFormat:@"%s/libs", getenv("BUNDLE_PATH")]; diff --git a/Natives/LauncherPreferences.m b/Natives/LauncherPreferences.m index e836e8c6..4c92cf73 100644 --- a/Natives/LauncherPreferences.m +++ b/Natives/LauncherPreferences.m @@ -86,7 +86,6 @@ void fillDefaultWarningDict() { setDefaultValueForPref(warnPrefDict, @"local_warn", @YES); setDefaultValueForPref(warnPrefDict, @"mem_warn", @YES); setDefaultValueForPref(warnPrefDict, @"auto_ram_warn", @YES); - setDefaultValueForPref(warnPrefDict, @"legacy_device_warn", @YES); setDefaultValueForPref(warnPrefDict, @"limited_ram_warn", @YES); } @@ -133,6 +132,7 @@ void loadPreferences(BOOL reset) { setDefaultValueForPref(envPrefDict, @"default_gamepad_ctrl", @"default.json"); setDefaultValueForPref(envPrefDict, @"game_directory", @"default"); setDefaultValueForPref(envPrefDict, @"java_args", @""); + setDefaultValueForPref(envPrefDict, @"env_variables", @""); setDefaultValueForPref(envPrefDict, @"allocated_memory", [NSNumber numberWithFloat:roundf((NSProcessInfo.processInfo.physicalMemory / 1048576) * 0.25)]); setDefaultValueForPref(envPrefDict, @"jitstreamer_server", @"69.69.0.1"); setDefaultValueForPref(envPrefDict, @"max_framerate", @YES); diff --git a/Natives/LauncherPreferencesViewController.m b/Natives/LauncherPreferencesViewController.m index 06453c8d..4aeaf585 100644 --- a/Natives/LauncherPreferencesViewController.m +++ b/Natives/LauncherPreferencesViewController.m @@ -379,6 +379,12 @@ typedef void(^CreateView)(UITableViewCell *, NSString *, NSDictionary *); @"type": self.typeTextField, @"enableCondition": whenNotInGame }, + @{@"key": @"env_variables", + @"hasDetail": @YES, + @"icon": @"terminal", + @"type": self.typeTextField, + @"enableCondition": whenNotInGame + }, @{@"key": @"auto_ram", @"hasDetail": @YES, @"icon": @"slider.horizontal.3", diff --git a/Natives/main.m b/Natives/main.m index 740831fa..b0bb677d 100644 --- a/Natives/main.m +++ b/Natives/main.m @@ -104,24 +104,6 @@ void init_checkForJailbreak() { } void init_logDeviceAndVer(char *argument) { - // Legacy IDs - NSDictionary *legacyIDs = @{ - @"iPhone6,1" : @"iPhone 5s", - @"iPhone6,2" : @"iPhone 5s", - @"iPhone7,1" : @"iPhone 6 Plus", - @"iPhone7,2" : @"iPhone 6", - @"iPad4,1" : @"iPad Air (1st generation)", - @"iPad4,2" : @"iPad Air (1st generation)", - @"iPad4,3" : @"iPad Air (1st generation)", - @"iPad4,4" : @"iPad mini (2nd generation)", - @"iPad4,5" : @"iPad mini (2nd generation)", - @"iPad4,6" : @"iPad mini (2nd generation)", - @"iPad4,7" : @"iPad mini (3rd generation)", - @"iPad4,8" : @"iPad mini (3rd generation)", - @"iPad4,9" : @"iPad mini (3rd generation)", - @"iPod7,1" : @"iPod touch (6th generation)" - }; - // PojavLauncher version NSLog(@"[Pre-Init] PojavLauncher INIT!"); NSLog(@"[Pre-Init] Version: %@-%s", NSBundle.mainBundle.infoDictionary[@"CFBundleShortVersionString"], CONFIG_TYPE); @@ -144,14 +126,6 @@ void init_logDeviceAndVer(char *argument) { NSLog(@"[Pre-Init] Device: %s", getenv("POJAV_DETECTEDHW")); NSLog(@"[Pre-Init] iOS %s (%s)", getenv("POJAV_DETECTEDSW"), getenv("POJAV_DETECTEDINST")); - if(legacyIDs[[HostManager GetModelIdentifier]] != nil) { - NSLog(@"[Pre-Init] Currently running on legacy device"); - } else { - if([HostManager GetPlatformVersion].floatValue < 14) { - NSLog(@"[Pre-Init] Currently running on legacy iOS"); - } - } - NSString *jvmPath = [NSString stringWithFormat:@"%s/java_runtimes", getenv("BUNDLE_PATH")]; if (![fm fileExistsAtPath:jvmPath]) { #if !CONFIG_RELEASE @@ -185,16 +159,20 @@ void init_migrateDirIfNecessary() { } void init_migrateToPlist(char* prefKey, char* filename) { - // NSString *readmeStr = @"#README - this file has been merged into launcher_preferences.plist"; NSError *error; - NSString *str, *path_str; - - // overrideargs.txt - path_str = [NSString stringWithFormat:@"%s/%s", getenv("POJAV_HOME"), filename]; - str = [NSString stringWithContentsOfFile:path_str encoding:NSUTF8StringEncoding error:&error]; + NSString *path_str = [NSString stringWithFormat:@"%s/%s", getenv("POJAV_HOME"), filename]; + NSLog(@"[Pre-Init] Beginning migration for file \"%@\"", path_str); + NSString *str = [NSString stringWithContentsOfFile:path_str encoding:NSUTF8StringEncoding error:&error]; if (error == nil && ![str hasPrefix:@"#README"]) { - setPreference(@(prefKey), str); + NSString *finalized = @""; + for (NSString *line in [str componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet]) { + finalized = [finalized stringByAppendingString:[NSString stringWithFormat:@"%@ ", line]]; + } + + setPreference(@(prefKey), finalized); [@"#README - this file has been merged into launcher_preferences.plist" writeToFile:path_str atomically:YES encoding:NSUTF8StringEncoding error:nil]; + } else { + NSLog(@"[Pre-Init] File \"%@\" was already migrated"); } } @@ -388,6 +366,7 @@ int main(int argc, char *argv[]) { init_migrateToPlist("selected_version", "config_ver.txt"); init_migrateToPlist("java_args", "overrideargs.txt"); + init_migrateToPlist("env_variables", "custom_env.txt"); // If sandbox is disabled, W^X JIT can be enabled by PojavLauncher itself if (!isJITEnabled(true) && getEntitlementValue(@"com.apple.private.security.no-sandbox")) { diff --git a/Natives/resources/Assets.car b/Natives/resources/Assets.car index 5de516e5f9bc0e78e9f4b468930c2932da055827..ba4b56775ee3892cc4b0b4559669de585506b5c9 100644 GIT binary patch delta 492 zcmZvZ+g6ML07m~($~0r9Y2FVzD3yq9H{gk?&tq$;9$nrgS-*NzNlV zk}De|Px57>6iA_Ll86*ZRARDO;*yYJDUmHwDqCfnY?mEUCgoBgl~N@;WtSwST54ps z?2(kzN}cSLeNrzCvR@9!K}pLYX_UiqM4BWcVc}6}mSb{UPRL1VkyCP7&d6D5m2+}l z+N51B$VIs%9dcQ&$W^%}*QHZ#$W6H=x8;u9m3wkuy5xa8lt<@=TX`pw@?NH7T0Y1}nUPtUlTY$l=4C+^W$7pW et}jjmL1r~PD>wAt(D7e?`b-!8XOE8fqhKAfOq_oJ delta 492 zcmZvZ+g6ML07m~($~0r9Y2FVnsm^L_%UA(eGbV$;9$nrgS-*NzNlV zk}De|Px57>6iA_Ll86*ZRARDO;*yYJDUmHwDqCfnY?mEUCgoBgl~N@;WtSwST54ps z?2(kzN}cSLeNrzCvR@9!K}pLYX_UiqM4BWcVc}6}mSb{UPRL1VkyCP7&d6D5m2+}l z+N51B$VIs%9dcQ&$W^%}*QHZ#$W6H=x8;u9m3wkuy5xa8lt<@=TX`pw@?NH7T0Y1}nUPtUlTY$l=4C+^W$7pW et}l)UL1r~PD>wAt(1~Av`b-!8XOE8fqhKAf44i)e diff --git a/Natives/resources/en.lproj/Localizable.strings b/Natives/resources/en.lproj/Localizable.strings index bfe6148b..cb989cc5 100644 --- a/Natives/resources/en.lproj/Localizable.strings +++ b/Natives/resources/en.lproj/Localizable.strings @@ -218,6 +218,9 @@ "preference.title.java_args" = "JVM Launch arguments"; "preference.detail.java_args" = "Pass arguments to Java when launching Minecraft. Be careful, this can make the game crash if modified incorrectly."; "preference.placeholder.java_args" = "Specify arguments..."; +"preference.title.env_variables" = "Environment variables"; +"preference.detail.env_variables" = "Set custom environment variables when launching Minecraft. Be careful, this can make the game crash if modified incorrectly."; +"preference.placeholder.env_variables" = "Specify variables..."; "preference.title.auto_ram" = "Auto RAM"; "preference.detail.auto_ram" = "Enables automatic RAM adjuster"; "preference.warn.auto_ram" = "Disabling this option on an unjailbroken device can create instability if altered. Proceed with caution.";