diff --git a/modules/base/src/main/java/io/github/fabricators_of_create/porting_lib/mixin/client/HumanoidArmorLayerMixin.java b/modules/base/src/main/java/io/github/fabricators_of_create/porting_lib/mixin/client/HumanoidArmorLayerMixin.java index 19d81d6f..a2c554ea 100644 --- a/modules/base/src/main/java/io/github/fabricators_of_create/porting_lib/mixin/client/HumanoidArmorLayerMixin.java +++ b/modules/base/src/main/java/io/github/fabricators_of_create/porting_lib/mixin/client/HumanoidArmorLayerMixin.java @@ -1,11 +1,18 @@ package io.github.fabricators_of_create.porting_lib.mixin.client; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; + +import com.llamalad7.mixinextras.sugar.Local; + import io.github.fabricators_of_create.porting_lib.client.armor.ArmorRenderer; import io.github.fabricators_of_create.porting_lib.client.armor.ArmorRendererRegistry; import io.github.fabricators_of_create.porting_lib.item.ArmorTextureItem; import io.github.fabricators_of_create.porting_lib.util.ArmorTextureRegistry; import io.github.fabricators_of_create.porting_lib.util.client.ClientHooks; + +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -47,16 +54,16 @@ public HumanoidArmorLayerMixin(RenderLayerParent> void port_lib$fixArmorTextures(PoseStack matrices, MultiBufferSource vertexConsumers, T entity, EquipmentSlot armorSlot, int light, A model, CallbackInfo ci) { - ItemStack itemStack = entity.getItemBySlot(armorSlot); + @WrapOperation(method = "renderArmorPiece", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/layers/HumanoidArmorLayer;renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;Lnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V")) + public, A extends HumanoidModel> void renderModel(HumanoidArmorLayer instance, PoseStack matrices, MultiBufferSource vertexConsumers, int light, ArmorItem armorItem, HumanoidModel model, boolean withGlint, float red, float green, float blue, @Nullable String armorSuffix, Operation original, @Local(argsOnly = true) T entity, @Local(argsOnly = true) EquipmentSlot armorSlot, @Local ItemStack itemStack) { if(itemStack.getItem() instanceof ArmorTextureItem) { ResourceLocation resourceLocation = ClientHooks.getArmorResource(entity, itemStack, armorSlot, null); VertexConsumer vertexConsumer = ItemRenderer.getArmorFoilBuffer( vertexConsumers, RenderType.armorCutoutNoCull(resourceLocation), false, itemStack.hasFoil() ); model.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); - ci.cancel(); + } else { + original.call(instance, matrices, vertexConsumers, light, armorItem, model, withGlint, red, green, blue, armorSuffix); } }