diff options
author | repo_alt <wvk17@yandex.ru> | 2020-09-08 00:37:20 +0300 |
---|---|---|
committer | repo_alt <wvk17@yandex.ru> | 2020-09-08 00:37:20 +0300 |
commit | 9f4b4a2358b11a33d8d323a2c92a551a11e2ab51 (patch) | |
tree | 568fe1dfdc5464a201825f4ba86bc018665b3687 | |
parent | 05420344ee5a3af1bab32a7e405ac5990da8a37a (diff) | |
download | GT5-Unofficial-9f4b4a2358b11a33d8d323a2c92a551a11e2ab51.tar.gz GT5-Unofficial-9f4b4a2358b11a33d8d323a2c92a551a11e2ab51.tar.bz2 GT5-Unofficial-9f4b4a2358b11a33d8d323a2c92a551a11e2ab51.zip |
A simple cache for the furnace recipes, to avoid linear iteration
(Should help with https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6416)
-rw-r--r-- | build.properties | 2 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GT_ModHandler.java | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/build.properties b/build.properties index 212a1b999c..633a84e787 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614-1.7.10 -gt.version=5.09.33.53 +gt.version=5.09.33.54 ae2.version=rv3-beta-22 applecore.version=1.7.10-1.2.1+107.59407 diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java index e195bf9b02..4f318bb752 100644 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ b/src/main/java/gregtech/api/util/GT_ModHandler.java @@ -122,6 +122,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 HashMap<GT_ItemStack, ItemStack> smeltingRecipeCache = new LinkedHashMap<>(); static { sNativeRecipeClasses.add(ShapedRecipes.class.getName()); @@ -1566,7 +1567,13 @@ public class GT_ModHandler { */ 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)); + GT_ItemStack gtInput = new GT_ItemStack(aInput); + ItemStack rStack = smeltingRecipeCache.get(gtInput); + if (rStack == null) { + rStack = GT_OreDictUnificator.get(FurnaceRecipes.smelting().getSmeltingResult(aInput)); + if (rStack != null) + smeltingRecipeCache.put(gtInput, rStack); + } if (rStack != null && (aOutputSlot == null || (GT_Utility.areStacksEqual(rStack, aOutputSlot) && rStack.stackSize + aOutputSlot.stackSize <= aOutputSlot.getMaxStackSize()))) { if (aRemoveInput) aInput.stackSize--; return rStack; |