diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-19 19:16:39 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-06-28 03:21:12 +0800 |
| commit | c19b40c056d4f7035f4cbf7da802496b754167b7 (patch) | |
| tree | 27138bb0ed30e0168f1763071b47cafc162c70c4 | |
| parent | c6e20232d3789b57ff26ae7d3ecd86bc83d8eaf7 (diff) | |
| download | RoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.tar.gz RoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.tar.bz2 RoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.zip | |
Fix #937
| -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 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<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()) { @@ -204,7 +207,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); @@ -362,6 +365,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()) { |
