From b9e878fb63b84e8c386f20e73c22698e0ff09cc3 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 20 Dec 2024 23:48:52 +0100 Subject: [PATCH] Fix crash rendering hidden item stacks --- .../client/gui/spellbook/IngredientTree.java | 57 ++++++++++++------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java index 889b0a8a..b977a0dc 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java @@ -22,11 +22,15 @@ import com.minelittlepony.unicopia.container.SpellbookState; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.component.DataComponentTypes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.tooltip.TooltipType; import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; +import net.minecraft.util.Util; +import net.minecraft.util.crash.CrashException; +import net.minecraft.util.crash.CrashReport; public class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { private static final List EMPTY_LINES = List.of(ScreenTexts.EMPTY); @@ -274,30 +278,43 @@ public class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { @Override protected void drawItem(DrawContext context, int x, int y) { - var model = itemRenderer.getModel(stack, null, null, 0); + if (stack.isEmpty()) { + return; + } + var model = itemRenderer.getModel(stack, MinecraftClient.getInstance().world, MinecraftClient.getInstance().player, 0); MatrixStack matrices = context.getMatrices(); matrices.push(); - matrices.translate(x, y, 100); - matrices.translate(8, 8, 0); - matrices.scale(1, -1, 1); - matrices.scale(8, 8, 8); - VertexConsumerProvider.Immediate immediate = context.getVertexConsumers(); - boolean bl = !model.isSideLit(); - if (bl) { - DiffuseLighting.disableGuiDepthLighting(); - } - RenderSystem.disableDepthTest(); - itemRenderer.renderItem(stack, ModelTransformationMode.GUI, false, matrices, layer -> { - return immediate.getBuffer(RenderLayerUtil.getTexture(layer).map(texture -> { - return RenderLayers.getMagicColored(texture, 0x09000000); - }).orElse(RenderLayers.getMagicColored(0x09000000))); - }, 0, OverlayTexture.DEFAULT_UV, model); - immediate.draw(); + matrices.translate(x + 8, y + 8, 150); - RenderSystem.enableDepthTest(); - if (bl) { - DiffuseLighting.enableGuiDepthLighting(); + try { + matrices.scale(16, -16, 16); + + boolean bl = !model.isSideLit(); + if (bl) { + DiffuseLighting.disableGuiDepthLighting(); + } + + VertexConsumerProvider.Immediate immediate = context.getVertexConsumers(); + stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false); + itemRenderer.renderItem(stack, ModelTransformationMode.GUI, false, matrices, layer -> { + return immediate.getBuffer(RenderLayerUtil.getTexture(layer) + .map(texture -> RenderLayers.getMagicColored(texture, 0x09000000)) + .orElse(RenderLayers.getMagicColored(0x09000000))); + }, 0, OverlayTexture.DEFAULT_UV, model); + + RenderSystem.disableDepthTest(); + context.draw(); + RenderSystem.enableDepthTest(); + + if (bl) { + DiffuseLighting.enableGuiDepthLighting(); + } + } catch (Throwable t) { + throw new CrashException(Util.make(CrashReport.create(t, "Rendering item"), report -> report.addElement("Item being rendered") + .add("Item Type", () -> String.valueOf(stack.getItem())) + .add("Item Components", () -> String.valueOf(stack.getComponents())) + .add("Item Foil", () -> String.valueOf(stack.hasGlint())))); } matrices.pop(); RenderSystem.setShaderColor(1, 1, 1, 1);