Skip to content

Commit ff87fd5

Browse files
committed
Merge remote-tracking branch 'slprime/extend_subset_widget' into dev
2 parents 12c4995 + d40f7ff commit ff87fd5

18 files changed

+907
-713
lines changed

src/main/java/codechicken/nei/BookmarkPanel.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2585,6 +2585,21 @@ private List<String> craftingChainTooltip(int groupId, List<String> currenttip)
25852585
return currenttip;
25862586
}
25872587

2588+
@Override
2589+
public boolean contains(int px, int py) {
2590+
2591+
if (new Rectangle4i(pagePrev.x + pagePrev.w, pagePrev.y, pageNext.x - (pagePrev.x + pagePrev.w), pagePrev.h)
2592+
.contains(px, py)) {
2593+
return true;
2594+
}
2595+
2596+
if (((BookmarkGrid) grid).getHoveredRowIndex(true) != -1) {
2597+
return true;
2598+
}
2599+
2600+
return super.contains(px, py);
2601+
}
2602+
25882603
@Override
25892604
public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey,
25902605
List<String> currenttip) {

src/main/java/codechicken/nei/CollapsibleItems.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,24 +145,16 @@ public static ItemFilter getItemFilter() {
145145
return filter;
146146
}
147147

148-
public static void updateCache(final List<ItemStack> items) {
148+
public static void clearCache() {
149149
CollapsibleItems.cache.clear();
150+
}
150151

151-
try {
152-
153-
ItemList.forkJoinPool.submit(() -> items.parallelStream().forEach(stack -> {
154-
GroupItem group = CollapsibleItems.groups.stream().filter(g -> g.matches(stack)).findFirst()
155-
.orElse(null);
152+
public static void putItem(ItemStack stack) {
153+
final GroupItem group = CollapsibleItems.groups.stream().filter(g -> g.matches(stack)).findFirst().orElse(null);
156154

157-
if (group != null) {
158-
CollapsibleItems.cache.put(stack, CollapsibleItems.groups.indexOf(group));
159-
}
160-
})).get();
161-
162-
} catch (Exception e) {
163-
NEIClientConfig.logger.error("Error create collapsible items groups", e);
155+
if (group != null) {
156+
CollapsibleItems.cache.put(stack, CollapsibleItems.groups.indexOf(group));
164157
}
165-
166158
}
167159

168160
public static int getGroupIndex(ItemStack stack) {

src/main/java/codechicken/nei/ItemList.java

Lines changed: 66 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.concurrent.ForkJoinWorkerThread;
1313
import java.util.regex.Pattern;
1414
import java.util.stream.Collectors;
15+
import java.util.stream.StreamSupport;
1516

1617
import net.minecraft.client.Minecraft;
1718
import net.minecraft.item.Item;
@@ -26,6 +27,7 @@
2627
import codechicken.nei.api.ItemFilter;
2728
import codechicken.nei.api.ItemFilter.ItemFilterProvider;
2829
import codechicken.nei.api.ItemInfo;
30+
import codechicken.nei.search.TooltipFilter;
2931

3032
public class ItemList {
3133

@@ -268,50 +270,84 @@ private void updateOrdering(List<ItemStack> items) {
268270
ItemList.ordering = newOrdering;
269271
}
270272

273+
private List<ItemStack> getPermutations(Item item) {
274+
final List<ItemStack> permutations = new LinkedList<>(ItemInfo.itemOverrides.get(item));
275+
276+
if (permutations.isEmpty()) {
277+
item.getSubItems(item, null, permutations);
278+
}
279+
280+
if (permutations.isEmpty()) {
281+
damageSearch(item, permutations);
282+
}
283+
284+
permutations.addAll(ItemInfo.itemVariants.get(item));
285+
286+
return permutations.stream()
287+
.filter(
288+
stack -> stack.getItem() != null && stack.getItem().delegate.name() != null
289+
&& !ItemInfo.isHidden(stack))
290+
.collect(Collectors.toCollection(ArrayList::new));
291+
}
292+
293+
// For optimization it generate itemslist, permutations, orders & collapsibleitems
271294
@Override
272295
@SuppressWarnings("unchecked")
273296
public void execute() {
297+
if (!NEIClientConfig.isEnabled()) return;
298+
274299
ThreadOperationTimer timer = getTimer(NEIClientConfig.getItemLoadingTimeout());
275300
LayoutManager.itemsLoaded = true;
276301
loadFinished = false;
277302

278-
List<ItemStack> items = new LinkedList<>();
279-
List<ItemStack> permutations = new LinkedList<>();
303+
SearchField.searchParser.clearCache();
304+
ItemSorter.instance.ordering.clear();
305+
CollapsibleItems.clearCache();
306+
TooltipFilter.clearCache();
307+
308+
List<ItemStack> items = new ArrayList<>();
280309
ListMultimap<Item, ItemStack> itemMap = ArrayListMultimap.create();
310+
ItemStackSet unique = new ItemStackSet();
281311

282312
timer.setLimit(NEIClientConfig.getItemLoadingTimeout());
283-
for (Item item : (Iterable<Item>) Item.itemRegistry) {
284-
if (interrupted()) return;
285-
286-
if (item == null || erroredItems.contains(item)) continue;
313+
StreamSupport.stream(((Iterable<Item>) Item.itemRegistry).spliterator(), true).forEach(item -> {
314+
if (item == null || item.delegate.name() == null || erroredItems.contains(item)) return;
287315

288316
try {
289317
timer.reset(item);
318+
List<ItemStack> permutations = getPermutations(item);
319+
timer.reset();
290320

291-
permutations.clear();
292-
permutations.addAll(ItemInfo.itemOverrides.get(item));
293-
294-
if (permutations.isEmpty()) {
295-
item.getSubItems(item, null, permutations);
296-
}
297-
298-
if (permutations.isEmpty()) {
299-
damageSearch(item, permutations);
300-
}
321+
for (ItemStack stack : permutations) {
322+
if (!unique.contains(stack)) {
301323

302-
permutations.addAll(ItemInfo.itemVariants.get(item));
324+
synchronized (unique) {
325+
unique.add(stack);
326+
}
303327

304-
timer.reset();
328+
synchronized (items) {
329+
items.add(stack);
330+
}
305331

306-
permutations = permutations.stream().filter(stack -> !ItemInfo.isHidden(stack))
307-
.collect(Collectors.toCollection(ArrayList::new));
332+
CollapsibleItems.putItem(stack);
333+
}
334+
}
308335

309-
items.addAll(permutations);
310-
itemMap.putAll(item, permutations);
336+
synchronized (itemMap) {
337+
itemMap.putAll(item, permutations);
338+
}
311339
} catch (Throwable t) {
312-
NEIServerConfig.logger.error("Removing item: " + item + " from list.", t);
340+
NEIServerConfig.logger.error("Removing item: {} from list.", item, t);
313341
erroredItems.add(item);
314342
}
343+
344+
});
345+
346+
int index = 0;
347+
for (Item item : (Iterable<Item>) Item.itemRegistry) {
348+
for (ItemStack stack : itemMap.get(item)) {
349+
ItemSorter.instance.ordering.put(stack, index++);
350+
}
315351
}
316352

317353
if (interrupted()) return;
@@ -320,10 +356,15 @@ public void execute() {
320356
for (ItemsLoadedCallback callback : loadCallbacks) callback.itemsLoaded();
321357

322358
if (interrupted()) return;
323-
CollapsibleItems.updateCache(items);
324-
updateOrdering(items);
359+
updateOrdering(ItemList.items);
360+
361+
new Thread(
362+
() -> ItemList.items.parallelStream().forEach(TooltipFilter::getSearchTooltip),
363+
"NEI Tooltip Filter Loader").start();
325364

326365
loadFinished = true;
366+
367+
SubsetWidget.updateHiddenItems();
327368
updateFilter.restart();
328369
}
329370
};

src/main/java/codechicken/nei/ItemPanel.java

Lines changed: 3 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ public ItemStack getStackMouseOver(int mousex, int mousey) {
4141
return super.getStackMouseOver(mousex, mousey);
4242
}
4343

44-
public Button more;
45-
public Button less;
46-
public ItemQuantityField quantity;
4744
public ItemHistoryPanel historyPanel;
4845
public Button toggleGroups;
4946

@@ -345,42 +342,6 @@ public boolean onButtonPress(boolean rightclick) {
345342
}
346343
};
347344

348-
more = new Button("+") {
349-
350-
@Override
351-
public boolean onButtonPress(boolean rightclick) {
352-
if (rightclick) return false;
353-
354-
int modifier = NEIClientUtils.controlKey() ? 64 : NEIClientUtils.shiftKey() ? 10 : 1;
355-
int quantity = NEIClientConfig.getItemQuantity() + modifier;
356-
357-
if (quantity < 0) {
358-
quantity = 0;
359-
}
360-
361-
ItemPanels.itemPanel.quantity.setText(Integer.toString(quantity));
362-
return true;
363-
}
364-
};
365-
less = new Button("-") {
366-
367-
@Override
368-
public boolean onButtonPress(boolean rightclick) {
369-
if (rightclick) return false;
370-
371-
int modifier = NEIClientUtils.controlKey() ? -64 : NEIClientUtils.shiftKey() ? -10 : -1;
372-
int quantity = NEIClientConfig.getItemQuantity() + modifier;
373-
374-
if (quantity < 0) {
375-
quantity = 0;
376-
}
377-
378-
ItemPanels.itemPanel.quantity.setText(Integer.toString(quantity));
379-
return true;
380-
}
381-
};
382-
383-
quantity = new ItemQuantityField("quantity");
384345
historyPanel = new ItemHistoryPanel();
385346
}
386347

@@ -431,57 +392,28 @@ protected int resizeFooter(GuiContainer gui) {
431392
return 0;
432393
}
433394

434-
final int BUTTON_SIZE = 20;
435-
more.w = less.w = BUTTON_SIZE;
436-
quantity.h = BUTTON_SIZE;
437-
438-
if (NEIClientConfig.isSearchWidgetCentered()) {
439-
more.h = less.h = BUTTON_SIZE;
440-
more.x = x + w - BUTTON_SIZE;
441-
more.y = less.y = quantity.y = y + h - BUTTON_SIZE;
442-
less.x = x;
443-
quantity.x = x + BUTTON_SIZE + 2;
444-
quantity.w = more.x - quantity.x - 2;
445-
} else {
446-
quantity.x = (int) (x + (w * 0.7)) + 3;
447-
quantity.y = y + h - BUTTON_SIZE;
448-
quantity.w = (int) ((w * 0.3) - BUTTON_SIZE - 1);
449-
450-
more.h = less.h = BUTTON_SIZE / 2;
451-
more.y = y + h - (more.h * 2);
452-
453-
less.x = more.x = quantity.x + quantity.w;
454-
less.y = more.y + more.h;
455-
}
456-
457395
if (NEIClientConfig.showHistoryPanelWidget()) {
458396
historyPanel.x = x;
459397
historyPanel.w = w;
460398
historyPanel.h = ItemsGrid.SLOT_SIZE * NEIClientConfig.getIntSetting("inventory.history.useRows");
461399

462400
if (NEIClientConfig.showItemQuantityWidget() || !NEIClientConfig.isSearchWidgetCentered()) {
463-
historyPanel.y = quantity.y - historyPanel.h - PanelWidget.PADDING;
464-
return quantity.h + historyPanel.h + PanelWidget.PADDING * 2;
401+
historyPanel.y = LayoutManager.quantity.y - historyPanel.h - PanelWidget.PADDING;
402+
return LayoutManager.quantity.h + historyPanel.h + PanelWidget.PADDING * 2;
465403
} else {
466404
historyPanel.y = y + h - historyPanel.h;
467405
return historyPanel.h + PanelWidget.PADDING;
468406
}
469407
}
470408

471-
return quantity.h + PanelWidget.PADDING;
409+
return LayoutManager.quantity.h + PanelWidget.PADDING;
472410
}
473411

474412
@Override
475413
public void setVisible() {
476414
super.setVisible();
477415

478416
if (grid.getPerPage() > 0) {
479-
if (NEIClientConfig.showItemQuantityWidget()) {
480-
LayoutManager.addWidget(more);
481-
LayoutManager.addWidget(less);
482-
LayoutManager.addWidget(quantity);
483-
}
484-
485417
if (!CollapsibleItems.isEmpty() && !grid.isEmpty()) {
486418
LayoutManager.addWidget(toggleGroups);
487419
}

src/main/java/codechicken/nei/ItemSorter.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44
import java.util.Comparator;
55
import java.util.HashMap;
66
import java.util.List;
7+
import java.util.Map;
78

89
import net.minecraft.item.Item;
910
import net.minecraft.item.ItemStack;
1011
import net.minecraft.util.StatCollector;
1112

1213
import codechicken.lib.config.ConfigTagParent;
13-
import codechicken.nei.ItemList.ItemsLoadedCallback;
1414
import codechicken.nei.api.API;
1515
import codechicken.nei.api.ItemInfo;
1616
import codechicken.nei.config.GuiItemSorter;
1717
import codechicken.nei.config.OptionOpenGui;
1818

19-
public class ItemSorter implements Comparator<ItemStack>, ItemsLoadedCallback {
19+
public class ItemSorter implements Comparator<ItemStack> {
2020

2121
public static class SortEntry {
2222

@@ -44,12 +44,10 @@ public String getTooltip() {
4444
public static final ItemSorter instance = new ItemSorter();
4545

4646
// optimisations
47-
public HashMap<ItemStack, Integer> ordering = null;
47+
public Map<ItemStack, Integer> ordering = new HashMap<>();
4848

4949
public static void sort(List<ItemStack> items) {
5050
try {
51-
// items = (ArrayList<ItemStack>)
52-
// items.parallelStream().sorted(instance).collect(Collectors.toList());
5351
items.sort(instance);
5452
} catch (Exception e) {
5553
NEIClientConfig.logger.error("Exception sorting item list", e);
@@ -65,14 +63,6 @@ public int compare(ItemStack o1, ItemStack o2) {
6563
return 0;
6664
}
6765

68-
@Override
69-
public void itemsLoaded() {
70-
HashMap<ItemStack, Integer> newMap = new HashMap<>();
71-
int i = 0;
72-
for (ItemStack stack : ItemList.items) newMap.put(stack, i++);
73-
ordering = newMap;
74-
}
75-
7666
public static SortEntry find(String name) {
7767
for (SortEntry e : entries) if (e.name.equals(name)) return e;
7868

@@ -136,7 +126,6 @@ public void useGlobals() {
136126
list = fromSaveString(activeTag().getValue());
137127
}
138128
});
139-
ItemList.loadCallbacks.add(instance);
140129
}
141130

142131
public static String getSaveString(List<SortEntry> list) {

0 commit comments

Comments
 (0)