From 3ce925c4b116dd02996be770c6f0dcee106ca7c3 Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Mon, 12 Aug 2024 13:47:08 +0200 Subject: [PATCH] more robust optifine detection --- .../optifine/RenderGlobalDeOptimizer.java | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/falsepattern/falsetweaks/asm/modules/occlusion/optifine/RenderGlobalDeOptimizer.java b/src/main/java/com/falsepattern/falsetweaks/asm/modules/occlusion/optifine/RenderGlobalDeOptimizer.java index a61cc5e..1ac95b3 100644 --- a/src/main/java/com/falsepattern/falsetweaks/asm/modules/occlusion/optifine/RenderGlobalDeOptimizer.java +++ b/src/main/java/com/falsepattern/falsetweaks/asm/modules/occlusion/optifine/RenderGlobalDeOptimizer.java @@ -32,8 +32,11 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.TypeInsnNode; +import net.minecraft.launchwrapper.Launch; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.relauncher.FMLLaunchHandler; import cpw.mods.fml.relauncher.Side; /** @@ -69,11 +72,36 @@ public boolean shouldTransformClass(@NotNull String className, @NotNull ClassNod } private static class LazyOptiFineCheck { + private static Boolean optifineDetected = null; private static boolean hasOptiFine() { - if (FMLCommonHandler.instance().getSide() == Side.CLIENT) { - return FMLClientHandler.instance().hasOptifine(); + Boolean detected = optifineDetected; + if (detected == null) { + if (FMLLaunchHandler.side().isClient()) { + try { + //We might be too early but let's try the standard way + detected = FMLClientHandler.instance().hasOptifine(); + } catch (Throwable ignored) { + //Ok, we'll do it manually then + try { + ClassLoader cl; + cl = Loader.instance().getModClassLoader(); + if (cl == null) { + cl = Launch.classLoader; + } + Class.forName("Config", false, cl); + detected = true; + } catch (Throwable ignored1) { + //99.9% sure that optifine is not present + detected = false; + } + } + } else { + //server shouldn't have OF + detected = false; + } + optifineDetected = detected; } - return false; + return detected; } }