From d1e5bf884ee7418b767e15a131114530c39fd836 Mon Sep 17 00:00:00 2001 From: Traben Date: Sun, 9 Nov 2025 21:24:22 +1000 Subject: [PATCH] add stage 2 compatibility for FabricLoader subclasses e.g. lunar client Linear: EM-3472 --- .../loader/stage2/EssentialLoader.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/stage2/fabric/src/main/java/gg/essential/loader/stage2/EssentialLoader.java b/stage2/fabric/src/main/java/gg/essential/loader/stage2/EssentialLoader.java index 1ba2058..9848867 100644 --- a/stage2/fabric/src/main/java/gg/essential/loader/stage2/EssentialLoader.java +++ b/stage2/fabric/src/main/java/gg/essential/loader/stage2/EssentialLoader.java @@ -347,10 +347,26 @@ private Object createCandidate(Path path, URL url, Object metadata) throws Class } } + private Class findFabricLoaderClass(FabricLoader fabricLoader) throws ClassNotFoundException { + Class clazz = fabricLoader.getClass(); + while (clazz != null) { + try { + clazz.getDeclaredField("modMap"); + clazz.getDeclaredField("mods"); + clazz.getDeclaredField("entrypointStorage"); + clazz.getDeclaredField("adapterMap"); + return clazz; + } catch (NoSuchFieldException ignored) { + clazz = clazz.getSuperclass(); + } + } + throw new ClassNotFoundException("Could not find the required fields [modMap, mods, entrypointStorage, adapterMap] anywhere in the class hierarchy of FabricLoader.getInstance()"); + } + @SuppressWarnings("unchecked") private void injectFakeMod(final Path path, final URL url, final ModMetadata metadata) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException, InstantiationException { FabricLoader fabricLoader = FabricLoader.getInstance(); - Class fabricLoaderClass = fabricLoader.getClass(); + Class fabricLoaderClass = findFabricLoaderClass(fabricLoader); Class ModContainerImpl; try { // fabric-loader 0.12