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": {