diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp5ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp5ItemModel.java index 39dc3b636..7315a0db6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp5ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp5ItemModel.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.smg.Mp5Item; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -15,9 +14,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 Mp5ItemModel extends GeoModel { +public class Mp5ItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -38,14 +36,14 @@ public class Mp5ItemModel extends GeoModel { } @Override - public void setCustomAnimations(Mp5Item animatable, long instanceId, AnimationState animationState) { - GeoBone gun = getAnimationProcessor().getBone("bone"); - GeoBone scope2 = getAnimationProcessor().getBone("Scope2"); - + public void setCustomAnimations(Mp5Item 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 scope2 = getAnimationProcessor().getBone("Scope2"); 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/VectorItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java index 658d0a0cf..3d9fe4b34 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.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.smg.VectorItem; 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 VectorItemModel extends GeoModel { +public class VectorItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -42,18 +40,18 @@ public class VectorItemModel extends GeoModel { } @Override - public void setCustomAnimations(VectorItem animatable, long instanceId, AnimationState animationState) { + public void setCustomAnimations(VectorItem 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 scope = getAnimationProcessor().getBone("Scope1"); GeoBone kmj = getAnimationProcessor().getBone("kuaimanji"); GeoBone sight1fold = getAnimationProcessor().getBone("SightFold1"); GeoBone sight2fold = getAnimationProcessor().getBone("SightFold2"); - Player player = Minecraft.getInstance().player; - if (player == null) return; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof GunItem)) return; - var data = GunData.from(stack); switch (data.fireMode.get()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mp5ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mp5ItemRenderer.java index 7d7eddfee..f9bf25aef 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mp5ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/Mp5ItemRenderer.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 Mp5ItemRenderer extends CustomGunRenderer { @@ -38,32 +40,36 @@ public class Mp5ItemRenderer 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("yugu")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) == 0); + } + if (name.equals("bashou")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) != 0); + } + if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 && (bone.getName().endsWith("_hide2"))) { + bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); + } + } - if (name.equals("yugu")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) == 0); + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.42, 14, 1, 255, 0, 0, 255, "dot", false); + case 2 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.52, 14, 1.4f, 255, 0, 0, 255, "acog", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.05, 1, 0.35); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); + if (name.equals("yugu")) { + bone.setHidden(true); + } } - if (name.equals("bashou")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.GRIP) != 0); - } - - if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 && (bone.getName().endsWith("_hide2"))) { - 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.42, 14, 1, 255, 0, 0, 255, "dot", false); - case 2 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.52, 14, 1.4f, 255, 0, 0, 255, "acog", true); - } - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.05, 1, 0.35); - - ItemModelHelper.handleGunAttachments(bone, itemStack, name); - if (renderingArms) { AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, false); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/VectorItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/VectorItemRenderer.java index 1e4190d99..19fd20f6e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/VectorItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/gun/VectorItemRenderer.java @@ -13,8 +13,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.resources.ResourceLocation; +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 VectorItemRenderer extends CustomGunRenderer { @@ -38,33 +39,33 @@ public class VectorItemRenderer 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("tuoxin")) { + bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.STOCK) == 0); + } + } - if (name.equals("tuoxin")) { - bone.setHidden(GunData.from(itemStack).attachment.get(AttachmentType.STOCK) == 0); + int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); + switch (scopeType) { + case 1 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.27, 18, 1, 255, 0, 0, 255, "dot", false); + case 2 -> + AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.27, 16, 1, 255, 0, 0, 255, "apex_2x", true); + } + + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.453125, 0.35); + ItemModelHelper.handleGunAttachments(bone, itemStack, name); + } else { + ItemModelHelper.hideAllAttachments(bone, name); + if (name.equals("tuoxin")) { + bone.setHidden(true); + } } - int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE); - switch (scopeType) { - case 1 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.27, 18, 1, 255, 0, 0, 255, "dot", false); - case 2 -> - AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.27, 16, 1, 255, 0, 0, 255, "apex_2x", true); - } - - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.453125, 0.35); - - 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); } - - @Override - public ResourceLocation getTextureLocation(VectorItem instance) { - return super.getTextureLocation(instance); - } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/Mp5Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/Mp5Item.java index d172e63b3..5aa82f67d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/Mp5Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/Mp5Item.java @@ -15,10 +15,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; @@ -41,6 +43,9 @@ public class Mp5Item 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.mp5.idle")); + boolean drum = GunData.from(stack).attachment.get(AttachmentType.MAGAZINE) == 2; if (GunData.from(stack).reload.empty()) { @@ -75,6 +80,8 @@ public class Mp5Item 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.mp5.idle")); if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mp5.edit")); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java index e4055207f..6bc1c6ddd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java @@ -14,10 +14,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; @@ -35,8 +37,10 @@ public class VectorItem 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.vector.idle")); + var data = GunData.from(stack); boolean drum = data.attachment.get(AttachmentType.MAGAZINE) == 2; if (data.reload.empty()) { @@ -71,6 +75,8 @@ public class VectorItem 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.vector.idle")); if (ClickHandler.isEditing) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vector.edit"));