diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java index 2bc57fe7..9d3f8cad 100755 --- a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java @@ -1,5 +1,7 @@ package eu.crushedpixel.replaymod.interpolation; +import eu.crushedpixel.replaymod.utils.ReflectionUtils; + import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -20,12 +22,7 @@ public class GenericLinearInterpolation implements Inte public void addPoint(T point) { points.add(point); - List fields = new ArrayList(); - for(Field f : point.getClass().getDeclaredFields()) { - if(f.isAnnotationPresent(Interpolate.class)) { - fields.add(f); - } - } + List fields = ReflectionUtils.getFieldsToInterpolate(point.getClass()); this.fields = fields.toArray(new Field[fields.size()]); } diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java index 615e6a70..979bb00c 100755 --- a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java @@ -1,7 +1,8 @@ package eu.crushedpixel.replaymod.interpolation; +import eu.crushedpixel.replaymod.utils.ReflectionUtils; + import java.lang.reflect.Field; -import java.util.ArrayList; import java.util.List; import java.util.Vector; @@ -19,12 +20,7 @@ public class GenericSplineInterpolation extends BasicSp public void addPoint(T point) { this.points.add(point); - List fields = new ArrayList(); - for(Field f : point.getClass().getDeclaredFields()) { - if(f.isAnnotationPresent(Interpolate.class)) { - fields.add(f); - } - } + List fields = ReflectionUtils.getFieldsToInterpolate(point.getClass()); this.fields = fields.toArray(new Field[fields.size()]); } diff --git a/src/main/java/eu/crushedpixel/replaymod/utils/ReflectionUtils.java b/src/main/java/eu/crushedpixel/replaymod/utils/ReflectionUtils.java new file mode 100644 index 00000000..80f35c82 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/utils/ReflectionUtils.java @@ -0,0 +1,24 @@ +package eu.crushedpixel.replaymod.utils; + +import eu.crushedpixel.replaymod.interpolation.Interpolate; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +public class ReflectionUtils { + + public static List getFieldsToInterpolate(Class clazz) { + List fields = new ArrayList(); + for(Field f : clazz.getDeclaredFields()) { + if(f.isAnnotationPresent(Interpolate.class)) fields.add(f); + } + + if(clazz.getSuperclass() != Object.class) { + fields.addAll(getFieldsToInterpolate(clazz.getSuperclass())); + } + + return fields; + } + +}