aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorYannickMG <yannickmg@gmail.com>2022-08-13 04:55:30 -0400
committerGitHub <noreply@github.com>2022-08-13 10:55:30 +0200
commit0a052698be848819bf75eeca804d9971d408c6f3 (patch)
treed8ce1b15364779dcedd85ca4af3875727abb9da5 /src/main
parent554d3f6a75433a90f07c751297c404adaaf12cdf (diff)
downloadGT5-Unofficial-0a052698be848819bf75eeca804d9971d408c6f3.tar.gz
GT5-Unofficial-0a052698be848819bf75eeca804d9971d408c6f3.tar.bz2
GT5-Unofficial-0a052698be848819bf75eeca804d9971d408c6f3.zip
Fix mTierIndexes using an incorrect data structure causing ArrayOutOfBoundException (#1244)
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java11
1 files changed, 7 insertions, 4 deletions
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<List<CachedDefaultRecipe>> mCachedRecipes;
- private ArrayList<Range<Integer>> mTierIndexes;
+ private Map<Byte, Range<Integer>> mTierIndexes;
private Range<Byte> 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<CachedDefaultRecipe> 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);
}
}