aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/gui/widget
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-02-18 18:15:30 +0800
committershedaniel <daniel@shedaniel.me>2020-02-18 18:15:30 +0800
commita70fbdbde00410a732d1bdc5cee3f0a6d8048675 (patch)
treeaef2891a89ce6be5f0806cd9f9b17f8f5635ca16 /src/main/java/me/shedaniel/rei/gui/widget
parentbbf531e70a04d2cbaa894f3ad2e6fe8d3d569efc (diff)
downloadRoughlyEnoughItems-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.java47
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();
}