aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorrepo_alt <wvk17@yandex.ru>2020-09-08 00:37:20 +0300
committerrepo_alt <wvk17@yandex.ru>2020-09-08 00:37:20 +0300
commit9f4b4a2358b11a33d8d323a2c92a551a11e2ab51 (patch)
tree568fe1dfdc5464a201825f4ba86bc018665b3687 /src/main/java
parent05420344ee5a3af1bab32a7e405ac5990da8a37a (diff)
downloadGT5-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)
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/api/util/GT_ModHandler.java9
1 files changed, 8 insertions, 1 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..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;