From 71a9bf9f70cce755d98b6e366d0b0b7b9d6b38f8 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 6 Apr 2012 13:27:50 -0400 Subject: [PATCH] Fix package private resolution of fields/methods from base minecraft by loading into minecraft's class loader not our own --- .../cpw/mods/fml/common/ModClassLoader.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/fml/common/cpw/mods/fml/common/ModClassLoader.java b/fml/common/cpw/mods/fml/common/ModClassLoader.java index ca8721491..990543665 100644 --- a/fml/common/cpw/mods/fml/common/ModClassLoader.java +++ b/fml/common/cpw/mods/fml/common/ModClassLoader.java @@ -14,6 +14,7 @@ package cpw.mods.fml.common; import java.io.File; +import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; @@ -36,8 +37,19 @@ public class ModClassLoader extends URLClassLoader public void addFile(File modFile) throws MalformedURLException { - URL url = modFile.toURI().toURL(); - super.addURL(url); + ClassLoader cl=getParent(); + if (cl instanceof URLClassLoader) { + URLClassLoader ucl=(URLClassLoader) cl; + URL url = modFile.toURI().toURL(); + try { + Method addUrl=URLClassLoader.class.getMethod("addUrl", URL.class); + addUrl.setAccessible(true); + addUrl.invoke(ucl, url); + } catch (Exception e) { + Loader.log.severe("A fatal error occured attempting to load a file into the classloader"); + throw new LoaderException(e); + } + } } public File getParentSource() {