aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-06-19 19:16:39 +0800
committershedaniel <daniel@shedaniel.me>2022-06-28 03:21:12 +0800
commitc19b40c056d4f7035f4cbf7da802496b754167b7 (patch)
tree27138bb0ed30e0168f1763071b47cafc162c70c4 /runtime/src/main
parentc6e20232d3789b57ff26ae7d3ecd86bc83d8eaf7 (diff)
downloadRoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.tar.gz
RoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.tar.bz2
RoughlyEnoughItems-c19b40c056d4f7035f4cbf7da802496b754167b7.zip
Fix #937
Diffstat (limited to 'runtime/src/main')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java46
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()) {