diff --git a/src/main/java/codechicken/nei/recipe/RecipeHandlerQuery.java b/src/main/java/codechicken/nei/recipe/RecipeHandlerQuery.java index 6c49c340..bb837a28 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeHandlerQuery.java +++ b/src/main/java/codechicken/nei/recipe/RecipeHandlerQuery.java @@ -22,6 +22,7 @@ class RecipeHandlerQuery { private final List recipeHandlers; private final List serialRecipeHandlers; private final String[] errorMessage; + private boolean error = false; RecipeHandlerQuery(Function recipeHandlerFunction, List recipeHandlers, List serialRecipeHandlers, String... errorMessage) { @@ -35,9 +36,14 @@ class RecipeHandlerQuery { TaskProfiler profiler = ProfilerRecipeHandler.getProfiler(); profiler.start(profilerSection); try { - return getRecipeHandlersParallel(); + ArrayList handlers = getRecipeHandlersParallel(); + if (error) { + displayRecipeLookupError(); + } + return handlers; } catch (InterruptedException | ExecutionException e) { - displayRecipeLookupError(e); + printLog(e); + displayRecipeLookupError(); return new ArrayList<>(0); } finally { profiler.end(); @@ -54,22 +60,37 @@ class RecipeHandlerQuery { } private ArrayList getSerialHandlersWithRecipes() { - return serialRecipeHandlers.stream().map(recipeHandlerFunction).filter(h -> h.numRecipes() > 0) - .collect(Collectors.toCollection(ArrayList::new)); + return serialRecipeHandlers.stream().map(handler -> { + try { + return recipeHandlerFunction.apply(handler); + } catch (Throwable t) { + printLog(t); + error = true; + return null; + } + }).filter(h -> h != null && h.numRecipes() > 0).collect(Collectors.toCollection(ArrayList::new)); } private ArrayList getHandlersWithRecipes() throws InterruptedException, ExecutionException { - return ItemList.forkJoinPool.submit( - () -> recipeHandlers.parallelStream().map(recipeHandlerFunction).filter(h -> h.numRecipes() > 0) - .collect(Collectors.toCollection(ArrayList::new))) - .get(); + return ItemList.forkJoinPool.submit(() -> recipeHandlers.parallelStream().map(handler -> { + try { + return recipeHandlerFunction.apply(handler); + } catch (Throwable t) { + printLog(t); + error = true; + return null; + } + }).filter(h -> h != null && h.numRecipes() > 0).collect(Collectors.toCollection(ArrayList::new))).get(); } - private void displayRecipeLookupError(Exception e) { + private void printLog(Throwable t) { for (String message : errorMessage) { NEIClientConfig.logger.error(message); } - e.printStackTrace(); + t.printStackTrace(); + } + + private void displayRecipeLookupError() { EntityPlayer player = Minecraft.getMinecraft().thePlayer; if (player != null) { IChatComponent chat = new ChatComponentTranslation("nei.chat.recipe.error"); diff --git a/src/main/resources/assets/nei/csv/catalysts.csv b/src/main/resources/assets/nei/csv/catalysts.csv index 3eec7b0b..2578c055 100644 --- a/src/main/resources/assets/nei/csv/catalysts.csv +++ b/src/main/resources/assets/nei/csv/catalysts.csv @@ -1351,4 +1351,4 @@ de.ellpeck.actuallyadditions.mod.nei.NEIFurnaceDoubleRecipe,ActuallyAdditions:bl de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe,ActuallyAdditions:blockCoffeeMachine,,ActuallyAdditions,TRUE,,,,,,,,,,, de.ellpeck.actuallyadditions.mod.nei.NEICompostRecipe,ActuallyAdditions:blockCompost,,ActuallyAdditions,TRUE,,,,,,,,,,, de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe,ActuallyAdditions:blockAtomicReconstructor,,ActuallyAdditions,TRUE,,,,,,,,,,, -de.ellpeck.actuallyadditions.mod.nei.NEITreasureChestRecipe,ActuallyAdditions:blockTreasureChest,,ActuallyAdditions,TRUE,,,,,,,,,,, +de.ellpeck.actuallyadditions.mod.nei.NEITreasureChestRecipe,ActuallyAdditions:blockTreasureChest,,ActuallyAdditions,TRUE,,,,,,,,,,, \ No newline at end of file diff --git a/src/main/resources/assets/nei/csv/handlers.csv b/src/main/resources/assets/nei/csv/handlers.csv index 290181cf..6f87698f 100644 --- a/src/main/resources/assets/nei/csv/handlers.csv +++ b/src/main/resources/assets/nei/csv/handlers.csv @@ -519,5 +519,4 @@ de.ellpeck.actuallyadditions.mod.nei.NEIFurnaceDoubleRecipe,Actually Additions,A de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe,Actually Additions,ActuallyAdditions:blockCoffeeMachine,,ActuallyAdditions,TRUE,,,,,,,,,,, de.ellpeck.actuallyadditions.mod.nei.NEICompostRecipe,Actually Additions,ActuallyAdditions:blockCompost,,ActuallyAdditions,TRUE,,,,,,,,,,, de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe,Actually Additions,ActuallyAdditions:blockAtomicReconstructor,,ActuallyAdditions,TRUE,,,,,,,,,,, -de.ellpeck.actuallyadditions.mod.nei.NEITreasureChestRecipe,Actually Additions,ActuallyAdditions:blockTreasureChest,,ActuallyAdditions,TRUE,,,,,,,,,,, - +de.ellpeck.actuallyadditions.mod.nei.NEITreasureChestRecipe,Actually Additions,ActuallyAdditions:blockTreasureChest,,ActuallyAdditions,TRUE,,,,,,,,,,, \ No newline at end of file