From c19b40c056d4f7035f4cbf7da802496b754167b7 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 19 Jun 2022 19:16:39 +0800 Subject: Fix #937 --- .../shedaniel/rei/impl/client/view/ViewsImpl.java | 46 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'runtime') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java index 9fd6fc102..39b45c0f1 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java @@ -56,7 +56,10 @@ import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.client.gui.craftable.CraftableFilter; import me.shedaniel.rei.impl.client.gui.widget.AutoCraftingEvaluator; +import me.shedaniel.rei.impl.client.util.CrashReportUtils; import me.shedaniel.rei.impl.display.DisplaySpec; +import net.minecraft.CrashReport; +import net.minecraft.ReportedException; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; @@ -189,7 +192,7 @@ public class ViewsImpl implements Views { generatorsCount += entry.getValue().size(); for (DynamicDisplayGenerator generator : (List>) (List>) entry.getValue()) { - generateLiveDisplays(displayRegistry, generator, builder, set::add); + generateLiveDisplays(displayRegistry, wrapForError(generator), builder, set::add); } if (!set.isEmpty()) { @@ -204,7 +207,7 @@ public class ViewsImpl implements Views { }; for (DynamicDisplayGenerator generator : (List>) (List>) displayRegistry.getGlobalDisplayGenerators()) { generatorsCount++; - generateLiveDisplays(displayRegistry, generator, builder, displayConsumer); + generateLiveDisplays(displayRegistry, wrapForError(generator), builder, displayConsumer); } Map, List> resultSpeced = (Map, List>) (Map) new LinkedHashMap<>(result); @@ -362,6 +365,45 @@ public class ViewsImpl implements Views { } } + private static DynamicDisplayGenerator wrapForError(DynamicDisplayGenerator generator) { + return new DynamicDisplayGenerator<>() { + @Override + public Optional> getRecipeFor(EntryStack entry) { + try { + return generator.getRecipeFor(entry); + } catch (Throwable throwable) { + CrashReport report = CrashReportUtils.essential(throwable, "Error while generating recipes for an entry stack"); + CrashReportUtils.renderer(report, entry); + RoughlyEnoughItemsCore.LOGGER.throwException(new ReportedException(report)); + return Optional.empty(); + } + } + + @Override + public Optional> getUsageFor(EntryStack entry) { + try { + return generator.getUsageFor(entry); + } catch (Throwable throwable) { + CrashReport report = CrashReportUtils.essential(throwable, "Error while generating usages for an entry stack"); + CrashReportUtils.renderer(report, entry); + RoughlyEnoughItemsCore.LOGGER.throwException(new ReportedException(report)); + return Optional.empty(); + } + } + + @Override + public Optional> generate(ViewSearchBuilder builder) { + try { + return generator.generate(builder); + } catch (Throwable throwable) { + CrashReport report = CrashReportUtils.essential(throwable, "Error while generating recipes for a search"); + RoughlyEnoughItemsCore.LOGGER.throwException(new ReportedException(report)); + return Optional.empty(); + } + } + }; + } + @Override public Collection> findCraftableEntriesByMaterials() { if (PluginManager.areAnyReloading()) { -- cgit