From 083d45487ef5419483eb2d654e3ce17d240af835 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Tue, 5 Jan 2021 19:51:58 -0800 Subject: Speed up removals even more --- src/main/java/gregtech/api/util/GT_ModHandler.java | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/main/java/gregtech/api/util') diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java index e8d311da39..484e4d29b9 100644 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ b/src/main/java/gregtech/api/util/GT_ModHandler.java @@ -61,6 +61,7 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import static gregtech.GT_Mod.GT_FML_LOGGER; import static gregtech.api.enums.GT_Values.B; import static gregtech.api.enums.GT_Values.D1; import static gregtech.api.enums.GT_Values.DW; @@ -154,7 +155,7 @@ public class GT_ModHandler { public static List sSingleNonBlockDamagableRecipeList_warntOutput = new ArrayList<>(50); public static List sVanillaRecipeList_warntOutput = new ArrayList<>(50); public static final List sSingleNonBlockDamagableRecipeList_verified = new ArrayList<>(1000); - private static Cache sSmeltingRecipeCache = CacheBuilder.newBuilder().maximumSize(1000).build(); + private static final Cache sSmeltingRecipeCache = CacheBuilder.newBuilder().maximumSize(1000).build(); public static List sAnySteamFluidIDs = new ArrayList<>(); public static List sSuperHeatedSteamFluidIDs = new ArrayList<>(); @@ -1333,11 +1334,14 @@ public class GT_ModHandler { public static void bulkRemoveByRecipe(List toRemove) { ArrayList tList = (ArrayList) CraftingManager.getInstance().getRecipeList(); + GT_FML_LOGGER.info("BulkRemoveByRecipe: tList: " + tList.size() + " toRemove: " + toRemove.size() ); - tList.removeIf(tRecipe -> { + Set tListToRemove = tList.parallelStream().filter(tRecipe -> { if ((tRecipe instanceof IGT_CraftingRecipe) && !((IGT_CraftingRecipe) tRecipe).isRemovable()) return false; - return toRemove.stream().anyMatch(aCrafting -> tRecipe.matches(aCrafting, DW)); - }); + return toRemove.stream().anyMatch(aCrafting -> tRecipe.matches(aCrafting, DW)); + }).collect(Collectors.toSet()); + + tList.removeIf(tListToRemove::contains); } public static boolean removeRecipeByOutputDelayed(ItemStack aOutput) { @@ -1395,14 +1399,18 @@ public class GT_ModHandler { public static boolean bulkRemoveRecipeByOutput(List toRemove) { ArrayList tList = (ArrayList) CraftingManager.getInstance().getRecipeList(); - Set setToRemove = toRemove.stream().map(GT_OreDictUnificator::get_nocopy).collect(Collectors.toSet()); - - tList.removeIf(tRecipe -> { + Set setToRemove = toRemove.parallelStream().map(GT_OreDictUnificator::get_nocopy).collect(Collectors.toSet()); + + GT_FML_LOGGER.info("BulkRemoveRecipeByOutput: tList: " + tList.size() + " setToRemove: " + setToRemove.size() ); + + Set tListToRemove = tList.parallelStream().filter(tRecipe -> { if ((tRecipe instanceof IGT_CraftingRecipe) && !((IGT_CraftingRecipe) tRecipe).isRemovable()) return false; if (sSpecialRecipeClasses.contains(tRecipe.getClass().getName())) return false; final ItemStack tStack = GT_OreDictUnificator.get_nocopy(tRecipe.getRecipeOutput()); return setToRemove.stream().anyMatch(aOutput -> GT_Utility.areStacksEqual(tStack, aOutput, true)); - }); + }).collect(Collectors.toSet()); + + tList.removeIf(tListToRemove::contains); return true; } -- cgit