From 0a052698be848819bf75eeca804d9971d408c6f3 Mon Sep 17 00:00:00 2001 From: YannickMG Date: Sat, 13 Aug 2022 04:55:30 -0400 Subject: Fix mTierIndexes using an incorrect data structure causing ArrayOutOfBoundException (#1244) --- src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java index ddeba9ca91..af40dcadd2 100644 --- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java +++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java @@ -46,8 +46,10 @@ import java.awt.*; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -892,7 +894,7 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler { private int mCachedRecipesVersion = -1; @Nullable private SoftReference> mCachedRecipes; - private ArrayList> mTierIndexes; + private Map> mTierIndexes; private Range mTierRange; public int getCachedRecipesVersion() { @@ -920,7 +922,8 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler { } private void computeTierIndexes() { - mTierIndexes = new ArrayList<>(GT_Values.V.length); + // Holds 16 elements without rehashing + mTierIndexes = new HashMap<>(GT_Values.V.length + 1, 1f); assert mCachedRecipes != null; Iterator iterator = Objects.requireNonNull(mCachedRecipes.get()).iterator(); @@ -934,7 +937,7 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler { byte recipeTier = GT_Utility.getTier(recipe.mRecipe.mEUt / GT_NEI_DefaultHandler.this.mRecipeMap.mAmperage); if (recipeTier != previousTier) { if (maxIndex != -1) { - mTierIndexes.set(previousTier, Range.between(minIndex, maxIndex)); + mTierIndexes.put(previousTier, Range.between(minIndex, maxIndex)); } else { lowestTier = recipeTier; } @@ -944,7 +947,7 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler { maxIndex = index; index++; if (!iterator.hasNext()) { - mTierIndexes.set(recipeTier, Range.between(minIndex, maxIndex)); + mTierIndexes.put(recipeTier, Range.between(minIndex, maxIndex)); mTierRange = Range.between(lowestTier, recipeTier); } } -- cgit