diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/Point.java b/src/main/java/eu/crushedpixel/replaymod/holders/Point.java index 81bb183a..e54c47bb 100644 --- a/src/main/java/eu/crushedpixel/replaymod/holders/Point.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/Point.java @@ -1,5 +1,6 @@ package eu.crushedpixel.replaymod.holders; +import eu.crushedpixel.replaymod.interpolation.Interpolate; import eu.crushedpixel.replaymod.interpolation.KeyframeValue; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @@ -8,6 +9,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class Point extends KeyframeValue { + @Interpolate public double x, y; } diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/Position.java b/src/main/java/eu/crushedpixel/replaymod/holders/Position.java index 12a198be..c6e516d9 100755 --- a/src/main/java/eu/crushedpixel/replaymod/holders/Position.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/Position.java @@ -1,5 +1,6 @@ package eu.crushedpixel.replaymod.holders; +import eu.crushedpixel.replaymod.interpolation.Interpolate; import eu.crushedpixel.replaymod.interpolation.KeyframeValue; import lombok.AllArgsConstructor; import lombok.Data; @@ -14,7 +15,9 @@ import net.minecraft.entity.Entity; @EqualsAndHashCode(callSuper=true) public class Position extends KeyframeValue { + @Interpolate public double x, y, z; + @Interpolate public double pitch, yaw, roll; private Integer spectatedEntityID; diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/TimestampValue.java b/src/main/java/eu/crushedpixel/replaymod/holders/TimestampValue.java index cd2c1360..ce718f2e 100644 --- a/src/main/java/eu/crushedpixel/replaymod/holders/TimestampValue.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/TimestampValue.java @@ -1,5 +1,6 @@ package eu.crushedpixel.replaymod.holders; +import eu.crushedpixel.replaymod.interpolation.Interpolate; import eu.crushedpixel.replaymod.interpolation.KeyframeValue; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @@ -8,6 +9,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class TimestampValue extends KeyframeValue { + @Interpolate public double value; } diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java index 06f96ece..2bc57fe7 100755 --- a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericLinearInterpolation.java @@ -1,7 +1,6 @@ package eu.crushedpixel.replaymod.interpolation; import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; @@ -23,7 +22,7 @@ public class GenericLinearInterpolation implements Inte List fields = new ArrayList(); for(Field f : point.getClass().getDeclaredFields()) { - if(Modifier.isPublic(f.getModifiers())) { + if(f.isAnnotationPresent(Interpolate.class)) { fields.add(f); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java index d6f75842..615e6a70 100755 --- a/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/GenericSplineInterpolation.java @@ -1,7 +1,6 @@ package eu.crushedpixel.replaymod.interpolation; import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; import java.util.Vector; @@ -22,7 +21,7 @@ public class GenericSplineInterpolation extends BasicSp List fields = new ArrayList(); for(Field f : point.getClass().getDeclaredFields()) { - if(Modifier.isPublic(f.getModifiers())) { + if(f.isAnnotationPresent(Interpolate.class)) { fields.add(f); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/Interpolate.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/Interpolate.java new file mode 100644 index 00000000..dd00039f --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/Interpolate.java @@ -0,0 +1,13 @@ +package eu.crushedpixel.replaymod.interpolation; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Interpolate { + +} diff --git a/src/main/java/eu/crushedpixel/replaymod/interpolation/KeyframeValue.java b/src/main/java/eu/crushedpixel/replaymod/interpolation/KeyframeValue.java index d6a31e1d..e8328504 100644 --- a/src/main/java/eu/crushedpixel/replaymod/interpolation/KeyframeValue.java +++ b/src/main/java/eu/crushedpixel/replaymod/interpolation/KeyframeValue.java @@ -2,7 +2,7 @@ package eu.crushedpixel.replaymod.interpolation; /** * An abstract class that GenericSplineInterpolation can process. - * Subclasses simply have to declare at least one public double field, + * Subclasses simply have to annotate at least one field with @Interpolate, * and the GenericSplineInterpolation will interpolate these. *

* It is recommended for KeyframeValue subclasses to have a @NoArgsConstructor annotation.