diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java index 6ea3a037..ce5c0ee5 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -71,7 +71,7 @@ public final class Tools public static final String CTRLMAP_PATH = DIR_GAME_NEW + "/controlmap"; public static final String CTRLDEF_FILE = DIR_GAME_NEW + "/controlmap/default.json"; - public static final String LIBNAME_OPTIFINE = "optifine:OptiFine"; + public static final String NATIVE_LIB_DIR = DIR_BUNDLE + "/Frameworks"; volatile public static int mGLFWWindowWidth, mGLFWWindowHeight; @@ -172,6 +172,7 @@ public final class Tools varArgMap.put("user_type", "msa"); varArgMap.put("version_name", versionName); varArgMap.put("version_type", versionInfo.type); + varArgMap.put("natives_directory", Tools.NATIVE_LIB_DIR); List minecraftArgs = new ArrayList(); if (versionInfo.arguments != null) { diff --git a/Natives/GameSurfaceView.m b/Natives/GameSurfaceView.m index cc1bc9d2..67007185 100644 --- a/Natives/GameSurfaceView.m +++ b/Natives/GameSurfaceView.m @@ -19,9 +19,10 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; + self.layer.drawsAsynchronously = YES; + self.layer.opaque = YES; if ([getPreference(@"renderer") hasPrefix:@"libOSMesaOverride"]) { - self.layer.opaque = YES; colorSpace = CGColorSpaceCreateDeviceRGB(); diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 2a93a70e..868cb2ac 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -30,6 +30,9 @@ void init_loadCustomEnv() { setenv("JAVA_AWT_PATH", [NSString stringWithFormat:@"%s/Frameworks/libawt.dylib", getenv("BUNDLE_PATH")].UTF8String, 1); } + // Silent Caciocavallo NPE error in locating Android-only lib + setenv("LD_LIBRARY_PATH", "", 1); + // Disable overloaded functions hack for Minecraft 1.17+ setenv("LIBGL_NOINTOVLHACK", "1", 1); diff --git a/Natives/LauncherMenuViewController.m b/Natives/LauncherMenuViewController.m index 8cc5e4e4..71cbf610 100644 --- a/Natives/LauncherMenuViewController.m +++ b/Natives/LauncherMenuViewController.m @@ -268,9 +268,9 @@ - (void)displayProgress:(NSString *)status { if (status == nil) { [(UIActivityIndicatorView *)self.toolbarItems[0].customView stopAnimating]; - return; + } else { + self.toolbarItems[1].title = status; } - self.toolbarItems[1].title = status; } - (void)enableJITWithAltJIT diff --git a/Natives/LauncherNavigationController.m b/Natives/LauncherNavigationController.m index 4083bc5f..ca4c1f33 100644 --- a/Natives/LauncherNavigationController.m +++ b/Natives/LauncherNavigationController.m @@ -77,7 +77,6 @@ self.buttonInstall = [UIButton buttonWithType:UIButtonTypeSystem]; setButtonPointerInteraction(self.buttonInstall); - self.buttonInstall.enabled = NO; [self.buttonInstall setTitle:localize(@"Play", nil) forState:UIControlStateNormal]; self.buttonInstall.autoresizingMask = AUTORESIZE_MASKS; self.buttonInstall.backgroundColor = [UIColor colorWithRed:54/255.0 green:176/255.0 blue:48/255.0 alpha:1.0]; @@ -149,18 +148,45 @@ - (void)reloadVersionList:(int)type { + __block NSObject *lastSelected = nil; + if (self.versionList.count > 0 && self.versionSelectedAt >= 0) { + lastSelected = self.versionList[self.versionSelectedAt]; + } + [self.versionList removeAllObjects]; + + void(^reloadCompletion)(void) = ^{ + [self.versionPickerView reloadAllComponents]; + + if (self.versionSelectedAt < 0 && lastSelected != nil) { + NSObject *nearest = [MinecraftResourceUtils findNearestVersion:lastSelected expectedType:type]; + if (nearest != nil) { + self.versionSelectedAt = [self.versionList indexOfObject:nearest]; + } + } + lastSelected = nil; + + // Get back the currently selected in case none matching version found + self.versionSelectedAt = MIN(abs(self.versionSelectedAt), self.versionList.count - 1); + + [self.versionPickerView selectRow:self.versionSelectedAt inComponent:0 animated:NO]; + [self pickerView:self.versionPickerView didSelectRow:self.versionSelectedAt inComponent:0]; + + self.buttonInstall.enabled = YES; + self.progressViewMain.progress = 0; + }; + + if (type == TYPE_INSTALLED) { + [self fetchLocalVersionList:self.versionList]; + reloadCompletion(); + return; + } + self.buttonInstall.enabled = NO; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:@"https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" parameters:nil headers:nil progress:^(NSProgress * _Nonnull progress) { self.progressViewMain.progress = progress.fractionCompleted; } success:^(NSURLSessionTask *task, NSDictionary *responseObject) { - NSObject *lastSelected = nil; - if (self.versionList.count > 0 && self.versionSelectedAt >= 0) { - lastSelected = self.versionList[self.versionSelectedAt]; - } - [self.versionList removeAllObjects]; - remoteVersionList = responseObject[@"versions"]; assert(remoteVersionList != nil); self.versionSelectedAt = -self.versionSelectedAt; @@ -181,32 +207,10 @@ } } - if (type == TYPE_INSTALLED) { - [self fetchLocalVersionList:self.versionList]; - } - - [self.versionPickerView reloadAllComponents]; - if (self.versionSelectedAt < 0 && lastSelected != nil) { - NSObject *nearest = [MinecraftResourceUtils findNearestVersion:lastSelected expectedType:type]; - if (nearest != nil) { - self.versionSelectedAt = [self.versionList indexOfObject:nearest]; - } - } - - // Get back the currently selected in case none matching version found - self.versionSelectedAt = MIN(abs(self.versionSelectedAt), self.versionList.count - 1); - - [self.versionPickerView selectRow:self.versionSelectedAt inComponent:0 animated:NO]; - [self pickerView:self.versionPickerView didSelectRow:self.versionSelectedAt inComponent:0]; - - self.buttonInstall.enabled = YES; - self.progressViewMain.progress = 0; + reloadCompletion(); } failure:^(NSURLSessionTask *operation, NSError *error) { - NSLog(@"Warning: Error fetching version list: %@", error); - self.buttonInstall.enabled = YES; - if (type == TYPE_INSTALLED) { - [self fetchLocalVersionList:self.versionList]; - } + NSLog(@"Warning: Unable to fetch version list: %@", error); + reloadCompletion(); }]; } @@ -255,6 +259,7 @@ - (void)launchMinecraft:(UIButton *)sender { if (!self.versionTextField.hasText) { + [self.versionTextField becomeFirstResponder]; return; } diff --git a/Natives/SurfaceViewController.m b/Natives/SurfaceViewController.m index cfc278e9..7e675b94 100644 --- a/Natives/SurfaceViewController.m +++ b/Natives/SurfaceViewController.m @@ -192,7 +192,6 @@ BOOL slideableHotbar; NSLog(@"Input: Mouse connected!"); GCMouse* mouse = note.object; [self registerMouseCallbacks:mouse]; - [self setNeedsUpdateOfPrefersPointerLocked]; self.mousePointerView.hidden = isGrabbing; virtualMouseEnabled = YES; }]; @@ -253,6 +252,13 @@ BOOL slideableHotbar; [self launchMinecraft]; } +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + if (@available(iOS 14.0, *)) { + [self setNeedsUpdateOfPrefersPointerLocked]; + } +} + - (void)updateJetsamControl { if (!getEntitlementValue(@"com.apple.private.memorystatus")) { return; @@ -579,6 +585,8 @@ BOOL slideableHotbar; mouse.mouseInput.scroll.yAxis.valueChangedHandler = ^(GCControllerAxisInput * _Nonnull axis, float value) { CallbackBridge_nativeSendScroll(0, -value); }; + + [self setNeedsUpdateOfPrefersPointerLocked]; } - (void)surfaceOnClick:(UITapGestureRecognizer *)sender {