diff --git a/src/main/java/noppes/npcs/client/ClientEventHandler.java b/src/main/java/noppes/npcs/client/ClientEventHandler.java index 26b48021b..1dc623a53 100644 --- a/src/main/java/noppes/npcs/client/ClientEventHandler.java +++ b/src/main/java/noppes/npcs/client/ClientEventHandler.java @@ -32,6 +32,7 @@ public class ClientEventHandler { public static final RenderCNPCPlayer renderCNPCPlayer = new RenderCNPCPlayer(); public static HashMap disabledButtonTimes = new HashMap<>(); public static float partialHandTicks; + public static boolean firstPersonAnimation; public static float partialRenderTick; public static RendererLivingEntity renderer; @@ -197,30 +198,6 @@ public class ClientEventHandler { } } - @SubscribeEvent - public void onRenderHand(RenderHandEvent event) { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (ConfigMixin.FirstPersonAnimationMixin && ClientCacheHandler.playerAnimations.containsKey(player.getUniqueID())) { - Render playerRenderer = RenderManager.instance.getEntityRenderObject(player); - if (playerRenderer instanceof RendererLivingEntity) { - ClientEventHandler.renderer = (RendererLivingEntity) playerRenderer; - } - ClientEventHandler.renderingPlayer = player; - ClientEventHandler.partialRenderTick = Minecraft.getMinecraft().timer.renderPartialTicks; - partialHandTicks = event.partialTicks; - - AnimationData animData = ClientCacheHandler.playerAnimations.get(player.getUniqueID()); - if (animData != null && animData.isActive()) { - Frame frame = (Frame) animData.animation.currentFrame(); - if (frame.frameParts.containsKey(EnumAnimationPart.FULL_MODEL)) { - FramePart part = frame.frameParts.get(EnumAnimationPart.FULL_MODEL); - part.interpolateOffset(); - part.interpolateAngles(); - } - } - } - } - public static boolean hasOverlays(EntityPlayer player) { return ClientCacheHandler.skinOverlays.containsKey(player.getUniqueID()) && ClientCacheHandler.skinOverlays.get(player.getUniqueID()).values().size() > 0; } diff --git a/src/main/java/noppes/npcs/mixin/MixinItemRenderer.java b/src/main/java/noppes/npcs/mixin/MixinItemRenderer.java index 0baad01af..ad83d7d29 100644 --- a/src/main/java/noppes/npcs/mixin/MixinItemRenderer.java +++ b/src/main/java/noppes/npcs/mixin/MixinItemRenderer.java @@ -53,13 +53,34 @@ public class MixinItemRenderer { EntityPlayer player = Minecraft.getMinecraft().thePlayer; Render renderer = RenderManager.instance.getEntityRenderObject(player); if (renderer instanceof RendererLivingEntity && ((RendererLivingEntity) renderer).mainModel instanceof ModelBiped) { + Render playerRenderer = RenderManager.instance.getEntityRenderObject(player); + if (playerRenderer instanceof RendererLivingEntity) { + ClientEventHandler.renderer = (RendererLivingEntity) playerRenderer; + } + ClientEventHandler.partialRenderTick = Minecraft.getMinecraft().timer.renderPartialTicks; + ClientEventHandler.partialHandTicks = p_78440_1_; + + ClientEventHandler.renderingPlayer = player; + ClientEventHandler.firstPersonAnimation = true; if (mixin_renderFirstPersonAnimation(p_78440_1_, player, (ModelBiped) ((RendererLivingEntity) renderer).mainModel)) { callbackInfo.cancel(); } + ClientEventHandler.firstPersonAnimation = false; + ClientEventHandler.renderingPlayer = null; } } private boolean mixin_renderFirstPersonAnimation(float partialRenderTick, EntityPlayer player, ModelBiped model) { + AnimationData animData = ClientCacheHandler.playerAnimations.get(player.getUniqueID()); + if (animData != null && animData.isActive()) { + Frame frame = (Frame) animData.animation.currentFrame(); + if (frame.frameParts.containsKey(EnumAnimationPart.FULL_MODEL)) { + FramePart part = frame.frameParts.get(EnumAnimationPart.FULL_MODEL); + part.interpolateOffset(); + part.interpolateAngles(); + } + } + ModelRenderer[] parts = new ModelRenderer[]{model.bipedRightArm, model.bipedLeftArm, model.bipedRightLeg, model.bipedLeftLeg}; EnumAnimationPart[] enumParts = new EnumAnimationPart[]{EnumAnimationPart.RIGHT_ARM, EnumAnimationPart.LEFT_ARM, EnumAnimationPart.RIGHT_LEG, EnumAnimationPart.LEFT_LEG}; Frame frame; diff --git a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java index 61752670d..462936445 100644 --- a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java +++ b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java @@ -82,7 +82,7 @@ public abstract class MixinModelRenderer { float prevAngleY = this.rotateAngleY; float prevAngleZ = this.rotateAngleZ; - this.setAnimationValues(); + this.setAnimationValues(p_78785_1_); GL11.glTranslatef(this.offsetX, this.offsetY, this.offsetZ); int i; @@ -165,7 +165,7 @@ public abstract class MixinModelRenderer { } } - private void setAnimationValues() { + private void setAnimationValues(float p_78785_1_) { float prevPointX = this.rotationPointX; float prevPointY = this.rotationPointY; float prevPointZ = this.rotationPointZ; @@ -194,23 +194,12 @@ public abstract class MixinModelRenderer { } } - if (ClientEventHandler.renderingPlayer != null) { - ClientEventHandler.playerModel = ((ModelRenderer) (Object) this).baseModel; - } if (ClientEventHandler.renderingPlayer != null && ClientCacheHandler.playerAnimations.containsKey(ClientEventHandler.renderingPlayer.getUniqueID())) { + ClientEventHandler.playerModel = ((ModelRenderer) (Object) this).baseModel; AnimationData animData = ClientCacheHandler.playerAnimations.get(ClientEventHandler.renderingPlayer.getUniqueID()); - EnumAnimationPart partType = null; - EnumAnimationPart mainPartType = null; - try{ - EnumAnimationPart pivotEqualPart = null; - mainPartType = this.getPlayerPartType((ModelRenderer) (Object) this); - if (mainPartType == null) { - pivotEqualPart = this.pivotEqualPart((ModelRenderer) (Object) this); - } - partType = mainPartType != null ? mainPartType : pivotEqualPart; - } - catch (Exception ignored){} + EnumAnimationPart mainPartType = this.getPlayerPartType((ModelRenderer) (Object) this); + EnumAnimationPart partType = mainPartType != null ? mainPartType : this.pivotEqualPart((ModelRenderer) (Object) this); if (partType != null && animData != null && animData.animation != null) { boolean animDataActive = animData.isActive(); @@ -221,6 +210,7 @@ public abstract class MixinModelRenderer { part.rotation = new float[]{prevAngleX, prevAngleY, prevAngleZ}; ClientEventHandler.originalValues.put((ModelRenderer) (Object) this, part); } + FramePart originalPart = ClientEventHandler.originalValues.get((ModelRenderer) (Object) this); Frame frame = (Frame) animData.animation.currentFrame(); if (!animDataActive && animData.finishedFrame >= 0 && animData.finishedFrame < animData.animation.frames.size()) { @@ -243,7 +233,8 @@ public abstract class MixinModelRenderer { part.prevRotations[2] = part.prevRotations[2] * (1.0F - speed) + (this.rotateAngleZ * speed); } - if (animDataActive || (partType != EnumAnimationPart.HEAD && ClientEventHandler.renderingPlayer.getAge() - animData.finishedTime < 20)) { + if (animDataActive || (partType != EnumAnimationPart.HEAD + && ClientEventHandler.renderingPlayer.getAge() - animData.finishedTime < 20)) { this.rotationPointX = originalPart.pivot[0] + part.prevPivots[0]; this.rotationPointY = originalPart.pivot[1] + part.prevPivots[1]; this.rotationPointZ = originalPart.pivot[2] + part.prevPivots[2];