diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-02-18 18:15:30 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-02-18 18:15:30 +0800 |
| commit | a70fbdbde00410a732d1bdc5cee3f0a6d8048675 (patch) | |
| tree | aef2891a89ce6be5f0806cd9f9b17f8f5635ca16 /src/main/java/me/shedaniel/rei/gui/widget | |
| parent | bbf531e70a04d2cbaa894f3ad2e6fe8d3d569efc (diff) | |
| download | RoughlyEnoughItems-a70fbdbde00410a732d1bdc5cee3f0a6d8048675.tar.gz RoughlyEnoughItems-a70fbdbde00410a732d1bdc5cee3f0a6d8048675.tar.bz2 RoughlyEnoughItems-a70fbdbde00410a732d1bdc5cee3f0a6d8048675.zip | |
4.0.3-unstable
- Adds async search
- Adds debug search option
- Set entry size range from 50%-400% to 25%-400%
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/gui/widget')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java index c96e1cd9a..a309fc3db 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java @@ -40,7 +40,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.*; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -633,12 +633,43 @@ public class EntryListWidget extends WidgetWithBounds { boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled() && !ScreenHelper.inventoryStacks.isEmpty(); List<EntryStack> workingItems = checkCraftable ? RecipeHelper.getInstance().findCraftableEntriesByItems(CollectionUtils.map(ScreenHelper.inventoryStacks, EntryStack::create)) : null; List<EntryStack> stacks = EntryRegistry.getInstance().getPreFilteredList(); - if (stacks instanceof CopyOnWriteArrayList) { - for (EntryStack stack : stacks) { - if (canLastSearchTermsBeAppliedTo(stack)) { - if (workingItems != null && CollectionUtils.findFirstOrNullEqualsEntryIgnoreAmount(workingItems, stack) == null) - continue; - list.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT)); + if (stacks instanceof CopyOnWriteArrayList && !stacks.isEmpty()) { + if (ConfigObject.getInstance().shouldAsyncSearch()) { + int size = ConfigObject.getInstance().getNumberAsyncSearch(); + List<CompletableFuture<List<EntryStack>>> completableFutures = Lists.newArrayList(); + for (int i = 0; i < stacks.size(); i += size) { + int[] start = {i}; + completableFutures.add(CompletableFuture.supplyAsync(() -> { + int end = Math.min(stacks.size() - 1, start[0] + size); + List<EntryStack> filtered = Lists.newArrayList(); + for (; start[0] < end; start[0]++) { + EntryStack stack = stacks.get(start[0]); + if (canLastSearchTermsBeAppliedTo(stack)) { + if (workingItems != null && CollectionUtils.findFirstOrNullEqualsEntryIgnoreAmount(workingItems, stack) == null) + continue; + filtered.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT)); + } + } + return filtered; + })); + } + try { + CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).get(30, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + e.printStackTrace(); + } + for (CompletableFuture<List<EntryStack>> future : completableFutures) { + List<EntryStack> now = future.getNow(null); + if (now != null) + list.addAll(now); + } + } else { + for (EntryStack stack : stacks) { + if (canLastSearchTermsBeAppliedTo(stack)) { + if (workingItems != null && CollectionUtils.findFirstOrNullEqualsEntryIgnoreAmount(workingItems, stack) == null) + continue; + list.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT)); + } } } } @@ -678,7 +709,7 @@ public class EntryListWidget extends WidgetWithBounds { favoritesListWidget.updateSearch(this, searchTerm); long ended = System.nanoTime(); long time = ended - started; - if (RoughlyEnoughItemsCore.isDebugModeEnabled()) + if (ConfigObject.getInstance().doDebugSearchTimeRequired()) RoughlyEnoughItemsCore.LOGGER.info("[REI] Search Used: %.2fms", time * 1e-6); updateEntriesPosition(); } |
