From 9a66a45981d69b8033aa2ce7b7013f485bba8b59 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 12 Jul 2025 20:33:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8C=87=E7=A4=BA=E5=99=A8?= =?UTF-8?q?=E7=9A=84=E6=B8=B2=E6=9F=93=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mixins/PlayerItemInHandLayerMixin.java | 42 +++++++++++++++++++ .../models/item/artillery_indicator.json | 2 +- src/main/resources/mixins.superbwarfare.json | 3 +- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/mixins/PlayerItemInHandLayerMixin.java diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerItemInHandLayerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerItemInHandLayerMixin.java new file mode 100644 index 000000000..537c6736d --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerItemInHandLayerMixin.java @@ -0,0 +1,42 @@ +package com.atsuishio.superbwarfare.mixins; + +import com.atsuishio.superbwarfare.init.ModItems; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.ArmedModel; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.HeadedModel; +import net.minecraft.client.renderer.ItemInHandRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.ItemInHandLayer; +import net.minecraft.client.renderer.entity.layers.PlayerItemInHandLayer; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(PlayerItemInHandLayer.class) +public abstract class PlayerItemInHandLayerMixin & ArmedModel & HeadedModel> extends ItemInHandLayer { + + @Shadow + protected abstract void renderArmWithSpyglass(LivingEntity pEntity, ItemStack pStack, HumanoidArm pArm, PoseStack pPoseStack, MultiBufferSource pBuffer, int pCombinedLight); + + public PlayerItemInHandLayerMixin(RenderLayerParent pRenderer, ItemInHandRenderer pItemInHandRenderer) { + super(pRenderer, pItemInHandRenderer); + } + + @Inject(method = "renderArmWithItem", at = @At("HEAD"), cancellable = true) + public void renderArmWithItem(LivingEntity pLivingEntity, ItemStack pItemStack, ItemDisplayContext pDisplayContext, + HumanoidArm pArm, PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight, CallbackInfo ci) { + if (pItemStack.is(ModItems.ARTILLERY_INDICATOR.get()) && pLivingEntity.getUseItem() == pItemStack && pLivingEntity.swingTime == 0) { + ci.cancel(); + this.renderArmWithSpyglass(pLivingEntity, pItemStack, pArm, pPoseStack, pBuffer, pPackedLight); + } + } +} diff --git a/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json b/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json index 0b266ce8d..4179d31c4 100644 --- a/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json +++ b/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json @@ -284,7 +284,7 @@ }, "head": { "rotation": [90, 0, 0], - "translation": [0, -0.25, -13.25], + "translation": [-2, -0.25, -13.25], "scale": [1.6, 1.6, 1.6] }, "fixed": { diff --git a/src/main/resources/mixins.superbwarfare.json b/src/main/resources/mixins.superbwarfare.json index 7028ce509..712453d31 100644 --- a/src/main/resources/mixins.superbwarfare.json +++ b/src/main/resources/mixins.superbwarfare.json @@ -26,7 +26,8 @@ "KeymappingMixin", "LivingEntityRendererMixin", "MinecraftMixin", - "MouseHandlerMixin" + "MouseHandlerMixin", + "PlayerItemInHandLayerMixin" ], "minVersion": "0.8", "injectors": {