aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-07-15 00:43:51 +0800
committershedaniel <daniel@shedaniel.me>2020-07-15 00:43:51 +0800
commit2e880284e37a24ded2275e5e0da216c3930c42fb (patch)
tree4ee16ccf1a23f8fdafc1922d5b0afdb59613aa30 /src/main/java
parente2c264a82dc10b8e29b08225cd5bc24e689fa332 (diff)
downloadRoughlyEnoughItems-2e880284e37a24ded2275e5e0da216c3930c42fb.tar.gz
RoughlyEnoughItems-2e880284e37a24ded2275e5e0da216c3930c42fb.tar.bz2
RoughlyEnoughItems-2e880284e37a24ded2275e5e0da216c3930c42fb.zip
Performance improvements to search filtering and fix filtering not even working.
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java1
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java1
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/entry/ReloadPluginsEntry.java1
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java2
-rw-r--r--src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java12
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java7
-rw-r--r--src/main/java/me/shedaniel/rei/impl/filtering/FilteringContextImpl.java13
-rw-r--r--src/main/java/me/shedaniel/rei/impl/filtering/FilteringResult.java38
-rw-r--r--src/main/java/me/shedaniel/rei/impl/filtering/FilteringResultImpl.java21
-rw-r--r--src/main/java/me/shedaniel/rei/utils/CollectionUtils.java6
10 files changed, 65 insertions, 37 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java b/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java
index f55269f0b..e5d4d903e 100644
--- a/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java
+++ b/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java
@@ -88,6 +88,7 @@ public class FilteringEntry extends AbstractConfigListEntry<List<EntryStack>> {
@Override
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
+ super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
Window window = MinecraftClient.getInstance().getWindow();
this.buttonWidget.active = this.isEditable();
this.buttonWidget.y = y;
diff --git a/src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java b/src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java
index 6d83c91af..303069cd1 100644
--- a/src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java
+++ b/src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java
@@ -74,6 +74,7 @@ public class NoFilteringEntry extends AbstractConfigListEntry<List<EntryStack>>
@Override
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
+ super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
Window window = MinecraftClient.getInstance().getWindow();
this.buttonWidget.active = false;
this.buttonWidget.y = y;
diff --git a/src/main/java/me/shedaniel/rei/gui/config/entry/ReloadPluginsEntry.java b/src/main/java/me/shedaniel/rei/gui/config/entry/ReloadPluginsEntry.java
index 716b4148f..39e955bcc 100644
--- a/src/main/java/me/shedaniel/rei/gui/config/entry/ReloadPluginsEntry.java
+++ b/src/main/java/me/shedaniel/rei/gui/config/entry/ReloadPluginsEntry.java
@@ -79,6 +79,7 @@ public class ReloadPluginsEntry extends AbstractConfigListEntry<Unit> {
@Override
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
+ super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
Window window = MinecraftClient.getInstance().getWindow();
this.buttonWidget.active = this.isEditable();
this.buttonWidget.y = y;
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 85f6e223a..40c972581 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
@@ -529,7 +529,7 @@ public class EntryListWidget extends WidgetWithBounds {
} else {
for (EntryStack stack : stacks) {
if (canLastSearchTermsBeAppliedTo(stack)) {
- if (workingItems != null && workingItems.contains(stack))
+ if (workingItems != null && !workingItems.contains(stack.hashIgnoreAmount()))
continue;
list.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT));
}
diff --git a/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java b/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java
index 42526da97..f5ef2f001 100644
--- a/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java
+++ b/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java
@@ -34,26 +34,20 @@ import java.util.Objects;
@Environment(EnvType.CLIENT)
public class AmountIgnoredEntryStackWrapper {
private final EntryStack stack;
- private int hash = -1390123012;
+ private int hash;
public AmountIgnoredEntryStackWrapper(EntryStack stack) {
this.stack = Objects.requireNonNull(stack);
+ this.hash = stack.hashIgnoreAmount();
}
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- AmountIgnoredEntryStackWrapper that = (AmountIgnoredEntryStackWrapper) o;
- return hashCode() == that.hashCode();
+ return o instanceof AmountIgnoredEntryStackWrapper && hashCode() == o.hashCode();
}
@Override
public int hashCode() {
- if (hash == -1390123012) {
- hash = stack.hashIgnoreAmount();
- }
return hash;
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
index 96c2cfd4a..af2ac018d 100644
--- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
+++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
@@ -253,11 +253,9 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
@Override
public int hashIgnoreAmount() {
- int result = 1;
- result = 31 * result + getType().hashCode();
- result = 31 * result + itemStack.getItem().hashCode();
+ int result = hashIgnoreAmountAndTags();
if (itemStack.hasTag()) {
- result = 31 * result + itemStack.getTag().asString().hashCode();
+ result = 31 * result + itemStack.getTag().toString().hashCode();
} else {
result = 31 * result;
}
@@ -267,7 +265,6 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
@Override
public int hashIgnoreAmountAndTags() {
int result = 1;
- result = 31 * result + getType().hashCode();
result = 31 * result + itemStack.getItem().hashCode();
return result;
}
diff --git a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringContextImpl.java b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringContextImpl.java
index ef13b2c55..f64060569 100644
--- a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringContextImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringContextImpl.java
@@ -47,8 +47,13 @@ public class FilteringContextImpl implements FilteringContext {
private final Map<FilteringContextType, Collection<EntryStack>> cachedStacks;
public FilteringContextImpl(List<EntryStack> allStacks) {
- this(Maps.newHashMap());
- getUnsetStacks().addAll(allStacks);
+ this.stacks = Maps.newHashMap();
+ this.cachedStacks = Maps.newHashMap();
+ for (FilteringContextType type : FilteringContextType.values()) {
+ this.stacks.computeIfAbsent(type, t -> Sets.newHashSet());
+ }
+ this.stacks.get(FilteringContextType.DEFAULT).addAll(CollectionUtils.map(allStacks, AmountIgnoredEntryStackWrapper::new));
+ fillCache();
}
public FilteringContextImpl(Map<FilteringContextType, Set<AmountIgnoredEntryStackWrapper>> stacks) {
@@ -73,8 +78,8 @@ public class FilteringContextImpl implements FilteringContext {
}
public void handleResult(FilteringResult result) {
- Collection<AmountIgnoredEntryStackWrapper> hiddenStacks = CollectionUtils.map(result.getHiddenStacks(), AmountIgnoredEntryStackWrapper::new);
- Collection<AmountIgnoredEntryStackWrapper> shownStacks = CollectionUtils.map(result.getShownStacks(), AmountIgnoredEntryStackWrapper::new);
+ Collection<AmountIgnoredEntryStackWrapper> hiddenStacks = result.getHiddenStacks();
+ Collection<AmountIgnoredEntryStackWrapper> shownStacks = result.getShownStacks();
List<CompletableFuture<Void>> completableFutures = Lists.newArrayList();
completableFutures.add(CompletableFuture.runAsync(() -> {
diff --git a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResult.java b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResult.java
index e0d0df1bc..8f3b93f1e 100644
--- a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResult.java
+++ b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResult.java
@@ -25,13 +25,17 @@ package me.shedaniel.rei.impl.filtering;
import com.google.common.collect.Lists;
import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.impl.AmountIgnoredEntryStackWrapper;
+import me.shedaniel.rei.utils.CollectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import org.jetbrains.annotations.ApiStatus;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Set;
+@Environment(EnvType.CLIENT)
@ApiStatus.Internal
@ApiStatus.Experimental
public interface FilteringResult {
@@ -43,24 +47,46 @@ public interface FilteringResult {
return new FilteringResultImpl(hiddenStacks, shownStacks);
}
- Set<EntryStack> getHiddenStacks();
+ Set<AmountIgnoredEntryStackWrapper> getHiddenStacks();
- Set<EntryStack> getShownStacks();
+ Set<AmountIgnoredEntryStackWrapper> getShownStacks();
default FilteringResult hide(EntryStack stack) {
- return hide(Collections.singletonList(stack));
+ getHiddenStacks().add(new AmountIgnoredEntryStackWrapper(stack));
+ return this;
}
default FilteringResult hide(Collection<EntryStack> stacks) {
- getHiddenStacks().addAll(stacks);
+ getHiddenStacks().addAll(CollectionUtils.map(stacks, AmountIgnoredEntryStackWrapper::new));
return this;
}
default FilteringResult show(EntryStack stack) {
- return show(Collections.singletonList(stack));
+ getShownStacks().add(new AmountIgnoredEntryStackWrapper(stack));
+ return this;
}
default FilteringResult show(Collection<EntryStack> stacks) {
+ getShownStacks().addAll(CollectionUtils.map(stacks, AmountIgnoredEntryStackWrapper::new));
+ return this;
+ }
+
+ default FilteringResult hideW(AmountIgnoredEntryStackWrapper stack) {
+ getHiddenStacks().add(stack);
+ return this;
+ }
+
+ default FilteringResult hideW(Collection<AmountIgnoredEntryStackWrapper> stacks) {
+ getHiddenStacks().addAll(stacks);
+ return this;
+ }
+
+ default FilteringResult showW(AmountIgnoredEntryStackWrapper stack) {
+ getShownStacks().add(stack);
+ return this;
+ }
+
+ default FilteringResult showW(Collection<AmountIgnoredEntryStackWrapper> stacks) {
getShownStacks().addAll(stacks);
return this;
}
diff --git a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResultImpl.java b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResultImpl.java
index a848fcd7d..c62c9dc9a 100644
--- a/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResultImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/filtering/FilteringResultImpl.java
@@ -23,30 +23,33 @@
package me.shedaniel.rei.impl.filtering;
+import com.google.common.collect.Sets;
import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.impl.AmountIgnoredEntryStackWrapper;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
-import java.util.Comparator;
import java.util.List;
import java.util.Set;
-import java.util.TreeSet;
+@Environment(EnvType.CLIENT)
public class FilteringResultImpl implements FilteringResult {
- private final Set<EntryStack> hiddenStacks, shownStacks;
+ private final Set<AmountIgnoredEntryStackWrapper> hiddenStacks, shownStacks;
public FilteringResultImpl(List<EntryStack> hiddenStacks, List<EntryStack> shownStacks) {
- this.hiddenStacks = new TreeSet<>(Comparator.comparing(EntryStack::hashIgnoreAmount));
- this.shownStacks = new TreeSet<>(Comparator.comparing(EntryStack::hashIgnoreAmount));
- this.hiddenStacks.addAll(hiddenStacks);
- this.shownStacks.addAll(shownStacks);
+ this.hiddenStacks = Sets.newHashSetWithExpectedSize(hiddenStacks.size());
+ this.shownStacks = Sets.newHashSetWithExpectedSize(shownStacks.size());
+ hide(hiddenStacks);
+ show(shownStacks);
}
@Override
- public Set<EntryStack> getHiddenStacks() {
+ public Set<AmountIgnoredEntryStackWrapper> getHiddenStacks() {
return hiddenStacks;
}
@Override
- public Set<EntryStack> getShownStacks() {
+ public Set<AmountIgnoredEntryStackWrapper> getShownStacks() {
return shownStacks;
}
}
diff --git a/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java b/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java
index 57b8bf83c..d47d732be 100644
--- a/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java
+++ b/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java
@@ -142,7 +142,7 @@ public class CollectionUtils {
}
public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
- List<R> l = new ArrayList<>(list.size());
+ List<R> l = new ArrayList<>(list.size() + 1);
for (T t : list) {
l.add(function.apply(t));
}
@@ -150,7 +150,7 @@ public class CollectionUtils {
}
public static <T, R> List<R> map(Collection<T> list, Function<T, R> function) {
- List<R> l = new ArrayList<>(list.size());
+ List<R> l = new ArrayList<>(list.size() + 1);
for (T t : list) {
l.add(function.apply(t));
}
@@ -158,7 +158,7 @@ public class CollectionUtils {
}
public static <T, R> List<R> map(T[] list, Function<T, R> function) {
- List<R> l = new ArrayList<>(list.length);
+ List<R> l = new ArrayList<>(list.length + 1);
for (T t : list) {
l.add(function.apply(t));
}