package io.github.jordandoyle.mcinject.proxy.proxies; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.objectweb.asm.Type; import io.github.jordandoyle.mcinject.helpers.ObfuscatedMapping; import io.github.jordandoyle.mcinject.proxy.Proxy; import io.github.jordandoyle.mcinject.proxy.interfaces.Minecraft; public class MinecraftProxy implements Proxy { private static Class c; private static Object instance; static { try { String className = (new ObfuscatedMapping("net/minecraft/src/Minecraft")).getMapping(); c = Class.forName(className); Method m = c.getDeclaredMethod((new ObfuscatedMapping("net/minecraft/src/Minecraft", "getMinecraft", "()L" + className.replace(".", "/") + ";")).getMapping()); instance = m.invoke(null); } catch (Exception e) { e.printStackTrace(); } } @Override public Object proxy() { return java.lang.reflect.Proxy.newProxyInstance(Minecraft.class.getClassLoader(), new Class[] { Minecraft.class }, this); } @Override public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { Object res = null; String name = new ObfuscatedMapping("net/minecraft/src/Minecraft", m.getName(), Type.getMethodDescriptor(m)).getMapping(); m = c.getDeclaredMethod(name, m.getParameterTypes()); m.setAccessible(true); res = m.invoke(instance, args); return res; } }