Skip to content

Commit d1e5bf8

Browse files
committed
add stage 2 compatibility for FabricLoader subclasses e.g. lunar client
Linear: EM-3472
1 parent d75286a commit d1e5bf8

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

stage2/fabric/src/main/java/gg/essential/loader/stage2/EssentialLoader.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,10 +347,26 @@ private Object createCandidate(Path path, URL url, Object metadata) throws Class
347347
}
348348
}
349349

350+
private Class<?> findFabricLoaderClass(FabricLoader fabricLoader) throws ClassNotFoundException {
351+
Class<?> clazz = fabricLoader.getClass();
352+
while (clazz != null) {
353+
try {
354+
clazz.getDeclaredField("modMap");
355+
clazz.getDeclaredField("mods");
356+
clazz.getDeclaredField("entrypointStorage");
357+
clazz.getDeclaredField("adapterMap");
358+
return clazz;
359+
} catch (NoSuchFieldException ignored) {
360+
clazz = clazz.getSuperclass();
361+
}
362+
}
363+
throw new ClassNotFoundException("Could not find the required fields [modMap, mods, entrypointStorage, adapterMap] anywhere in the class hierarchy of FabricLoader.getInstance()");
364+
}
365+
350366
@SuppressWarnings("unchecked")
351367
private void injectFakeMod(final Path path, final URL url, final ModMetadata metadata) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException, InstantiationException {
352368
FabricLoader fabricLoader = FabricLoader.getInstance();
353-
Class<? extends FabricLoader> fabricLoaderClass = fabricLoader.getClass();
369+
Class<?> fabricLoaderClass = findFabricLoaderClass(fabricLoader);
354370
Class<?> ModContainerImpl;
355371
try {
356372
// fabric-loader 0.12

0 commit comments

Comments
 (0)