From 03773ccc3f5b459860aeba096f2d59462a88c256 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jul 2022 17:30:29 +0200 Subject: [PATCH] [Fix] `MixinArmorFeatureRenderer` stability improvements (#36) --- .../rendering/MixinArmorFeatureRenderer.java | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java index ccbc36b9..6b4c8f40 100644 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java @@ -63,12 +63,12 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer { } @Unique - private LivingEntity storedEntity; + private LivingEntity be_storedEntity; @Unique - private EquipmentSlot storedSlot; + private EquipmentSlot be_storedSlot; @Inject(method = "render", at = @At("HEAD")) - private void storeEntity( + private void be_storeEntity( PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, @@ -82,11 +82,11 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer { CallbackInfo ci ) { // We store the living entity wearing the armor before we render - this.storedEntity = livingEntity; + this.be_storedEntity = livingEntity; } @Inject(method = "renderArmorPiece", at = @At("HEAD")) - private void storeSlot( + private void be_storeSlot( PoseStack matrices, MultiBufferSource vertexConsumers, LivingEntity livingEntity, @@ -96,11 +96,11 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer { CallbackInfo ci ) { // We store the current armor slot that is rendering before we render each armor piece - this.storedSlot = slot; + this.be_storedSlot = slot; } @Inject(method = "render", at = @At("RETURN")) - private void removeStored( + private void be_removeStored( PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, @@ -114,29 +114,31 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer { CallbackInfo ci ) { // We remove the stored data after we render - this.storedEntity = null; - this.storedSlot = null; + this.be_storedEntity = null; + this.be_storedSlot = null; } @Inject(method = "getArmorModel", at = @At("RETURN"), cancellable = true) - private void selectArmorModel(EquipmentSlot slot, CallbackInfoReturnable> cir) { - ItemStack stack = storedEntity.getItemBySlot(slot); + private void be_selectArmorModel(EquipmentSlot slot, CallbackInfoReturnable> cir) { + if (be_storedEntity != null) { + ItemStack stack = be_storedEntity.getItemBySlot(slot); - HumanoidModel defaultModel = cir.getReturnValue(); - HumanoidModel model = ArmorRenderingRegistry.getArmorModel( - storedEntity, - stack, - slot, - defaultModel - ); + HumanoidModel defaultModel = cir.getReturnValue(); + HumanoidModel model = ArmorRenderingRegistry.getArmorModel( + be_storedEntity, + stack, + slot, + defaultModel + ); - if (model != defaultModel) { - cir.setReturnValue(model); + if (model != defaultModel) { + cir.setReturnValue(model); + } } } @Inject(method = "getArmorLocation", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) - private void getArmorTexture( + private void be_getArmorTexture( ArmorItem armorItem, boolean secondLayer, /* @Nullable */ String suffix, @@ -144,9 +146,9 @@ public abstract class MixinArmorFeatureRenderer extends RenderLayer { String vanillaIdentifier ) { String texture = ArmorRenderingRegistry.getArmorTexture( - storedEntity, - storedEntity.getItemBySlot(storedSlot), - storedSlot, + be_storedEntity, + be_storedEntity.getItemBySlot(be_storedSlot), + be_storedSlot, secondLayer, suffix, new ResourceLocation(vanillaIdentifier)