aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-05-27 00:02:53 +0800
committershedaniel <daniel@shedaniel.me>2020-05-27 00:30:17 +0800
commit5ba1e2fd5b50636a887c93d848994fded6e27d0f (patch)
treed4f25a434b74df4722e0f1c08d4c2fadd1f107d5 /src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java
parent31691eb26c42c505a959ecaadf59089876d4f706 (diff)
downloadRoughlyEnoughItems-5ba1e2fd5b50636a887c93d848994fded6e27d0f.tar.gz
RoughlyEnoughItems-5ba1e2fd5b50636a887c93d848994fded6e27d0f.tar.bz2
RoughlyEnoughItems-5ba1e2fd5b50636a887c93d848994fded6e27d0f.zip
Fix nbt entries for entry registry
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java')
-rw-r--r--src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java55
1 files changed, 39 insertions, 16 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java
index 6aa59e42c..5dfa05331 100644
--- a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java
@@ -39,13 +39,13 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.*;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
@ApiStatus.Internal
public class EntryRegistryImpl implements EntryRegistry {
- private final CopyOnWriteArrayList<EntryStack> preFilteredList = Lists.newCopyOnWriteArrayList();
- private final CopyOnWriteArrayList<EntryStack> entries = Lists.newCopyOnWriteArrayList();
+ private final List<EntryStack> preFilteredList = Lists.newCopyOnWriteArrayList();
+ private final List<EntryStack> entries = Lists.newCopyOnWriteArrayList();
private final Queue<Pair<EntryStack, Collection<? extends EntryStack>>> queueRegisterEntryStackAfter = Queues.newConcurrentLinkedQueue();
private List<EntryStack> reloadList;
private boolean doingDistinct = false;
@@ -61,30 +61,53 @@ public class EntryRegistryImpl implements EntryRegistry {
public void distinct() {
preFilteredList.clear();
doingDistinct = true;
- Set<EntryStack> set = Sets.newLinkedHashSet();
- set.addAll(reloadList);
- entries.clear();
- entries.addAll(set);
- entries.removeIf(EntryStack::isEmpty);
- reloadList.clear();
while (true) {
Pair<EntryStack, Collection<? extends EntryStack>> pair = queueRegisterEntryStackAfter.poll();
if (pair == null)
break;
registerEntriesAfter(pair.getLeft(), pair.getRight());
}
- set.clear();
- set.addAll(entries);
- set.removeIf(EntryStack::isEmpty);
- entries.clear();
- entries.addAll(set);
- set.clear();
doingDistinct = false;
+ Set<EntryStackWrapper> set = Sets.newLinkedHashSet();
+ set.addAll(reloadList.stream().map(EntryStackWrapper::new).collect(Collectors.toList()));
+ set.removeIf(EntryStackWrapper::isEmpty);
+ entries.clear();
+ entries.addAll(set.stream().map(EntryStackWrapper::unwrap).collect(Collectors.toList()));
+ }
+
+ private static class EntryStackWrapper {
+ private final EntryStack stack;
+
+ public EntryStackWrapper(EntryStack stack) {
+ this.stack = Objects.requireNonNull(stack);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ EntryStackWrapper that = (EntryStackWrapper) o;
+ return stack.equalsAll(that.stack);
+ }
+
+ @Override
+ public int hashCode() {
+ return stack.hashCode();
+ }
+
+ public boolean isEmpty() {
+ return stack.isEmpty();
+ }
+
+ public EntryStack unwrap() {
+ return stack;
+ }
}
@Override
public List<EntryStack> getStacksList() {
- return RecipeHelper.getInstance().arePluginsLoading() && !doingDistinct ? reloadList : entries;
+ return RecipeHelper.getInstance().arePluginsLoading() || doingDistinct ? reloadList : entries;
}
@Override