From fd4a6d0a2ccb284821a9bc8e23101da2ff37302a Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sun, 24 Mar 2024 18:59:27 -0500 Subject: [PATCH] Revert "Animations now continue where they should be when players rejoin a world/server." This reverts commit a5ed14183e5bd6d19092a141f9e6bb4bbfc027e3. --- src/main/java/noppes/npcs/CommonProxy.java | 6 +- .../java/noppes/npcs/ServerEventsHandler.java | 24 ++---- .../npcs/client/ClientCacheHandler.java | 1 + .../noppes/npcs/client/ClientTickHandler.java | 2 +- .../npcs/client/PacketHandlerClient.java | 9 +-- .../npcs/controllers/data/Animation.java | 35 +++------ .../npcs/controllers/data/AnimationData.java | 74 +++---------------- 7 files changed, 34 insertions(+), 117 deletions(-) diff --git a/src/main/java/noppes/npcs/CommonProxy.java b/src/main/java/noppes/npcs/CommonProxy.java index ebcb3ed1a..68c9db672 100644 --- a/src/main/java/noppes/npcs/CommonProxy.java +++ b/src/main/java/noppes/npcs/CommonProxy.java @@ -95,10 +95,8 @@ public class CommonProxy implements IGuiHandler { @SideOnly(Side.CLIENT) private boolean clientRemoveAnimation(Entity entity) { - if (Minecraft.getMinecraft().currentScreen == null && !Minecraft.getMinecraft().theWorld.loadedEntityList.contains(entity)) { - return true; - } - return false; + return Minecraft.getMinecraft().currentScreen == null + && !Minecraft.getMinecraft().theWorld.loadedEntityList.contains(entity); } public PlayerData getPlayerData(EntityPlayer player) { diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index 7742199d8..ab7b67a5d 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -497,24 +497,12 @@ public class ServerEventsHandler { @SubscribeEvent public void playerTracking(PlayerEvent.StartTracking event){ - if (event.target.worldObj.isRemote) return; + if(!(event.target instanceof EntityNPCInterface) || event.target.worldObj.isRemote) + return; - if(event.target instanceof EntityPlayerMP || event.target instanceof EntityNPCInterface) { - AnimationData animationData = AnimationData.getData(event.target); - if (animationData.isClientAnimating()) { - AnimationData playerAnimData = AnimationData.getData(event.entityPlayer); - Animation currentAnimation = animationData.currentClientAnimation; - NBTTagCompound compound = currentAnimation.writeToNBT(); - playerAnimData.viewAnimation(currentAnimation, animationData, compound, - animationData.isClientAnimating(), currentAnimation.currentFrame, currentAnimation.currentFrameTime); - } - - if (event.target instanceof EntityNPCInterface) { - MarkData data = MarkData.get((EntityNPCInterface) event.target); - if (data.marks.isEmpty()) - return; - Server.sendData((EntityPlayerMP) event.entityPlayer, EnumPacketClient.MARK_DATA, event.target.getEntityId(), data.getNBT()); - } - } + MarkData data = MarkData.get((EntityNPCInterface) event.target); + if(data.marks.isEmpty()) + return; + Server.sendData((EntityPlayerMP)event.entityPlayer, EnumPacketClient.MARK_DATA, event.target.getEntityId(), data.getNBT()); } } diff --git a/src/main/java/noppes/npcs/client/ClientCacheHandler.java b/src/main/java/noppes/npcs/client/ClientCacheHandler.java index 810cc4bf0..bf9c920f4 100644 --- a/src/main/java/noppes/npcs/client/ClientCacheHandler.java +++ b/src/main/java/noppes/npcs/client/ClientCacheHandler.java @@ -57,6 +57,7 @@ public class ClientCacheHandler { ClientCacheHandler.skinOverlays.clear(); ClientCacheHandler.playerAnimations.clear(); ClientCacheHandler.playerData.animationData.clearCache(); + CommonProxy.clientPlayingAnimations.clear(); } public static void clearSkinCache() { diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index a2f82b27e..4be801a9b 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -32,7 +32,7 @@ public class ClientTickHandler{ @SubscribeEvent(priority = EventPriority.LOWEST) public void onClientTick(TickEvent.ClientTickEvent event){ Minecraft mc = Minecraft.getMinecraft(); - if (mc.theWorld != null && this.prevWorld != mc.theWorld) { + if ((this.prevWorld == null || mc.theWorld == null) && this.prevWorld != mc.theWorld) { ClientCacheHandler.clearCache(); this.prevWorld = mc.theWorld; } diff --git a/src/main/java/noppes/npcs/client/PacketHandlerClient.java b/src/main/java/noppes/npcs/client/PacketHandlerClient.java index d5137c903..b989406cb 100644 --- a/src/main/java/noppes/npcs/client/PacketHandlerClient.java +++ b/src/main/java/noppes/npcs/client/PacketHandlerClient.java @@ -375,13 +375,8 @@ public class PacketHandlerClient extends PacketHandlerServer{ } animationData.setAnimation(ClientCacheHandler.animationCache.get(animationId)); - animationData.viewReadFromNBT(compound); - - if (compound.hasKey("Frame")) { - animationData.animation.readFromNBT(compound.getCompoundTag("Animation")); - } else if (compound.hasKey("Animation")) { - Client.sendData(EnumPacketServer.CacheAnimation, animationId); - } + animationData.readFromNBT(compound); + Client.sendData(EnumPacketServer.CacheAnimation, animationId); } } else if(type == EnumPacketClient.DISABLE_MOUSE_INPUT) { diff --git a/src/main/java/noppes/npcs/controllers/data/Animation.java b/src/main/java/noppes/npcs/controllers/data/Animation.java index 24c6a28c6..0b9ae8fd7 100644 --- a/src/main/java/noppes/npcs/controllers/data/Animation.java +++ b/src/main/java/noppes/npcs/controllers/data/Animation.java @@ -210,9 +210,6 @@ public class Animation implements IAnimation { this.whileStanding = compound.getBoolean("WhileStanding"); this.whileMoving = compound.getBoolean("WhileWalking"); this.whileAttacking = compound.getBoolean("WhileAttacking"); - - this.currentFrame = compound.getInteger("CurrentFrame"); - this.currentFrameTime = compound.getInteger("CurrentFrameTime"); } public NBTTagCompound writeToNBT(){ @@ -234,9 +231,6 @@ public class Animation implements IAnimation { compound.setBoolean("WhileStanding", whileStanding); compound.setBoolean("WhileWalking", whileMoving); compound.setBoolean("WhileAttacking", whileAttacking); - - compound.setInteger("CurrentFrame", currentFrame); - compound.setInteger("CurrentFrameTime", currentFrameTime); return compound; } @@ -283,23 +277,16 @@ public class Animation implements IAnimation { @SideOnly(Side.CLIENT) public void jumpToCurrentFrame() { - this.jumpToFrameAtTime(this.currentFrame, 0); + this.currentFrameTime = 0; + Frame frame = (Frame) this.currentFrame(); + if(frame != null){ + for (EnumAnimationPart part : EnumAnimationPart.values()) { + if(part != null){ + if (frame.frameParts.containsKey(part)) { + frame.frameParts.get(part).jumpToCurrentFrame(); + } + } + } + } } - - @SideOnly(Side.CLIENT) - public void jumpToFrameAtTime(int frameIndex, int time) { - this.currentFrame = frameIndex; - this.currentFrameTime = time; - - Frame frame = (Frame) this.currentFrame(); - if(frame != null){ - for (EnumAnimationPart part : EnumAnimationPart.values()) { - if(part != null){ - if (frame.frameParts.containsKey(part)) { - frame.frameParts.get(part).jumpToCurrentFrame(); - } - } - } - } - } } diff --git a/src/main/java/noppes/npcs/controllers/data/AnimationData.java b/src/main/java/noppes/npcs/controllers/data/AnimationData.java index 097c944c6..d8d4a07f7 100644 --- a/src/main/java/noppes/npcs/controllers/data/AnimationData.java +++ b/src/main/java/noppes/npcs/controllers/data/AnimationData.java @@ -1,7 +1,7 @@ package noppes.npcs.controllers.data; -import net.minecraft.entity.Entity; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -10,7 +10,6 @@ import net.minecraft.util.AxisAlignedBB; import noppes.npcs.*; import noppes.npcs.api.entity.IAnimatable; import noppes.npcs.api.entity.ICustomNpc; -import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.handler.data.IAnimation; import noppes.npcs.api.handler.data.IAnimationData; @@ -33,7 +32,7 @@ public class AnimationData implements IAnimationData { public Animation animation; public boolean allowAnimation = false; - public Animation currentClientAnimation; + private Animation sentAnimation; private boolean isClientAnimating; private final HashSet cachedAnimationIDs = new HashSet<>(); @@ -52,16 +51,6 @@ public class AnimationData implements IAnimationData { } } - public static AnimationData getData(Entity entity) { - if (entity instanceof EntityPlayerMP) { - return PlayerData.get((EntityPlayer) entity).animationData; - } else if (entity instanceof EntityNPCInterface) { - return ((EntityNPCInterface)entity).display.animationData; - } else { - return null; - } - } - public IAnimatable getEntity() { if (this.parent instanceof DataDisplay) { EntityNPCInterface npc = ((DataDisplay)this.parent).npc; @@ -85,13 +74,13 @@ public class AnimationData implements IAnimationData { EntityLivingBase sendingEntity = parent instanceof PlayerData ? ((PlayerData) parent).player : parent instanceof DataDisplay ? ((DataDisplay) parent).npc : null; float range = parent instanceof PlayerData ? 160 : 60; if (sendingEntity != null) { - boolean prevIsClientAnimating = this.isClientAnimating && this.currentClientAnimation.currentFrame() != null; + boolean prevIsClientAnimating = this.isClientAnimating && this.sentAnimation.currentFrame() != null; this.isClientAnimating = this.allowAnimation && this.animation != null; - if (prevIsClientAnimating && (!this.isClientAnimating || this.animation != this.currentClientAnimation)) { - EventHooks.onAnimationEnded(this.currentClientAnimation); + if (prevIsClientAnimating && (!this.isClientAnimating || this.animation != this.sentAnimation)) { + EventHooks.onAnimationEnded(this.sentAnimation); } if (this.isClientAnimating) { - this.currentClientAnimation = this.animation; + this.sentAnimation = this.animation; } if (this.animation != null && this.allowAnimation) { @@ -116,15 +105,11 @@ public class AnimationData implements IAnimationData { if (animationNBT == null && this.animation != null && !animationData.isCached(this.animation.getID())) { animationNBT = this.animation.writeToNBT(); } - animationData.viewAnimation(this.animation, this, animationNBT); + animationData.viewAnimation(this.animation, sendingEntity, this, animationNBT); } } } - public boolean isClientAnimating() { - return this.isClientAnimating; - } - public boolean isActive() { if (!this.allowAnimation || this.animation == null || this.animation.currentFrame == this.animation.frames.size() || animation.currentFrame() == null) return false; @@ -167,63 +152,27 @@ public class AnimationData implements IAnimationData { this.cachedAnimationIDs.clear(); } - public void viewAnimation(Animation animation, AnimationData animationData, NBTTagCompound animationNBT) { - this.viewAnimation(animation, animationData, animationNBT, animationData.allowAnimation, -1, -1); - } - - public void viewAnimation(Animation animation, AnimationData animationData, NBTTagCompound animationNBT, boolean enabled, int currentFrame, int time) { - boolean prevEnabled = animationData.allowAnimation; - animationData.allowAnimation = enabled; - NBTTagCompound data = animationData.viewWriteNBT(new NBTTagCompound()); - animationData.allowAnimation = prevEnabled; - - - if (animation != null && currentFrame >= 0 && currentFrame < animation.frames.size()) { - data.setInteger("Frame", currentFrame); - data.setInteger("Time", time); - } - + public void viewAnimation(Animation animation, EntityLivingBase entity, AnimationData animationData, NBTTagCompound animationNBT) { + NBTTagCompound data = animationData.writeToNBT(new NBTTagCompound()); if (animation != null) { - if (this.cachedAnimationIDs.contains(animation.getID()) && !data.hasKey("Frame")) { + if (this.cachedAnimationIDs.contains(animation.getID())) { data.setInteger("AnimationID", animation.getID()); } else { data.setTag("Animation", animationNBT); } } - - IAnimatable animatable = animationData.getEntity(); - Entity entity = ((IEntity) animatable).getMCEntity(); if (!(entity instanceof EntityPlayer)) { data.setInteger("EntityId", entity.getEntityId()); } - Server.sendData((EntityPlayerMP) ((PlayerData) parent).player, EnumPacketClient.UPDATE_ANIMATIONS, data, entity.getCommandSenderName()); } - public NBTTagCompound viewWriteNBT(NBTTagCompound compound) { - compound.setBoolean("AllowAnimation", allowAnimation); - return compound; - } - - public void viewReadFromNBT(NBTTagCompound compound) { - this.setEnabled(compound.getBoolean("AllowAnimation")); - } - public NBTTagCompound writeToNBT(NBTTagCompound compound) { - if (this.currentClientAnimation != null) { - compound.setTag("CurrentAnimation", currentClientAnimation.writeToNBT()); - compound.setBoolean("IsClientAnimating", isClientAnimating); - } compound.setBoolean("AllowAnimation", allowAnimation); return compound; } public void readFromNBT(NBTTagCompound compound) { - if (compound.hasKey("CurrentAnimation")) { - this.currentClientAnimation = new Animation(); - this.currentClientAnimation.readFromNBT(compound.getCompoundTag("CurrentAnimation")); - this.isClientAnimating = compound.getBoolean("IsClientAnimating"); - } this.setEnabled(compound.getBoolean("AllowAnimation")); } @@ -245,12 +194,11 @@ public class AnimationData implements IAnimationData { if (animation != null) { newAnim = new Animation(); newAnim.readFromNBT(((Animation) animation).writeToNBT()); - newAnim.currentFrame = 0; - newAnim.currentFrameTime = 0; newAnim.parent = this; } if (CustomNpcs.proxy.hasClient() && newAnim != null) { + CommonProxy.clientPlayingAnimations.remove(this.animation); CommonProxy.clientPlayingAnimations.add(newAnim); } this.animation = newAnim;