aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java55
-rw-r--r--src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java2
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java2
-rw-r--r--src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java16
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java2
5 files changed, 52 insertions, 25 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
diff --git a/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java b/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java
index 204ac1e24..f417e0d5f 100644
--- a/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java
+++ b/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java
@@ -166,8 +166,6 @@ public class FluidEntryStack extends AbstractEntryStack {
@Override
public boolean equalsAll(EntryStack stack) {
- if (stack.getType() == Type.ITEM)
- return equalsAll(EntryStack.copyItemToFluid(stack));
if (stack.getType() != Type.FLUID)
return false;
return fluid == stack.getFluid() && (amount == IGNORE_AMOUNT || stack.getAmount() == IGNORE_AMOUNT || amount == stack.getAmount());
diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
index 0b13d74d6..9c723581b 100644
--- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
+++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
@@ -145,8 +145,6 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
@Override
public boolean equalsAll(EntryStack stack) {
- Boolean ifFluid = compareIfFluid(stack, 3);
- if (ifFluid != null) return ifFluid;
if (stack.getType() != Type.ITEM)
return false;
return itemStack.getItem() == stack.getItem() && getAmount() != stack.getAmount() && ItemStack.areTagsEqual(itemStack, stack.getItemStack());
diff --git a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
index 400a28336..1cf5b705f 100644
--- a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
@@ -314,7 +314,7 @@ public class RecipeHelperImpl implements RecipeHelper {
private void startSection(Object[] sectionData, String section) {
sectionData[0] = Util.getMeasuringTimeNano();
sectionData[2] = section;
- RoughlyEnoughItemsCore.LOGGER.debug("Reloading REI: \"%s\"", section);
+ RoughlyEnoughItemsCore.LOGGER.debug("Reloading Section: \"%s\"", section);
}
private void endSection(Object[] sectionData) {
@@ -322,9 +322,9 @@ public class RecipeHelperImpl implements RecipeHelper {
long time = (long) sectionData[1] - (long) sectionData[0];
String section = (String) sectionData[2];
if (time >= 1000000) {
- RoughlyEnoughItemsCore.LOGGER.debug("Reloading REI: \"%s\" done in %.2fms", section, time / 1000000.0F);
+ RoughlyEnoughItemsCore.LOGGER.debug("Reloading Section: \"%s\" done in %.2fms", section, time / 1000000.0F);
} else {
- RoughlyEnoughItemsCore.LOGGER.debug("Reloading REI: \"%s\" done in %.2fμs", section, time / 1000.0F);
+ RoughlyEnoughItemsCore.LOGGER.debug("Reloading Section: \"%s\" done in %.2fμs", section, time / 1000.0F);
}
}
@@ -438,17 +438,25 @@ public class RecipeHelperImpl implements RecipeHelper {
}
});
endSection(sectionData);
- startSection(sectionData, "finalizing");
// Clear Cache
((DisplayHelperImpl) DisplayHelper.getInstance()).resetCache();
ScreenHelper.getOptionalOverlay().ifPresent(overlay -> overlay.shouldReInit = true);
+ startSection(sectionData, "entry-registry-distinct");
+
// Remove duplicate entries
((EntryRegistryImpl) EntryRegistry.getInstance()).distinct();
+
+ endSection(sectionData);
+ startSection(sectionData, "entry-registry-refilter");
+
arePluginsLoading = false;
((EntryRegistryImpl) EntryRegistry.getInstance()).refilter();
+ endSection(sectionData);
+ startSection(sectionData, "finalizing");
+
// Clear Cache Again!
((DisplayHelperImpl) DisplayHelper.getInstance()).resetCache();
ScreenHelper.getOptionalOverlay().ifPresent(overlay -> overlay.shouldReInit = true);
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 0edbb9eab..4bc1d21c0 100644
--- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -158,7 +158,7 @@ public class DefaultPlugin implements REIPluginV0 {
enchantments.add(EntryStack.create(itemStack).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE));
}
}
- entryRegistry.queueRegisterEntryAfter(stack, enchantments);
+ entryRegistry.registerEntriesAfter(stack, enchantments);
for (Fluid fluid : Registry.FLUID) {
if (!fluid.getDefaultState().isEmpty() && fluid.getDefaultState().isStill())
entryRegistry.registerEntry(EntryStack.create(fluid));