From d510cdda46d36c41fb5a0c9da7c65dc5fee5f5a9 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Tue, 30 Jan 2024 19:17:55 -0600 Subject: [PATCH] Moved interpolation between animations to client-side code in animation data instead of only happening when packets are received. --- .../npcs/client/PacketHandlerClient.java | 21 +----------- .../npcs/controllers/data/AnimationData.java | 32 ++++++++++++++++++- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/noppes/npcs/client/PacketHandlerClient.java b/src/main/java/noppes/npcs/client/PacketHandlerClient.java index 8c06befaa..652204301 100644 --- a/src/main/java/noppes/npcs/client/PacketHandlerClient.java +++ b/src/main/java/noppes/npcs/client/PacketHandlerClient.java @@ -330,26 +330,7 @@ public class PacketHandlerClient extends PacketHandlerServer{ } if (animationData.allowAnimation) { - Animation animation = new Animation(); - animation.readFromNBT(ClientCacheHandler.animationCache.get(animationId).writeToNBT()); - if (animationData.animation != null && animation.frames.size() > 0) { - Frame frame = (Frame) animationData.animation.currentFrame(); - if (frame != null) { - Frame firstFrame = animation.frames.get(0); - for (Map.Entry entry : frame.frameParts.entrySet()) { - if (firstFrame.frameParts.containsKey(entry.getKey())) { - FramePart prevFramePart = entry.getValue(); - FramePart newFramePart = firstFrame.frameParts.get(entry.getKey()); - for (int i = 0; i < 3; i++) { - newFramePart.prevPivots[i] = prevFramePart.prevPivots[i]; - newFramePart.prevRotations[i] = prevFramePart.prevRotations[i]; - } - } - } - } - } - animationData.animation = animation; - animation.parent = animationData; + animationData.setAnimation(ClientCacheHandler.animationCache.get(animationId)); Client.sendData(EnumPacketServer.CacheAnimation, animationId); } } diff --git a/src/main/java/noppes/npcs/controllers/data/AnimationData.java b/src/main/java/noppes/npcs/controllers/data/AnimationData.java index 72d08ff16..ca5d554a5 100644 --- a/src/main/java/noppes/npcs/controllers/data/AnimationData.java +++ b/src/main/java/noppes/npcs/controllers/data/AnimationData.java @@ -1,6 +1,8 @@ package noppes.npcs.controllers.data; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -10,13 +12,18 @@ import noppes.npcs.DataDisplay; import noppes.npcs.Server; import noppes.npcs.api.handler.data.IAnimationData; import noppes.npcs.api.handler.data.IAnimation; +import noppes.npcs.client.Client; +import noppes.npcs.client.ClientCacheHandler; +import noppes.npcs.constants.EnumAnimationPart; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumPacketServer; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.entity.EntityNPCInterface; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Map; public class AnimationData implements IAnimationData { //Server-side: DataDisplay, PlayerData @@ -144,7 +151,30 @@ public class AnimationData implements IAnimationData { } public void setAnimation(IAnimation animation) { - this.animation = (Animation) animation; + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { + this.animation = (Animation) animation; + } else { + Animation newAnim = new Animation(); + newAnim.readFromNBT(((Animation) animation).writeToNBT()); + if (this.animation != null && newAnim.frames.size() > 0) { + Frame frame = (Frame) this.animation.currentFrame(); + if (frame != null) { + Frame firstFrame = newAnim.frames.get(0); + for (Map.Entry entry : frame.frameParts.entrySet()) { + if (firstFrame.frameParts.containsKey(entry.getKey())) { + FramePart prevFramePart = entry.getValue(); + FramePart newFramePart = firstFrame.frameParts.get(entry.getKey()); + for (int i = 0; i < 3; i++) { + newFramePart.prevPivots[i] = prevFramePart.prevPivots[i]; + newFramePart.prevRotations[i] = prevFramePart.prevRotations[i]; + } + } + } + } + } + this.animation = newAnim; + newAnim.parent = this; + } } public IAnimation getAnimation() {