Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.klein5.TowerDefense.datawatcher;
- import java.lang.reflect.Field;
- import org.bukkit.Bukkit;
- import de.klein5.TowerDefense.datawatcher.Reflection.FieldAccessor;
- public enum EnumDataWatcherObjects {
- ENTITY_BITMASK_00("Entity","ay"),
- ENTITY_AIR_01("Entity","az"),
- ENTITY_NAME_02("Entity","aA"),
- ENTITY_NAME_VISABLE_03("Entity","aB"),
- ENTITY_SILENT_04("Entity","aC"),
- LIVING_HAND_05("EntityLiving","at"),
- LIVING_HEALTH_06("EntityLiving","HEALTH"),
- LIVING_POITION_COLOR_07("EntityLiving","f"),
- LIVING_POITION_AMBIENT_08("EntityLiving","g"),
- LIVING_ARROWS_09("EntityLiving","h"),
- HUMAN_ABSORPTION_10("EntityHuman","a"),
- HUMAN_SCORE_11("EntityHuman","b"),
- HUMAN_SKIN_12("EntityHuman","bq"),
- HUMAN_UNKNOWN_13("EntityHuman","br");
- private EnumDataWatcherObjects(String owner, String field) {
- Class<?> ownerClass = getClass(ServerPackets.MINECRAFT_PACKAGE, owner);
- this.object = getField(ownerClass, field).get(null);
- }
- private Object object;
- public Object getObject(){
- return object;
- }
- public static Class<?> getClass(ServerPackets packet, String name) {
- try {
- return Class.forName(packet + name);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- return null;
- }
- public static <T> FieldAccessor<T> getField(Class<?> target, String fieldName) {
- return getField(target, fieldName, null, 0);
- }
- public static <T> FieldAccessor<T> getField(Class<?> target, Class<T> fieldType, int index) {
- return getField(target, null, fieldType, index);
- }
- private static <T> FieldAccessor<T> getField(Class<?> target, String fieldName, Class<T> fieldType, int index) {
- for (final Field field : target.getDeclaredFields())
- if ((fieldName == null || fieldName.equals(field.getName())) && (fieldType == null || (fieldType.isAssignableFrom(field.getType()) && index-- <= 0))) {
- field.setAccessible(true);
- return new FieldAccessor<T>() {
- @Override
- @SuppressWarnings("unchecked")
- public T get(Object target) {
- try {
- return (T) field.get(target);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException("Cannot use reflection.", e);
- } catch (IllegalArgumentException e) {
- throw e;
- }
- }
- @Override
- public void set(Object target, Object value) {
- try {
- field.set(target, value);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException("Cannot use reflection.", e);
- } catch (IllegalArgumentException e) {
- throw e;
- }
- }
- public Field getField() {
- return field;
- }
- @Override
- public boolean hasField(Object target) {
- // TODO Auto-generated method stub
- return false;
- }
- };
- }
- if (target.getSuperclass() != null)
- return getField(target.getSuperclass(), fieldName, fieldType, index);
- throw new IllegalStateException(String.format("Unable to find field %s (%s).", fieldName, fieldType));
- }
- public enum ServerPackets {
- MINECRAFT_PACKAGE("net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().substring(23));
- ServerPackets(String source) {
- this.name = source;
- }
- private final String name;
- @Override
- public String toString() {
- return this.name + ".";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement