diff --git a/src/main/java/noppes/npcs/constants/EnumAnimationPart.java b/src/main/java/noppes/npcs/constants/EnumAnimationPart.java index b17bd34cf..c9192ee7c 100644 --- a/src/main/java/noppes/npcs/constants/EnumAnimationPart.java +++ b/src/main/java/noppes/npcs/constants/EnumAnimationPart.java @@ -1,18 +1,11 @@ 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; - } - + HEAD, + BODY, + RIGHT_ARM, + LEFT_ARM, + RIGHT_LEG, + LEFT_LEG, + FULL_MODEL; } diff --git a/src/main/java/noppes/npcs/controllers/data/Animation.java b/src/main/java/noppes/npcs/controllers/data/Animation.java index 056f2be13..712131857 100644 --- a/src/main/java/noppes/npcs/controllers/data/Animation.java +++ b/src/main/java/noppes/npcs/controllers/data/Animation.java @@ -1,6 +1,11 @@ package noppes.npcs.controllers.data; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import noppes.npcs.ModelPartData; + import java.util.ArrayList; +import java.util.HashMap; public class Animation { @@ -45,6 +50,37 @@ public class Animation { return smooth; } - // MAKE WRITE NBT - // MAKE READ NBT + public void readFromNBT(NBTTagCompound compound){ + name = compound.getString("Name"); + id = compound.getInteger("ID"); + speed = compound.getFloat("Speed"); + smooth = compound.getBoolean("Smooth"); + + ArrayList frames = new ArrayList(); + NBTTagList list = compound.getTagList("Frames", 10); + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound item = list.getCompoundTagAt(i); + Frame frame = new Frame(); + frame.readFromNBT(item); + frames.add(frame); + } + this.frames = frames; + } + + public NBTTagCompound writeToNBT(){ + NBTTagCompound compound = new NBTTagCompound(); + compound.setString("Name", name); + compound.setInteger("ID", id); + compound.setFloat("Speed", speed); + compound.setBoolean("Smooth", smooth); + + NBTTagList list = new NBTTagList(); + for(Frame frame : frames){ + NBTTagCompound item = frame.writeToNBT(); + list.appendTag(item); + } + compound.setTag("Frames", list); + return compound; + } + } diff --git a/src/main/java/noppes/npcs/controllers/data/Frame.java b/src/main/java/noppes/npcs/controllers/data/Frame.java index 235c701c2..29d0be081 100644 --- a/src/main/java/noppes/npcs/controllers/data/Frame.java +++ b/src/main/java/noppes/npcs/controllers/data/Frame.java @@ -1,5 +1,7 @@ package noppes.npcs.controllers.data; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import noppes.npcs.constants.EnumAnimationPart; import java.util.ArrayList; @@ -68,6 +70,44 @@ public class Frame { this.smooth = smooth; } - // MAKE WRITE NBT - // MAKE READ NBT + public void readFromNBT(NBTTagCompound compound){ + duration = compound.getInteger("Duration"); + + // Customized = TRUE if Speed or Smooth Exist + if(compound.hasKey("Speed")){ + customized = true; + speed = compound.getFloat("Speed"); + } + if(compound.hasKey("Smooth")){ + customized = true; + smooth = compound.getBoolean("Smooth"); + } + + ArrayList frameParts = new ArrayList(); + NBTTagList list = compound.getTagList("FrameParts", 10); + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound item = list.getCompoundTagAt(i); + FramePart framePart = new FramePart(); + framePart.readFromNBT(item); + frameParts.add(framePart); + } + this.frameParts = frameParts; + } + + public NBTTagCompound writeToNBT(){ + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("Duration", duration); + if(customized){ + compound.setFloat("Speed", speed); + compound.setBoolean("Smooth", smooth); + } + + NBTTagList list = new NBTTagList(); + for(FramePart framePart : frameParts){ + NBTTagCompound item = framePart.writeToNBT(); + list.appendTag(item); + } + compound.setTag("FrameParts", list); + return compound; + } } diff --git a/src/main/java/noppes/npcs/controllers/data/FramePart.java b/src/main/java/noppes/npcs/controllers/data/FramePart.java index db776025d..41597d48f 100644 --- a/src/main/java/noppes/npcs/controllers/data/FramePart.java +++ b/src/main/java/noppes/npcs/controllers/data/FramePart.java @@ -2,10 +2,13 @@ package noppes.npcs.controllers.data; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.Vec3; import noppes.npcs.constants.EnumAnimationPart; import javax.vecmath.Vector3f; +import java.util.ArrayList; import java.util.Vector; @@ -19,7 +22,7 @@ public class FramePart { public float speed = 1.0F; public boolean smooth = false; - + public FramePart(){} public FramePart(EnumAnimationPart part){ @@ -89,6 +92,33 @@ public class FramePart { this.smooth = smooth; } - // MAKE WRITE NBT - // MAKE READ NBT + public void readFromNBT(NBTTagCompound compound){ + part = EnumAnimationPart.valueOf(compound.getString("Part")); + rotation = compound.getIntArray("Rotation"); + pivot = compound.getIntArray("Pivot"); + + // Customized = TRUE if Speed or Smooth Exist + if(compound.hasKey("Speed")){ + customized = true; + speed = compound.getFloat("Speed"); + } + if(compound.hasKey("Smooth")){ + customized = true; + smooth = compound.getBoolean("Smooth"); + } + } + + public NBTTagCompound writeToNBT(){ + NBTTagCompound compound = new NBTTagCompound(); + compound.setString("Part", part.toString()); + compound.setIntArray("Rotation", rotation); + compound.setIntArray("Pivot", pivot); + + if(customized){ + compound.setFloat("Speed", speed); + compound.setBoolean("Smooth", smooth); + } + + return compound; + } }