diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-19 19:16:39 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-05-29 21:01:19 +0800 |
| commit | 0e85364b3b32ca388c0d9ba40a273eb2d496b644 (patch) | |
| tree | 79011cefb290ff81b5f02dc0aab057ea7e61e493 /runtime/src/main/java | |
| parent | ecf6c7adb1491b4de04b381fce42b193cc22cc13 (diff) | |
| download | RoughlyEnoughItems-0e85364b3b32ca388c0d9ba40a273eb2d496b644.tar.gz RoughlyEnoughItems-0e85364b3b32ca388c0d9ba40a273eb2d496b644.tar.bz2 RoughlyEnoughItems-0e85364b3b32ca388c0d9ba40a273eb2d496b644.zip | |
Fix #937
Diffstat (limited to 'runtime/src/main/java')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java | 46 |
1 files changed, 44 insertions, 2 deletions
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 4d264794f..76589b7d5 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; @@ -170,7 +173,7 @@ public class ViewsImpl implements Views { generatorsCount += entry.getValue().size(); for (DynamicDisplayGenerator<Display> generator : (List<DynamicDisplayGenerator<Display>>) (List<? extends DynamicDisplayGenerator<?>>) entry.getValue()) { - generateLiveDisplays(displayRegistry, generator, builder, set::add); + generateLiveDisplays(displayRegistry, wrapForError(generator), builder, set::add); } if (!set.isEmpty()) { @@ -185,7 +188,7 @@ public class ViewsImpl implements Views { }; for (DynamicDisplayGenerator<Display> generator : (List<DynamicDisplayGenerator<Display>>) (List<? extends DynamicDisplayGenerator<?>>) displayRegistry.getGlobalDisplayGenerators()) { generatorsCount++; - generateLiveDisplays(displayRegistry, generator, builder, displayConsumer); + generateLiveDisplays(displayRegistry, wrapForError(generator), builder, displayConsumer); } Map<DisplayCategory<?>, List<DisplaySpec>> resultSpeced = (Map<DisplayCategory<?>, List<DisplaySpec>>) (Map) new LinkedHashMap<>(result); @@ -343,6 +346,45 @@ public class ViewsImpl implements Views { } } + private static <T extends Display> DynamicDisplayGenerator<T> wrapForError(DynamicDisplayGenerator<T> generator) { + return new DynamicDisplayGenerator<>() { + @Override + public Optional<List<T>> 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<List<T>> 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<List<T>> 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<EntryStack<?>> findCraftableEntriesByMaterials() { if (PluginManager.areAnyReloading()) { |
