diff --git a/src/main/java/codechicken/nei/ItemList.java b/src/main/java/codechicken/nei/ItemList.java index 4044ba658..271dffe04 100644 --- a/src/main/java/codechicken/nei/ItemList.java +++ b/src/main/java/codechicken/nei/ItemList.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -44,7 +45,7 @@ public class ItemList { private static final HashSet erroredItems = new HashSet<>(); private static final HashSet stackTraces = new HashSet<>(); - private static final HashMap ordering = new HashMap<>(); + private static HashMap ordering = new HashMap<>(); /** * Unlike {@link LayoutManager#itemsLoaded}, this indicates whether item loading is actually finished or not. */ @@ -234,10 +235,10 @@ private String getTooltip(ItemStack stack) { } private void updateOrdering(List items) { - ItemList.ordering.clear(); - ItemSorter.sort(items); + HashMap newOrdering = new HashMap<>(); + if (!CollapsibleItems.isEmpty()) { HashMap groups = new HashMap<>(); int orderIndex = 0; @@ -246,23 +247,25 @@ private void updateOrdering(List items) { final int groupIndex = CollapsibleItems.getGroupIndex(stack); if (groupIndex == -1) { - ItemList.ordering.put(stack, orderIndex++); + newOrdering.put(stack, orderIndex++); } else { if (!groups.containsKey(groupIndex)) { groups.put(groupIndex, orderIndex++); } - ItemList.ordering.put(stack, groups.get(groupIndex)); + newOrdering.put(stack, groups.get(groupIndex)); } } } else { int orderIndex = 0; for (ItemStack stack : items) { - ItemList.ordering.put(stack, orderIndex++); + newOrdering.put(stack, orderIndex++); } } + + ItemList.ordering = newOrdering; } @Override @@ -346,12 +349,9 @@ public ForkJoinWorkerThread newThread(ForkJoinPool pool) { public static final RestartableTask updateFilter = new RestartableTask("NEI Item Filtering") { - private int compare(ItemStack o1, ItemStack o2) { - return Integer.compare(ItemList.ordering.get(o1), ItemList.ordering.get(o2)); - } - @Override public void execute() { + if (!loadFinished) return; ItemFilter filter = getItemListFilter(); ArrayList filtered; @@ -368,8 +368,12 @@ public void execute() { } if (interrupted()) return; - filtered.sort(this::compare); + + Comparator comparator = Comparator.comparingInt(ItemList.ordering::get); + filtered.sort(comparator::compare); + if (interrupted()) return; + ItemPanel.updateItemList(filtered); } };