package net.slimevoid.library.util.helpers; import java.lang.reflect.Field; import java.lang.reflect.Modifier; /** * Example Usage: * <p/> * Object privateVariable = ReflectionHelper.getInstance([ClassName].class).getPrivateFieldAtIndex(0); * <p/> * if (privateVariable instanceof Block) { * Block block = (Block) privateVariable; * } * * @author Gregory Jones */ public class ReflectionHelper { public Class _clazz; public ReflectionHelper(Class clazz) { this._clazz = clazz; } public static ReflectionHelper getInstance(Class clazz) { if (clazz != null) { return new ReflectionHelper(clazz); } return new ReflectionHelper(ReflectionHelper.class); } public boolean setFinalStaticFieldAtIndex(int declaredIndex, Object newValue) { try { Field declaredField = this._clazz.getDeclaredFields()[declaredIndex]; this.setFinalStatic(declaredField, newValue); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); } public Object getPrivateFieldAtIndex(int declaredIndex) { try { Field declaredField = this._clazz.getDeclaredFields()[declaredIndex]; return this.getPrivate(declaredField); } catch (Exception e) { e.printStackTrace(); return null; } } public Object getPrivate(Field field) throws Exception { boolean flag = field.isAccessible(); field.setAccessible(true); Object result = field.get(field); field.setAccessible(flag); return result; } }