aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl/common
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-04-06 15:47:20 +0800
committershedaniel <daniel@shedaniel.me>2021-04-06 15:47:20 +0800
commit966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf (patch)
tree7c19b609f1d61f0afde3947742056dbb8b17a396 /runtime/src/main/java/me/shedaniel/rei/impl/common
parent5b0c5838978fc74f783c6dcff2983af4fb97d912 (diff)
downloadRoughlyEnoughItems-966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf.tar.gz
RoughlyEnoughItems-966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf.tar.bz2
RoughlyEnoughItems-966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf.zip
Expose draggable stacks
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/common')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java29
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/util/HashedEntryStackWrapper.java4
6 files changed, 51 insertions, 27 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
index 44614c8c9..e6d462cfd 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.impl.common.entry.comparison;
+import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparator;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
@@ -60,11 +61,21 @@ public class ItemComparatorRegistryImpl implements ItemComparatorRegistry {
}
@Override
- public long hashOf(ItemStack stack) {
+ public long hashOf(ComparisonContext context, ItemStack stack) {
ItemComparator comparator = comparators.get(stack.getItem());
if (comparator != null) {
- return comparator.hash(stack);
+ return comparator.hash(context, stack);
}
return 1;
}
+
+ @Override
+ public boolean containsComparator(Item item) {
+ return comparators.containsKey(item);
+ }
+
+ @Override
+ public int comparatorSize() {
+ return this.comparators.size();
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
index ab584ac21..0275db9a4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
@@ -49,6 +49,7 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.*;
+import java.util.function.LongPredicate;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -153,7 +154,7 @@ public class EntryRegistryImpl implements EntryRegistry {
}
@Override
- public void registerEntryAfter(@Nullable EntryStack<?> afterEntry, EntryStack<?> stack) {
+ public void addEntryAfter(@Nullable EntryStack<?> afterEntry, EntryStack<?> stack) {
if (reloading) {
int index = afterEntry != null ? reloadingRegistry.lastIndexOf(new HashedEntryStackWrapper(afterEntry)) : -1;
if (index >= 0) {
@@ -168,7 +169,7 @@ public class EntryRegistryImpl implements EntryRegistry {
}
@Override
- public void registerEntriesAfter(@Nullable EntryStack<?> afterEntry, Collection<? extends EntryStack<?>> stacks) {
+ public void addEntriesAfter(@Nullable EntryStack<?> afterEntry, Collection<? extends EntryStack<?>> stacks) {
if (reloading) {
int index = afterEntry != null ? reloadingRegistry.lastIndexOf(new HashedEntryStackWrapper(afterEntry)) : -1;
if (index >= 0) {
@@ -207,4 +208,13 @@ public class EntryRegistryImpl implements EntryRegistry {
return entries.removeIf((Predicate<EntryStack<?>>) predicate);
}
}
+
+ @Override
+ public boolean removeEntryExactHashIf(LongPredicate predicate) {
+ if (reloading) {
+ return reloadingRegistry.removeIf(wrapper -> predicate.test(wrapper.hashExact()));
+ } else {
+ return entries.removeIf(stack -> predicate.test(EntryStacks.hashExact(stack)));
+ }
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
index 5475d92c4..736b38e3e 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.impl.common.fluid;
+import com.google.common.collect.ForwardingList;
import com.google.common.collect.Lists;
import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.rei.api.common.entry.EntryStack;
@@ -34,14 +35,16 @@ import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;
@ApiStatus.Internal
-public class FluidSupportProviderImpl implements FluidSupportProvider {
+public class FluidSupportProviderImpl extends ForwardingList<FluidSupportProvider.Provider> implements FluidSupportProvider {
private final List<Provider> providers = Lists.newCopyOnWriteArrayList();
+ private final List<Provider> immutable = Collections.unmodifiableList(providers);
@Override
public void acceptPlugin(REIPlugin<?> plugin) {
@@ -74,4 +77,9 @@ public class FluidSupportProviderImpl implements FluidSupportProvider {
}
return Optional.empty();
}
+
+ @Override
+ protected List<Provider> delegate() {
+ return immutable;
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
index bc4114379..a9ac12590 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
@@ -28,11 +28,7 @@ import com.google.common.base.Stopwatch;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
-import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
-import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
-import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry;
-import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry;
import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.api.common.plugins.PluginView;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
@@ -42,7 +38,6 @@ import me.shedaniel.rei.api.common.util.CollectionUtils;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.Util;
-import net.minecraft.network.chat.Component;
import org.apache.commons.lang3.tuple.MutablePair;
import org.jetbrains.annotations.ApiStatus;
@@ -50,8 +45,8 @@ import java.io.Closeable;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
+import java.util.function.LongConsumer;
import java.util.function.UnaryOperator;
-import java.util.stream.Collectors;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
@@ -62,11 +57,13 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
private final UnaryOperator<PluginView<P>> view;
private boolean arePluginsLoading = false;
private final List<REIPluginProvider<P>> plugins = new ArrayList<>();
+ private final LongConsumer reloadDoneListener;
@SafeVarargs
- public PluginManagerImpl(Class<P> pluginClass, UnaryOperator<PluginView<P>> view, Reloadable<? extends P>... reloadables) {
+ public PluginManagerImpl(Class<P> pluginClass, UnaryOperator<PluginView<P>> view, LongConsumer reloadDoneListener, Reloadable<? extends P>... reloadables) {
this.pluginClass = pluginClass;
this.view = view;
+ this.reloadDoneListener = reloadDoneListener;
for (Reloadable<? extends P> reloadable : reloadables) {
registerReloadable(reloadable);
}
@@ -161,7 +158,7 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
arePluginsLoading = true;
long startTime = Util.getMillis();
MutablePair<Stopwatch, String> sectionData = new MutablePair<>(Stopwatch.createUnstarted(), "");
-
+
for (Reloadable<P> reloadable : reloadables) {
Class<?> reloadableClass = reloadable.getClass();
try (SectionClosable startReload = section(sectionData, "start-reload-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()))) {
@@ -182,7 +179,7 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
pluginSection(sectionData, "reloadable-plugin-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()), plugins, reloadable::acceptPlugin);
}
pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister);
-
+
for (Reloadable<P> reloadable : reloadables) {
Class<?> reloadableClass = reloadable.getClass();
try (SectionClosable endReload = section(sectionData, "end-reload-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()))) {
@@ -197,19 +194,7 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
}
long usedTime = Util.getMillis() - startTime;
- RoughlyEnoughItemsCore.LOGGER.info("Reloaded %d stack entries, %d displays, %d exclusion zones suppliers, %d overlay deciders, %d visibility predicates and %d categories (%s) in %dms.",
- EntryRegistry.getInstance().size(),
- DisplayRegistry.getInstance().getDisplayCount(),
- ScreenRegistry.getInstance().exclusionZones().getZonesCount(),
- ScreenRegistry.getInstance().getDeciders().size(),
- DisplayRegistry.getInstance().getVisibilityPredicates().size(),
- CategoryRegistry.getInstance().size(),
- CategoryRegistry.getInstance().stream()
- .map(CategoryRegistry.CategoryConfiguration::getCategory)
- .map(DisplayCategory::getTitle)
- .map(Component::getString).collect(Collectors.joining(", ")),
- usedTime
- );
+ reloadDoneListener.accept(usedTime);
} catch (Throwable throwable) {
throwable.printStackTrace();
} finally {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
index 218622def..b6760a424 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
@@ -76,8 +76,14 @@ public class MenuInfoRegistryImpl implements MenuInfoRegistry {
}
@Override
+ public int infoSize() {
+ return map.size() + mapGeneric.size();
+ }
+
+ @Override
public void startReload() {
map.clear();
+ mapGeneric.clear();
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/util/HashedEntryStackWrapper.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/util/HashedEntryStackWrapper.java
index 2e8fc2098..b7ca0ee52 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/util/HashedEntryStackWrapper.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/util/HashedEntryStackWrapper.java
@@ -61,4 +61,8 @@ public class HashedEntryStackWrapper {
public EntryStack<?> unwrap() {
return stack;
}
+
+ public long hashExact() {
+ return hash;
+ }
} \ No newline at end of file