package net.mcforkage.compat;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class MCFCompat {
public static void init(LaunchClassLoader cl) {
cl.registerTransformer("net.mcforkage.compat.HardcoreEnderExpansionTransformer");
cl.registerTransformer("net.mcforkage.compat.GregtechFluidStackTransformer");
cl.addTransformerExclusion("openmods.stencil.FramebufferHooks");
final LaunchClassLoader old = Launch.classLoader;
Launch.classLoader = new LaunchClassLoader(new URL[0]) {
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
return old.loadClass(name);
}
@Override
public void addClassLoaderExclusion(String toExclude) {
old.addClassLoaderExclusion(toExclude);
}
@Override
public void addTransformerExclusion(String toExclude) {
old.addTransformerExclusion(toExclude);
}
@Override
public void clearNegativeEntries(Set<String> entriesToClear) {
old.clearNegativeEntries(entriesToClear);
}
@Override
public void clearAssertionStatus() {
old.clearAssertionStatus();
}
@Override
public void close() throws IOException {
old.close();
}
@Override
public Class<?> findClass(String arg0) throws ClassNotFoundException {
return old.findClass(arg0);
}
@Override
public URL findResource(String name) {
return old.findResource(name);
}
@Override
public Enumeration<URL> findResources(String name) throws IOException {
return old.findResources(name);
}
@Override
public byte[] getClassBytes(String arg0) throws IOException {
// prevent some mods from deciding they're running in MCP
if(arg0.equals("net.minecraft.world.World")) {
StackTraceElement[] stackTrace = new Exception().getStackTrace();
if(stackTrace[1].getClassName().equals("codechicken.lib.asm.ObfMapping") && stackTrace[1].getMethodName().equals("<clinit>"))
return null;
if(stackTrace[1].getClassName().equals("cofh.asm.LoadingPlugin") && stackTrace[1].getMethodName().equals("<clinit>"))
return null;
if(stackTrace[1].getClassName().equals("micdoodle8.mods.miccore.MicdoodlePlugin") && stackTrace[1].getMethodName().equals("getAccessTransformerClass"))
return null;
if(stackTrace[1].getClassName().equals("logisticspipes.asm.LogisticsPipesCoreLoader") && stackTrace[1].getMethodName().equals("<init>"))
return null;
if(stackTrace[1].getClassName().equals("chocohead.patcher.PatcherPlugin") && stackTrace[1].getMethodName().equals("<clinit>"))
return null;
}
return old.getClassBytes(arg0);
}
@Override
public URL getResource(String name) {
return old.getResource(name);
}
@Override
public InputStream getResourceAsStream(String name) {
return old.getResourceAsStream(name);
}
@Override
public Enumeration<URL> getResources(String name) throws IOException {
return old.getResources(name);
}
@Override
public List<URL> getSources() {
return old.getSources();
}
@Override
public List<IClassTransformer> getTransformers() {
return old.getTransformers();
}
@Override
public URL[] getURLs() {
return old.getURLs();
}
@Override
public void registerTransformer(String arg0) {
old.registerTransformer(arg0);
}
@Override
public void setClassAssertionStatus(String className,
boolean enabled) {
old.setClassAssertionStatus(className, enabled);
}
@Override
public void setDefaultAssertionStatus(boolean enabled) {
old.setDefaultAssertionStatus(enabled);
}
@Override
public void setPackageAssertionStatus(String packageName, boolean enabled) {
old.setPackageAssertionStatus(packageName, enabled);
}
};
}
public static String replaceTransformer(String transformerClassName) {
return transformerClassName;
}
}