From e46910f3c18234e0a57d917a82f09f8ff6caf42d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 25 Apr 2023 12:03:19 -0400 Subject: [PATCH] Add Opticrash detection --- .../modernfix/core/ModernFixMixinPlugin.java | 3 +++ .../core/config/ModernFixEarlyConfig.java | 20 +++++++++++++++++-- .../WindowMixin.java | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java index df6e7933..facdbb8f 100644 --- a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java +++ b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java @@ -53,6 +53,9 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { this.logger.info("Loaded configuration file for ModernFix: {} options available, {} override(s) found", config.getOptionCount(), config.getOptionOverrideCount()); + if(ModernFixEarlyConfig.OPTIFINE_PRESENT) + this.logger.fatal("OptiFine detected. Use of ModernFix with OptiFine is not supported due to its impact on launch time and breakage of Forge features."); + try { Class.forName("sun.misc.Unsafe").getDeclaredMethod("defineAnonymousClass", Class.class, byte[].class, Object[].class); } catch(ReflectiveOperationException | NullPointerException e) { diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 2096da80..b1e487ce 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -14,8 +14,23 @@ public class ModernFixEarlyConfig { private final Map options = new HashMap<>(); + public static final boolean OPTIFINE_PRESENT; + + static { + boolean hasOfClass = false; + try { + Class.forName("optifine.OptiFineTransformationService"); + hasOfClass = true; + } catch(Throwable e) { + } + OPTIFINE_PRESENT = hasOfClass; + } + private static boolean modPresent(String modId) { - return FMLLoader.getLoadingModList().getModFileById(modId) != null; + if(modId.equals("optifine")) + return OPTIFINE_PRESENT; + else + return FMLLoader.getLoadingModList().getModFileById(modId) != null; } private ModernFixEarlyConfig() { @@ -87,11 +102,12 @@ public class ModernFixEarlyConfig { disableIfModPresent("mixin.perf.compress_biome_container", "chocolate", "betterendforge"); disableIfModPresent("mixin.bugfix.mc218112", "performant"); disableIfModPresent("mixin.perf.reuse_datapacks", "tac"); + disableIfModPresent("mixin.launch.class_search_cache", "optifine"); } private void disableIfModPresent(String configName, String... ids) { for(String id : ids) { - if(FMLLoader.getLoadingModList().getModFileById(id) != null) { + if(modPresent(id)) { Option option = this.options.get(configName); if(option != null) option.addModOverride(false, id); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java index 1333440b..b3bed93d 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java @@ -52,7 +52,7 @@ public class WindowMixin { * Grab the original width/height from the window and inject them into our state variables. */ @SuppressWarnings("unchecked") - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/loading/progress/EarlyProgressVisualization;handOffWindow(Ljava/util/function/IntSupplier;Ljava/util/function/IntSupplier;Ljava/util/function/Supplier;Ljava/util/function/LongSupplier;)J")) + @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/loading/progress/EarlyProgressVisualization;handOffWindow(Ljava/util/function/IntSupplier;Ljava/util/function/IntSupplier;Ljava/util/function/Supplier;Ljava/util/function/LongSupplier;)J"), require = 0) private long performHandoff(EarlyProgressVisualization instance, IntSupplier width, IntSupplier height, Supplier title, LongSupplier monitor) { Object visualizer = getEarlyProgressVisualizer(); if(visualizer != null) {