aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrepo_alt <wvk17@yandex.ru>2020-09-09 08:24:03 +0300
committerrepo_alt <wvk17@yandex.ru>2020-09-09 13:20:12 +0300
commit726e3d0fe46e3ba793f3c3e9b7acc3fd00a752ef (patch)
treeff3c82081ee7f6f6e288ba4bc05b6c98b1dd184f /src
parent9f4b4a2358b11a33d8d323a2c92a551a11e2ab51 (diff)
downloadGT5-Unofficial-726e3d0fe46e3ba793f3c3e9b7acc3fd00a752ef.tar.gz
GT5-Unofficial-726e3d0fe46e3ba793f3c3e9b7acc3fd00a752ef.tar.bz2
GT5-Unofficial-726e3d0fe46e3ba793f3c3e9b7acc3fd00a752ef.zip
replace HashMap with a (bounded) Guava Cache
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/util/GT_ModHandler.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java
index 4f318bb752..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,7 +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 HashMap<GT_ItemStack, ItemStack> smeltingRecipeCache = new LinkedHashMap<>();
+ private static Cache<GT_ItemStack, ItemStack> sSmeltingRecipeCache = CacheBuilder.newBuilder().maximumSize(1000).build();
static {
sNativeRecipeClasses.add(ShapedRecipes.class.getName());
@@ -1566,14 +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;
- 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 (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;