diff options
author | Martin Robertz <dream-master@gmx.net> | 2020-09-09 13:31:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-09 13:31:21 +0200 |
commit | a86d05483bb7eda87d89e9bf347a4517da228416 (patch) | |
tree | ff3c82081ee7f6f6e288ba4bc05b6c98b1dd184f /src/main/java/gregtech/api/util | |
parent | 9c7f9fa6e4ab8d1ad45f43c59ee27ebade3011b8 (diff) | |
parent | 726e3d0fe46e3ba793f3c3e9b7acc3fd00a752ef (diff) | |
download | GT5-Unofficial-a86d05483bb7eda87d89e9bf347a4517da228416.tar.gz GT5-Unofficial-a86d05483bb7eda87d89e9bf347a4517da228416.tar.bz2 GT5-Unofficial-a86d05483bb7eda87d89e9bf347a4517da228416.zip |
Merge pull request #312 from repo-alt/experimental
A simple cache for the furnace recipes, to avoid linear iteration
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_ModHandler.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java index e195bf9b02..4d264bec9b 100644 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ b/src/main/java/gregtech/api/util/GT_ModHandler.java @@ -1,5 +1,7 @@ package gregtech.api.util; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.GT_Mod; @@ -122,6 +124,7 @@ public class GT_ModHandler { public static List<Integer> sSingleNonBlockDamagableRecipeList_warntOutput = new ArrayList<Integer>(50); public static List<Integer> sVanillaRecipeList_warntOutput = new ArrayList<Integer>(50); public static final List<IRecipe> sSingleNonBlockDamagableRecipeList_verified = new ArrayList<IRecipe>(1000); + private static Cache<GT_ItemStack, ItemStack> sSmeltingRecipeCache = CacheBuilder.newBuilder().maximumSize(1000).build(); static { sNativeRecipeClasses.add(ShapedRecipes.class.getName()); @@ -1565,8 +1568,14 @@ public class GT_ModHandler { * Used in my own Furnace. */ public static ItemStack getSmeltingOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) { - if (aInput == null || aInput.stackSize < 1) return null; - ItemStack rStack = GT_OreDictUnificator.get(FurnaceRecipes.smelting().getSmeltingResult(aInput)); + if (aInput == null || aInput.stackSize < 1) + return null; + ItemStack rStack = null; + try { + rStack = sSmeltingRecipeCache.get(new GT_ItemStack(aInput), () -> GT_OreDictUnificator.get(FurnaceRecipes.smelting().getSmeltingResult(aInput))); + } catch (Exception ignored){ + } + if (rStack != null && (aOutputSlot == null || (GT_Utility.areStacksEqual(rStack, aOutputSlot) && rStack.stackSize + aOutputSlot.stackSize <= aOutputSlot.getMaxStackSize()))) { if (aRemoveInput) aInput.stackSize--; return rStack; |