From 1eaee64c5fa6d7d3def17caaff0f8d927ab1dd8f Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 1 Jun 2025 03:26:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8B=99=E7=9A=84=E6=B8=B2?= =?UTF-8?q?=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/item/HuntingRifleItemModel.java | 14 ++--- .../client/model/item/K98ItemModel.java | 20 +++---- .../client/model/item/M98bItemModel.java | 16 +++-- .../model/item/MosinNagantItemModel.java | 17 +++--- .../client/model/item/SentinelItemModel.java | 17 +++--- .../client/model/item/SvdItemModel.java | 16 +++-- .../gun/HuntingRifleItemRenderer.java | 9 +-- .../client/renderer/gun/K98ItemRenderer.java | 9 +-- .../client/renderer/gun/M98bItemRenderer.java | 60 ++++++++++--------- .../renderer/gun/MosinNagantItemRenderer.java | 23 ++++--- .../renderer/gun/SentinelItemRenderer.java | 24 ++++---- .../client/renderer/gun/SvdItemRenderer.java | 59 ++++++++++-------- .../item/gun/sniper/HuntingRifleItem.java | 4 ++ .../item/gun/sniper/K98Item.java | 8 +++ .../item/gun/sniper/M98bItem.java | 13 +++- .../item/gun/sniper/MosinNagantItem.java | 8 +++ .../item/gun/sniper/SentinelItem.java | 10 +++- .../item/gun/sniper/SvdItem.java | 6 ++ 18 files changed, 191 insertions(+), 142 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/HuntingRifleItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/HuntingRifleItemModel.java index c1c98923d..15059481f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/HuntingRifleItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/HuntingRifleItemModel.java @@ -4,7 +4,6 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.AnimationHelper; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.HuntingRifleItem; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -13,9 +12,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; -public class HuntingRifleItemModel extends GeoModel { +public class HuntingRifleItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(HuntingRifleItem animatable) { @@ -33,14 +31,14 @@ public class HuntingRifleItemModel extends GeoModel { } @Override - public void setCustomAnimations(HuntingRifleItem animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone shen = getAnimationProcessor().getBone("lieqiang"); - + public void setCustomAnimations(HuntingRifleItem animatable, long instanceId, AnimationState animationState) { Player player = Minecraft.getInstance().player; if (player == null) return; ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; + if (shouldCancelRender(stack, animationState)) return; + + GeoBone gun = getAnimationProcessor().getBone("bone"); + GeoBone shen = getAnimationProcessor().getBone("lieqiang"); float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); double zt = ClientEventHandler.zoomTime; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java index 939b2b37e..f5653d365 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java @@ -4,7 +4,6 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.K98Item; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -13,9 +12,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; -public class K98ItemModel extends GeoModel { +public class K98ItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(K98Item animatable) { @@ -33,18 +31,17 @@ public class K98ItemModel extends GeoModel { } @Override - public void setCustomAnimations(K98Item animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(K98Item animatable, long instanceId, AnimationState animationState) { + Player player = Minecraft.getInstance().player; + if (player == null) return; + ItemStack stack = player.getMainHandItem(); + if (shouldCancelRender(stack, animationState)) return; + GeoBone gun = getAnimationProcessor().getBone("bone"); GeoBone shen = getAnimationProcessor().getBone("shen"); GeoBone clip = getAnimationProcessor().getBone("mag"); - Player player = Minecraft.getInstance().player; - if (player == null) return; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; - - var data = GunData.from(stack); - if (data.reload.prepareTimer.get() > 11 && data.ammo.get() == 1) { + if (GunData.from(stack).reload.prepareTimer.get() > 11 && GunData.from(stack).ammo.get() == 1) { clip.setScaleX(0); clip.setScaleY(0); clip.setScaleZ(0); @@ -93,6 +90,7 @@ public class K98ItemModel extends GeoModel { float numR = (float) (1 - 0.52 * zt); float numP = (float) (1 - 0.58 * zt); + var data = GunData.from(stack); if (data.reload.time() > 0 || data.reloading()) { main.setRotX(numR * main.getRotX()); main.setRotY(numR * main.getRotY()); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java index 1d711590e..1ca960a13 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java @@ -4,7 +4,6 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.data.gun.value.AttachmentType; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.M98bItem; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -13,11 +12,10 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; import static com.atsuishio.superbwarfare.event.ClientEventHandler.isProne; -public class M98bItemModel extends GeoModel { +public class M98bItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -44,7 +42,12 @@ public class M98bItemModel extends GeoModel { } @Override - public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) { + Player player = Minecraft.getInstance().player; + if (player == null) return; + ItemStack stack = player.getMainHandItem(); + if (shouldCancelRender(stack, animationState)) return; + GeoBone gun = getAnimationProcessor().getBone("bone"); GeoBone camera = getAnimationProcessor().getBone("camera"); GeoBone main = getAnimationProcessor().getBone("0"); @@ -55,11 +58,6 @@ public class M98bItemModel extends GeoModel { GeoBone button6 = getAnimationProcessor().getBone("button6"); GeoBone button7 = getAnimationProcessor().getBone("button7"); - Player player = Minecraft.getInstance().player; - if (player == null) return; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; - var data = GunData.from(stack); int type = data.attachment.get(AttachmentType.SCOPE); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java index e1bb39da5..b98a6c5fb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java @@ -4,7 +4,6 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.MosinNagantItem; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -13,9 +12,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; -public class MosinNagantItemModel extends GeoModel { +public class MosinNagantItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(MosinNagantItem animatable) { @@ -33,7 +31,12 @@ public class MosinNagantItemModel extends GeoModel { } @Override - public void setCustomAnimations(MosinNagantItem animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(MosinNagantItem animatable, long instanceId, AnimationState animationState) { + Player player = Minecraft.getInstance().player; + if (player == null) return; + ItemStack stack = player.getMainHandItem(); + if (shouldCancelRender(stack, animationState)) return; + GeoBone gun = getAnimationProcessor().getBone("bone"); GeoBone shen = getAnimationProcessor().getBone("shen"); GeoBone pu = getAnimationProcessor().getBone("pu"); @@ -41,12 +44,6 @@ public class MosinNagantItemModel extends GeoModel { GeoBone bone16 = getAnimationProcessor().getBone("bone16"); GeoBone qiangshen = getAnimationProcessor().getBone("qiangshen"); - Player player = Minecraft.getInstance().player; - if (player == null) return; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; - - float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); double zt = ClientEventHandler.zoomTime; double zp = ClientEventHandler.zoomPos; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java index f85b80ba9..fcae16213 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java @@ -4,7 +4,6 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.SentinelItem; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -13,9 +12,9 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; -public class SentinelItemModel extends GeoModel { +// TODO 这个模型后面还有电线,记得渲染时候清除掉 +public class SentinelItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(SentinelItem animatable) { @@ -33,18 +32,18 @@ public class SentinelItemModel extends GeoModel { } @Override - public void setCustomAnimations(SentinelItem animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(SentinelItem animatable, long instanceId, AnimationState animationState) { + Player player = Minecraft.getInstance().player; + if (player == null) return; + ItemStack stack = player.getMainHandItem(); + if (shouldCancelRender(stack, animationState)) return; + GeoBone gun = getAnimationProcessor().getBone("bone"); GeoBone shen = getAnimationProcessor().getBone("shen"); GeoBone scope = getAnimationProcessor().getBone("scope2"); GeoBone ammo = getAnimationProcessor().getBone("ammobar"); GeoBone cb = getAnimationProcessor().getBone("chamber2"); - Player player = Minecraft.getInstance().player; - if (player == null) return; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; - float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); double zt = ClientEventHandler.zoomTime; double zp = ClientEventHandler.zoomPos; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java index f2e62db6b..719364d3e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java @@ -3,10 +3,9 @@ package com.atsuishio.superbwarfare.client.model.item; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.AnimationHelper; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; -import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.data.gun.value.AttachmentType; +import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -15,11 +14,10 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.model.GeoModel; import static com.atsuishio.superbwarfare.event.ClientEventHandler.isProne; -public class SvdItemModel extends GeoModel { +public class SvdItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -41,14 +39,14 @@ public class SvdItemModel extends GeoModel { } @Override - public void setCustomAnimations(SvdItem animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone bolt = getAnimationProcessor().getBone("bolt"); - + public void setCustomAnimations(SvdItem animatable, long instanceId, AnimationState animationState) { Player player = Minecraft.getInstance().player; if (player == null) return; ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; + if (shouldCancelRender(stack, animationState)) return; + + GeoBone gun = getAnimationProcessor().getBone("bone"); + GeoBone bolt = getAnimationProcessor().getBone("bolt"); float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); double zt = ClientEventHandler.zoomTime; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HuntingRifleItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HuntingRifleItemRenderer.java index ebbb98034..a5d80c92a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HuntingRifleItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HuntingRifleItemRenderer.java @@ -11,6 +11,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.cache.object.GeoBone; public class HuntingRifleItemRenderer extends CustomGunRenderer { @@ -34,12 +35,12 @@ public class HuntingRifleItemRenderer extends CustomGunRenderer { @@ -34,12 +35,12 @@ public class K98ItemRenderer extends CustomGunRenderer { var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.9772, 0.4); + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.9772, 0.4); + } if (renderingArms) { - AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, true); + AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, true); } super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/M98bItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/M98bItemRenderer.java index 5e5b8efca..18da86edc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/M98bItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/M98bItemRenderer.java @@ -9,12 +9,15 @@ import com.atsuishio.superbwarfare.data.gun.value.AttachmentType; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.sniper.M98bItem; +import com.atsuishio.superbwarfare.tools.NBTTool; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.cache.object.GeoBone; public class M98bItemRenderer extends CustomGunRenderer { @@ -38,42 +41,41 @@ public class M98bItemRenderer extends CustomGunRenderer { var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); - var data = GunData.from(itemStack); - int scopeType = data.attachment.get(AttachmentType.SCOPE); + if (this.renderPerspective == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) { + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 && !NBTTool.getTag(itemStack).getBoolean("ScopeAlt") && (bone.getName().endsWith("_hide"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } - if (data.attachment.get(AttachmentType.SCOPE) == 2 && !data.tag.getBoolean("ScopeAlt") && (bone.getName().endsWith("_hide"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - if (data.attachment.get(AttachmentType.SCOPE) == 3 && (bone.getName().endsWith("_hide3"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - switch (scopeType) { - case 1 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.275, 30, 1.2f, 255, 0, 0, 255, "dot", false); - case 2 -> { - if (data.tag.getBoolean("ScopeAlt")) { - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.34, 30, 0.18f, 255, 0, 0, 255, "delta", false); - } else { - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.294, 13, 0.75f, 255, 0, 0, 255, "hamr", true); + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3 && (bone.getName().endsWith("_hide3"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); } } - case 3 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.29, 27, 5f, 255, 0, 0, 255, "sniper", true); + + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.275, 30, 1.2f, 255, 0, 0, 255, "dot", false); + case 2 -> { + if (NBTTool.getTag(itemStack).getBoolean("ScopeAlt")) { + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.34, 30, 0.18f, 255, 0, 0, 255, "delta", false); + } else { + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.294, 13, 0.75f, 255, 0, 0, 255, "hamr", true); + } + } + case 3 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.29, 27, 5f, 255, 0, 0, 255, "sniper", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 2.15625, 0.6); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); } - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 2.15625, 0.6); - ItemModelHelper.handleGunAttachments(bone, itemStack, name); - -// if (name.equals("ironSight")) { -// bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) != 0); -// } - if (renderingArms) { - AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, true); + AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, false); } super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/MosinNagantItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/MosinNagantItemRenderer.java index ae99bcbee..d0d67ab34 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/MosinNagantItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/MosinNagantItemRenderer.java @@ -11,7 +11,9 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.cache.object.GeoBone; public class MosinNagantItemRenderer extends CustomGunRenderer { @@ -35,18 +37,23 @@ public class MosinNagantItemRenderer extends CustomGunRenderer var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; - if (name.equals("jia") || name.equals("b1") || name.equals("b2")) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7); + boolean flag = name.equals("jia") || name.equals("b1") || name.equals("b2"); + + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + if (this.renderPerspective == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) { + if (flag) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7); + } + } + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.259025, -0.05, 0.08f, 0, 0, 0, 255, "pu", true); + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 2.38345, 0.6); + } else if (flag) { + bone.setHidden(false); } - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.259025, -0.05, 0.08f, 0, 0, 0, 255, "pu", true); - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 2.38345, 0.6); - if (renderingArms) { - AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, true); + AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, true); } super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SentinelItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SentinelItemRenderer.java index fdd31da27..8b11f5181 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SentinelItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SentinelItemRenderer.java @@ -12,6 +12,7 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.capabilities.Capabilities; +import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.cache.object.GeoBone; public class SentinelItemRenderer extends CustomGunRenderer { @@ -35,22 +36,23 @@ public class SentinelItemRenderer extends CustomGunRenderer { var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + var cap = itemStack.getCapability(Capabilities.EnergyStorage.ITEM); + var flag = cap != null && cap.getEnergyStored() > 0; - var cap = itemStack.getCapability(Capabilities.EnergyStorage.ITEM); - var flag = cap != null && cap.getEnergyStored() > 0; + if (name.equals("charge_illuminated")) { + bone.setHidden(!flag); + bone.setRotZ((System.currentTimeMillis() % 36000000) / 200f); + } - if (name.equals("charge_illuminated")) { - bone.setHidden(!flag); - bone.setRotZ((System.currentTimeMillis() % 36000000) / 200f); + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.265, -0.05, 0.075f, 255, 0, 0, 255, "apex_3x", false); + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.53125, 0.6); + } else if (name.equals("charge_illuminated")) { + bone.setHidden(true); } - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.265, -0.05, 0.075f, 255, 0, 0, 255, "apex_3x", false); - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.53125, 0.6); - if (renderingArms) { - AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, true); + AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, true); } super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SvdItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SvdItemRenderer.java index d6e4fb880..8641aa208 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SvdItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/SvdItemRenderer.java @@ -14,7 +14,9 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.cache.object.GeoBone; public class SvdItemRenderer extends CustomGunRenderer { @@ -38,36 +40,41 @@ public class SvdItemRenderer extends CustomGunRenderer { var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + if (this.renderPerspective == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) { + if (name.equals("mount")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0 || GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2); + } - if (name.equals("mount")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0 || GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2); + if ((GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 || GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3) + && (name.equals("Hidden2") || name.equals("Hidden") || name.equals("gun") || name.equals("bolt") || name.equals("Lefthand") || name.equals("Barrel") || name.equals("bipod") || name.equals("mount")) && ClientEventHandler.zoom && ClientEventHandler.zoomPos > 0.7) { + bone.setHidden(true); + renderingArms = false; + } + } + + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); + + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.24, 20, 1, 255, 0, 0, 255, "dot", false); + case 2 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, -0.01, 0.24, 18, 1, 255, 0, 0, 255, "pso_1", true); + case 3 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.2525, -0.1, 0.1f, 255, 0, 0, 255, "sniper", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.76479375, 0.35); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); + if (name.equals("mount")) { + bone.setHidden(true); + } } - if ((GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 || GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3) - && (name.equals("Hidden2") || name.equals("Hidden") || name.equals("gun") || name.equals("bolt") || name.equals("Lefthand") || name.equals("Barrel") || name.equals("bipod") || name.equals("mount")) && ClientEventHandler.zoom && ClientEventHandler.zoomPos > 0.7) { - bone.setHidden(true); - renderingArms = false; - } - - int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); - - switch (scopeType) { - case 1 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.24, 20, 1, 255, 0, 0, 255, "dot", false); - case 2 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, -0.01, 0.24, 18, 1, 255, 0, 0, 255, "pso_1", true); - case 3 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.2525, -0.1, 0.1f, 255, 0, 0, 255, "sniper", true); - } - - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.76479375, 0.35); - - ItemModelHelper.handleGunAttachments(bone, itemStack, name); - if (renderingArms) { - AnimationHelper.renderArms(player, this.transformType, stack, name, bone, this.currentBuffer, type, packedLightIn, false); + AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, false); } super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java index 7768b2c1c..908493795 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java @@ -11,9 +11,11 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Set; @@ -40,6 +42,8 @@ public class HuntingRifleItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.hunting_rifle.idle")); if (GunData.from(stack).reload.empty()) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.hunting_rifle.reload")); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java index 4ce1589bb..2016fadab 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java @@ -11,9 +11,11 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Set; @@ -36,6 +38,9 @@ public class K98Item extends GunItem { ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k_98.idle")); + var data = GunData.from(stack); if (data.bolt.actionTimer.get() > 0) { @@ -71,6 +76,9 @@ public class K98Item extends GunItem { ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k_98.idle")); + var data = GunData.from(stack); if (player.isSprinting() && player.onGround() diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java index 4be739867..693943619 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java @@ -16,10 +16,12 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import net.minecraft.world.level.Level; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import javax.annotation.ParametersAreNonnullByDefault; @@ -42,8 +44,10 @@ public class M98bItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; - var data = GunData.from(stack); + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_98b.idle")); + var data = GunData.from(stack); if (data.bolt.actionTimer.get() > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m_98b.shift")); } @@ -64,8 +68,10 @@ public class M98bItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; - var data = GunData.from(stack); + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_98b.idle")); + var data = GunData.from(stack); if (player.isSprinting() && player.onGround() && ClientEventHandler.cantSprint == 0 && !(data.reload.normal() || GunData.from(stack).reload.empty()) && ClientEventHandler.drawTime < 0.01) { @@ -80,6 +86,9 @@ public class M98bItem extends GunItem { } private PlayState editPredicate(AnimationState event) { + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_98b.idle")); + if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m_98b.edit")); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java index d9c7dd115..b40da0879 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java @@ -11,9 +11,11 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Set; @@ -35,6 +37,9 @@ public class MosinNagantItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin_nagant.idle")); + var data = GunData.from(stack); if (data.bolt.actionTimer.get() > 0) { @@ -69,6 +74,9 @@ public class MosinNagantItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin_nagant.idle")); + var data = GunData.from(stack); if (player.isSprinting() && player.onGround() diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java index 02757cc1b..041464fc4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java @@ -17,11 +17,13 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.neoforged.neoforge.capabilities.Capabilities; import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Optional; @@ -62,8 +64,10 @@ public class SentinelItem extends GunItem implements EnergyStorageItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; - var data = GunData.from(stack); + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); + var data = GunData.from(stack); if (data.bolt.actionTimer.get() > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift")); } @@ -88,8 +92,10 @@ public class SentinelItem extends GunItem implements EnergyStorageItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; - var data = GunData.from(stack); + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.idle")); + var data = GunData.from(stack); if (player.isSprinting() && player.onGround() && ClientEventHandler.cantSprint == 0 && !data.reloading() diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java index 64c79eeec..72be316cd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java @@ -15,9 +15,11 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Map; @@ -41,6 +43,8 @@ public class SvdItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle")); if (GunData.from(stack).reload.empty()) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.reload_empty")); @@ -66,6 +70,8 @@ public class SvdItem extends GunItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; + if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle")); if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.edit"));