From 6345a8cef02aeb8dd91b2413e807bb24bdd8a56a Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 1 Jun 2025 04:19:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=89=A9=E4=BD=99AR=E7=9A=84?= =?UTF-8?q?=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/item/Mk14ItemModel.java | 16 ++-- .../client/model/item/Qbz95ItemModel.java | 16 ++-- .../client/renderer/gun/Mk14ItemRenderer.java | 64 ++++++++------- .../renderer/gun/Qbz95ItemRenderer.java | 80 ++++++++++--------- .../item/gun/rifle/Mk14Item.java | 8 +- .../item/gun/rifle/Qbz95Item.java | 8 +- 6 files changed, 106 insertions(+), 86 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java index c80ae9fab..9d0e0fa98 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java @@ -6,7 +6,6 @@ import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; 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.rifle.Mk14Item; 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 Mk14ItemModel extends GeoModel { +public class Mk14ItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -41,17 +39,17 @@ public class Mk14ItemModel extends GeoModel { } @Override - public void setCustomAnimations(Mk14Item animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(Mk14Item 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("bones"); GeoBone action = getAnimationProcessor().getBone("action"); GeoBone scope2 = getAnimationProcessor().getBone("Scope2"); GeoBone scope3 = getAnimationProcessor().getBone("Scope3"); - 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/Qbz95ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Qbz95ItemModel.java index cda3bba59..06bb70d80 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Qbz95ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Qbz95ItemModel.java @@ -6,7 +6,6 @@ import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; 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.rifle.Qbz95Item; 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 Qbz95ItemModel extends GeoModel { +public class Qbz95ItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -48,7 +46,12 @@ public class Qbz95ItemModel extends GeoModel { } @Override - public void setCustomAnimations(Qbz95Item animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(Qbz95Item 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 bolt = getAnimationProcessor().getBone("bolt2"); GeoBone button = getAnimationProcessor().getBone("button"); @@ -57,11 +60,6 @@ public class Qbz95ItemModel extends GeoModel { GeoBone camera = getAnimationProcessor().getBone("camera"); GeoBone main = getAnimationProcessor().getBone("0"); - 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/renderer/gun/Mk14ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mk14ItemRenderer.java index 4cbb3d6c9..4b4b1e895 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mk14ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mk14ItemRenderer.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 Mk14ItemRenderer extends CustomGunRenderer { @@ -38,39 +40,43 @@ public class Mk14ItemRenderer 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("qiaojia")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0); + } + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 + && (name.equals("hidden"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3 + && (name.equals("jing") || name.equals("yugu") || name.equals("qiangguan") || name.equals("Barrel"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } + } - if (name.equals("qiaojia")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0); + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); + + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.25, 30, 0.8f, 255, 0, 0, 255, "eotech", false); + case 2 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.313, 9, 1, 255, 0, 0, 255, "acog", true); + case 3 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.29, 45, (float) ClientEventHandler.customZoom, 255, 0, 0, 255, "lpvo", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.475, 0.33); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); + if (name.equals("qiaojia")) { + bone.setHidden(true); + } } - if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 - && (name.equals("hidden"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3 - && (name.equals("jing") || name.equals("yugu") || name.equals("qiangguan") || name.equals("Barrel"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); - - switch (scopeType) { - case 1 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.25, 30, 0.8f, 255, 0, 0, 255, "eotech", false); - case 2 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.313, 9, 1, 255, 0, 0, 255, "acog", true); - case 3 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.29, 45, (float) ClientEventHandler.customZoom, 255, 0, 0, 255, "lpvo", true); - } - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.475, 0.33); - - ItemModelHelper.handleGunAttachments(bone, itemStack, name); - 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/Qbz95ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Qbz95ItemRenderer.java index 256965257..95495b463 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Qbz95ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Qbz95ItemRenderer.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 Qbz95ItemRenderer extends CustomGunRenderer { @@ -38,47 +40,51 @@ public class Qbz95ItemRenderer extends CustomGunRenderer { var player = mc.player; if (player == null) return; ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; - if (name.equals("tiba")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) != 0); + // TODO 这里手上模型的渲染逻辑有问题 + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + if (this.renderPerspective == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) { + if (name.equals("tiba")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) != 0); + } + if (name.equals("longbow")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0); + } + if (name.equals("under_rail")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) == 0); + } + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 + && (name.equals("hidden"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3 + && (name.equals("hidden2") || name.equals("jimiao2"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } + } + + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); + + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.5363125, 16, 1, 255, 0, 0, 255, "dot", false); + case 2 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.55, 24, 1, 255, 0, 0, 255, "dot", false); + case 3 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.55, 36, 4, 255, 0, 0, 255, "sniper", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.02, 1.12375, 0.3); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); + if (name.equals("under_rail") || name.equals("longbow")) { + bone.setHidden(true); + } } - if (name.equals("longbow")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 0); - } - - if (name.equals("under_rail")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) == 0); - } - - if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 - && (name.equals("hidden"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 3 - && (name.equals("hidden2") || name.equals("jimiao2"))) { - bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); - } - - int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); - - switch (scopeType) { - case 1 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.5363125, 16, 1, 255, 0, 0, 255, "dot", false); - case 2 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.55, 24, 1, 255, 0, 0, 255, "dot", false); - case 3 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.55, 36, 4, 255, 0, 0, 255, "sniper", true); - } - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.02, 1.12375, 0.3); - - ItemModelHelper.handleGunAttachments(bone, itemStack, name); - 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/item/gun/rifle/Mk14Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java index a8b6fd49f..a40f21f98 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.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,8 +43,10 @@ public class Mk14Item 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.mk_14.idle")); + var data = GunData.from(stack); boolean drum = data.attachment.get(AttachmentType.MAGAZINE) == 2; boolean grip = data.attachment.get(AttachmentType.GRIP) == 1 || data.attachment.get(AttachmentType.GRIP) == 2; @@ -102,6 +106,8 @@ public class Mk14Item 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.mk_14.idle")); if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk_14.edit")); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java index c7a87f7cc..47d28d6b7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.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; @@ -44,8 +46,10 @@ public class Qbz95Item 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.qbz_95.idle")); + var data = GunData.from(stack); boolean drum = data.attachment.get(AttachmentType.MAGAZINE) == 2; boolean grip = data.attachment.get(AttachmentType.GRIP) == 1 || data.attachment.get(AttachmentType.GRIP) == 2; @@ -105,6 +109,8 @@ public class Qbz95Item 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.qbz_95.idle")); if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz_95.edit"));