package com.dynious.biota.asm; import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; import squeek.asmhelper.applecore.ObfHelper; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; public class MethodFieldObfHelper { private static Method getFieldMap; private static Method getMethodMap; static { try { getFieldMap = FMLDeobfuscatingRemapper.class.getDeclaredMethod("getFieldMap", String.class); getFieldMap.setAccessible(true); getMethodMap = FMLDeobfuscatingRemapper.class.getDeclaredMethod("getMethodMap", String.class); getMethodMap.setAccessible(true); } catch (NoSuchMethodException e) { e.printStackTrace(); } } public static String field(String deobfClassName, String deobfFieldName) { if (!ObfHelper.isObfuscated()) return deobfFieldName; try { Map<String, String> map = (Map<String, String>) getFieldMap.invoke(FMLDeobfuscatingRemapper.INSTANCE, ObfHelper.forceToObfClassName(deobfClassName)); if (map != null) { for (Map.Entry<String, String> e : map.entrySet()) { if (deobfFieldName.equals(e.getValue())) { return e.getKey().substring(0, e.getKey().indexOf(':')); } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return deobfFieldName; } public static String method(String deobfClassName, String deobfMethodName) { if (!ObfHelper.isObfuscated()) return deobfMethodName; try { Map<String, String> map = (Map<String, String>) getMethodMap.invoke(FMLDeobfuscatingRemapper.INSTANCE, ObfHelper.forceToObfClassName(deobfClassName)); if (map != null) { for (Map.Entry<String, String> e : map.entrySet()) { if (deobfMethodName.equals(e.getValue())) { return e.getKey().substring(0, e.getKey().indexOf('(')); } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return deobfMethodName; } }