diff --git a/src/main/java/noppes/npcs/constants/EnumAnimationPart.java b/src/main/java/noppes/npcs/constants/EnumAnimationPart.java
new file mode 100644
index 000000000..b17bd34cf
--- /dev/null
+++ b/src/main/java/noppes/npcs/constants/EnumAnimationPart.java
@@ -0,0 +1,18 @@
+package noppes.npcs.constants;
+
+public enum EnumAnimationPart {
+ HEAD ("HEAD"),
+ BODY ("BODY"),
+ RIGHT_ARM ("RARM"),
+ LEFT_ARM ("LARM"),
+ RIGHT_LEG ("RLEG"),
+ LEFT_LEG ("LLEG"),
+ FULL_MODEL ("MODEL");
+
+ public final String partName;
+
+ EnumAnimationPart(String name){
+ this.partName = name;
+ }
+
+}
diff --git a/src/main/java/noppes/npcs/controllers/data/Animation.java b/src/main/java/noppes/npcs/controllers/data/Animation.java
new file mode 100644
index 000000000..2f2f3762e
--- /dev/null
+++ b/src/main/java/noppes/npcs/controllers/data/Animation.java
@@ -0,0 +1,48 @@
+package noppes.npcs.controllers.data;
+
+import java.util.ArrayList;
+
+
+public class Animation {
+
+ public ArrayList frames = new ArrayList();
+ public int id = 0;
+ public String name;
+ public float speed = 1.0F;
+ public boolean smooth = false;
+
+ public Animation(ArrayList parts, String name){
+ this.frames = parts;
+ this.name = name;
+ }
+
+ public Animation(ArrayList parts, String name, float speed, boolean smooth){
+ this.frames = parts;
+ this.name = name;
+ this.speed = speed;
+ this.smooth = smooth;
+ }
+
+ public ArrayList getFrames() {
+ return frames;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public float getSpeed() {
+ return speed;
+ }
+
+ public boolean isSmooth() {
+ return smooth;
+ }
+
+ // MAKE WRITE NBT
+ // MAKE READ NBT
+}
diff --git a/src/main/java/noppes/npcs/controllers/data/Frame.java b/src/main/java/noppes/npcs/controllers/data/Frame.java
new file mode 100644
index 000000000..f0fec745e
--- /dev/null
+++ b/src/main/java/noppes/npcs/controllers/data/Frame.java
@@ -0,0 +1,71 @@
+package noppes.npcs.controllers.data;
+
+import noppes.npcs.constants.EnumAnimationPart;
+
+import java.util.ArrayList;
+
+
+public class Frame {
+
+ public ArrayList frameParts = new ArrayList();
+ public int duration = 0;
+ boolean customized = false;
+ public float speed = 1.0F;
+ public boolean smooth = false;
+
+ public Frame(ArrayList parts, int duration){
+ this.frameParts = parts;
+ this.duration = duration;
+ }
+
+ public Frame(ArrayList parts, int duration, float speed, boolean smooth){
+ this.frameParts = parts;
+ this.duration = duration;
+ this.speed = speed;
+ this.smooth = smooth;
+ this.customized = true;
+ }
+
+ public ArrayList getFrameParts() {
+ return frameParts;
+ }
+
+ public void setFrameParts(ArrayList frameParts) {
+ this.frameParts = frameParts;
+ }
+
+ public int getDuration() {
+ return duration;
+ }
+
+ public void setDuration(int duration) {
+ this.duration = duration;
+ }
+
+ public boolean isCustomized() {
+ return customized;
+ }
+
+ public void setCustomized(boolean customized) {
+ this.customized = customized;
+ }
+
+ public float getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(float speed) {
+ this.speed = speed;
+ }
+
+ public boolean isSmooth() {
+ return smooth;
+ }
+
+ public void setSmooth(boolean smooth) {
+ this.smooth = smooth;
+ }
+
+ // MAKE WRITE NBT
+ // MAKE READ NBT
+}
diff --git a/src/main/java/noppes/npcs/controllers/data/FramePart.java b/src/main/java/noppes/npcs/controllers/data/FramePart.java
new file mode 100644
index 000000000..a4e5b939e
--- /dev/null
+++ b/src/main/java/noppes/npcs/controllers/data/FramePart.java
@@ -0,0 +1,92 @@
+package noppes.npcs.controllers.data;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.Vec3;
+import noppes.npcs.constants.EnumAnimationPart;
+
+import javax.vecmath.Vector3f;
+import java.util.Vector;
+
+
+public class FramePart {
+
+ public EnumAnimationPart part;
+ public int[] rotation = {0, 0, 0};
+ public int[] pivot = {0, 0, 0};
+
+ boolean customized = false;
+
+ public float speed = 1.0F;
+ public boolean smooth = false;
+
+ public FramePart(EnumAnimationPart part){
+ this.part = part;
+ }
+
+ public FramePart(EnumAnimationPart part, int[] rotation, int[] pivot){
+ this.part = part;
+ this.rotation = rotation;
+ this.pivot = pivot;
+ }
+
+ public FramePart(EnumAnimationPart part, int[] rotation, int[] pivot, float speed, boolean smooth){
+ this.part = part;
+ this.rotation = rotation;
+ this.pivot = pivot;
+ this.speed = speed;
+ this.smooth = smooth;
+ this.customized = true;
+ }
+
+ public EnumAnimationPart getPart() {
+ return part;
+ }
+
+ public void setPart(EnumAnimationPart part) {
+ this.part = part;
+ }
+
+ public int[] getRotation() {
+ return rotation;
+ }
+
+ public void setRotation(int[] rotation) {
+ this.rotation = rotation;
+ }
+
+ public int[] getPivot() {
+ return pivot;
+ }
+
+ public void setPivot(int[] pivot) {
+ this.pivot = pivot;
+ }
+
+ public boolean isCustomized() {
+ return customized;
+ }
+
+ public void setCustomized(boolean customized) {
+ this.customized = customized;
+ }
+
+ public float getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(float speed) {
+ this.speed = speed;
+ }
+
+ public boolean isSmooth() {
+ return smooth;
+ }
+
+ public void setSmooth(boolean smooth) {
+ this.smooth = smooth;
+ }
+
+ // MAKE WRITE NBT
+ // MAKE READ NBT
+}