diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index 0c135370..f7f2ccb6 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -18,7 +18,6 @@ package baritone.bot; import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; import java.util.*; /** @@ -45,10 +44,11 @@ public class Settings { public class Setting { public T value; private String name; - private Class klass; + private final Class klass; - private Setting(V value) { + private Setting(T value) { this.value = value; + this.klass = (Class) value.getClass(); } public final T get() { @@ -70,41 +70,31 @@ public class Settings { Field[] temp = getClass().getFields(); HashMap> tmpByName = new HashMap<>(); List> tmpAll = new ArrayList<>(); - for (Field field : temp) { - if (field.getType().equals(Setting.class)) { - try { - ParameterizedType param = (ParameterizedType) field.getGenericType(); - Class settingType = (Class) param.getActualTypeArguments()[0]; - // can't always do field.get(this).value.getClass() because default value might be null + try { + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { Setting setting = (Setting) field.get(this); - if (setting.value != null) { - if (setting.value.getClass() != settingType) { - throw new IllegalStateException("Generic mismatch" + setting.value + " " + setting.value.getClass() + " " + settingType); - } - } String name = field.getName(); setting.name = name; - setting.klass = settingType; if (tmpByName.containsKey(name)) { throw new IllegalStateException("Duplicate setting name"); } tmpByName.put(name, setting); tmpAll.add(setting); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); } - } + } catch (IllegalAccessException e) { + throw new RuntimeException(e); } byName = Collections.unmodifiableMap(tmpByName); allSettings = Collections.unmodifiableList(tmpAll); } - public List> getByValueType(Class klass) { - ArrayList> result = new ArrayList<>(); + public List> getByValueType(Class klass) { + ArrayList> result = new ArrayList<>(); for (Setting setting : allSettings) { if (setting.klass.equals(klass)) { - result.add((Setting) setting); + result.add((Setting) setting); } } return result;