package gminers.glasspane.ease; import java.lang.reflect.AccessibleObject; public class AggressiveFieldAccessor<T> implements FieldAccessor<T> { private Object access; private Class<?> clazz; private String field; public AggressiveFieldAccessor(Object access, Class<?> clazz, String field) { this.access = access; this.clazz = clazz; this.field = field; } @SuppressWarnings("unchecked") @Override public T get() { try { return (T) accessible(clazz.getDeclaredField(field)).get(access); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Could not get " + field + " from " + clazz.getName()); } } @Override public void set(T val) { try { accessible(clazz.getDeclaredField(field)).set(access, val); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Could not set " + field + " in " + clazz.getName()); } } private <X extends AccessibleObject> X accessible(X x) { x.setAccessible(true); return x; } }