Fix crash rendering hidden item stacks

This commit is contained in:
Sollace 2024-12-20 23:48:52 +01:00
parent 449862ca7e
commit b9e878fb63
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB

View file

@ -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<Text> EMPTY_LINES = List.of(ScreenTexts.EMPTY);
@ -274,31 +278,44 @@ 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();
matrices.translate(x + 8, y + 8, 150);
try {
matrices.scale(16, -16, 16);
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();
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);
}