From db9994f6ca484381529b1cdff5b2540c1d45cfff Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 31 May 2025 17:28:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=96=B7=E5=AD=90=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/Aa12ItemModel.java | 18 ++++++++---------- .../model/item/HomemadeShotgunItemModel.java | 15 +++++++-------- .../client/model/item/M870ItemModel.java | 14 ++++++-------- .../client/renderer/gun/Aa12ItemRenderer.java | 8 ++++---- .../gun/HomemadeShotgunItemRenderer.java | 10 +++++----- .../client/renderer/gun/M870ItemRenderer.java | 9 +++++---- .../item/gun/shotgun/Aa12Item.java | 4 ++++ .../item/gun/shotgun/HomemadeShotgunItem.java | 4 ++++ .../item/gun/shotgun/M870Item.java | 9 ++++++++- 9 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Aa12ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Aa12ItemModel.java index f22197925..3b4d21a47 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Aa12ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Aa12ItemModel.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.shotgun.Aa12Item; 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 Aa12ItemModel extends GeoModel { +public class Aa12ItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(Aa12Item animatable) { @@ -33,20 +31,20 @@ public class Aa12ItemModel extends GeoModel { } @Override - public void setCustomAnimations(Aa12Item animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone shen = getAnimationProcessor().getBone("shen"); - + public void setCustomAnimations(Aa12Item 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; - float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); + GeoBone gun = getAnimationProcessor().getBone("bone"); + GeoBone shen = getAnimationProcessor().getBone("shen"); + + float GeoBone = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); double zt = ClientEventHandler.zoomTime; double zp = ClientEventHandler.zoomPos; double zpz = ClientEventHandler.zoomPosZ; - double fpz = ClientEventHandler.firePosZ * 13 * times; + double fpz = ClientEventHandler.firePosZ * 13 * GeoBone; double fp = ClientEventHandler.firePos; double fr = ClientEventHandler.fireRot; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/HomemadeShotgunItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/HomemadeShotgunItemModel.java index b4e07da05..53a867166 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/HomemadeShotgunItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/HomemadeShotgunItemModel.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.shotgun.HomemadeShotgunItem; 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 HomemadeShotgunItemModel extends GeoModel { +// TODO 这个模型里面有俩莫名其妙的块 +public class HomemadeShotgunItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(HomemadeShotgunItem animatable) { @@ -33,14 +32,14 @@ public class HomemadeShotgunItemModel extends GeoModel { } @Override - public void setCustomAnimations(HomemadeShotgunItem animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone shen = getAnimationProcessor().getBone("shen"); - + public void setCustomAnimations(HomemadeShotgunItem 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("shen"); 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/M870ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M870ItemModel.java index 19ca5caf6..dc07ddab2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M870ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M870ItemModel.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.shotgun.M870Item; 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 M870ItemModel extends GeoModel { +public class M870ItemModel extends CustomGunModel { @Override public ResourceLocation getAnimationResource(M870Item animatable) { @@ -33,14 +31,14 @@ public class M870ItemModel extends GeoModel { } @Override - public void setCustomAnimations(M870Item animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone shen = getAnimationProcessor().getBone("shen"); - + public void setCustomAnimations(M870Item 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("shen"); 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/Aa12ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Aa12ItemRenderer.java index 4a49ddbf2..ab92b705b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Aa12ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Aa12ItemRenderer.java @@ -12,6 +12,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 Aa12ItemRenderer extends CustomGunRenderer { @@ -33,12 +34,11 @@ public class Aa12ItemRenderer extends CustomGunRenderer { } var player = mc.player; - if (player != null) { - ItemStack itemStack = player.getMainHandItem(); - if (!(itemStack.getItem() instanceof GunItem)) return; + if (player == null) return; + ItemStack itemStack = player.getMainHandItem(); + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.31465, 0.5); - ItemModelHelper.handleGunAttachments(bone, itemStack, name); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HomemadeShotgunItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HomemadeShotgunItemRenderer.java index cf9fd1777..629a37ac9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HomemadeShotgunItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/HomemadeShotgunItemRenderer.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 HomemadeShotgunItemRenderer extends CustomGunRenderer { @@ -32,15 +33,14 @@ public class HomemadeShotgunItemRenderer extends CustomGunRenderer { @@ -34,12 +35,12 @@ public class M870ItemRenderer 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.4209, 0.6); + if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) { + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.4209, 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/item/gun/shotgun/Aa12Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java index 3c09dc9f4..9a32fc383 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java @@ -12,8 +12,10 @@ 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 software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Set; @@ -35,6 +37,8 @@ public class Aa12Item 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.aa_12.idle")); if (GunData.from(stack).reload.empty()) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aa_12.reload_empty")); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java index 6396524f0..7089374b8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java @@ -17,10 +17,12 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; 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 org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; import java.util.Set; @@ -64,6 +66,8 @@ public class HomemadeShotgunItem 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.homemade_shotgun.idle")); if (GunData.from(stack).reload.empty()) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.homemade_shotgun.reload_empty")); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java index b5262badf..644c79950 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.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 M870Item 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.m_870.idle")); + var data = GunData.from(stack); if (data.bolt.actionTimer.get() > 0) { @@ -70,8 +75,10 @@ public class M870Item extends GunItem { 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_870.idle")); + var data = GunData.from(stack); if (player.isSprinting() && player.onGround() && ClientEventHandler.cantSprint == 0