From 966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 6 Apr 2021 15:47:20 +0800 Subject: Expose draggable stacks Signed-off-by: shedaniel --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 63 ++++++++++++++++++---- .../rei/impl/client/ClientHelperImpl.java | 2 +- .../shedaniel/rei/impl/client/REIHelperImpl.java | 2 +- .../client/config/entries/FilteringScreen.java | 1 - .../impl/client/gui/ContainerScreenOverlay.java | 12 ++--- .../client/gui/dragging/CurrentDraggingStack.java | 19 ++++--- .../rei/impl/client/gui/widget/EntryWidget.java | 7 +-- .../client/gui/widget/FavoritesListWidget.java | 18 +++---- .../rei/impl/client/gui/widget/TabWidget.java | 7 +-- .../registry/display/DisplayRegistryImpl.java | 30 +++++++---- .../client/registry/screen/ExclusionZonesImpl.java | 4 +- .../client/registry/screen/ScreenRegistryImpl.java | 39 +++++++++++++- .../comparison/ItemComparatorRegistryImpl.java | 15 +++++- .../impl/common/entry/type/EntryRegistryImpl.java | 14 ++++- .../common/fluid/FluidSupportProviderImpl.java | 10 +++- .../rei/impl/common/plugins/PluginManagerImpl.java | 29 +++------- .../impl/common/transfer/MenuInfoRegistryImpl.java | 6 +++ .../impl/common/util/HashedEntryStackWrapper.java | 4 ++ .../plugin/client/DefaultClientRuntimePlugin.java | 15 +++++- .../plugin/client/entry/ItemEntryDefinition.java | 4 +- .../shedaniel/rei/plugin/test/REITestPlugin.java | 4 +- 21 files changed, 212 insertions(+), 93 deletions(-) (limited to 'runtime') diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index b7edd47a7..f0a392e65 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -41,18 +41,26 @@ import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +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.ClickArea; import me.shedaniel.rei.api.client.registry.screen.OverlayDecider; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.entry.type.BuiltinEntryTypes; import me.shedaniel.rei.api.common.entry.type.EntryDefinition; import me.shedaniel.rei.api.common.entry.type.EntryType; +import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry; +import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; import me.shedaniel.rei.api.common.plugins.PluginManager; import me.shedaniel.rei.api.common.plugins.PluginView; import me.shedaniel.rei.api.common.plugins.REIPlugin; import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.impl.Internals; @@ -125,6 +133,7 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; import java.util.function.UnaryOperator; +import java.util.stream.Collectors; import java.util.stream.Stream; @ApiStatus.Internal @@ -207,7 +216,7 @@ public class RoughlyEnoughItemsCore { if (Objects.equals(definition.getType().getId(), BuiltinEntryTypes.EMPTY_ID)) { return empty().cast(); } - + return new TypedEntryStack<>(definition, value); } }, Internals.EntryStackProvider.class); @@ -216,6 +225,15 @@ public class RoughlyEnoughItemsCore { Internals.attachInstanceSupplier(new PluginManagerImpl<>( REIPlugin.class, UnaryOperator.identity(), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d entry types, %d item comparators and %d fluid support providers in %dms.", + REIPlugin.class.getSimpleName(), + EntryTypeRegistry.getInstance().values().size(), + ItemComparatorRegistry.getInstance().comparatorSize(), + FluidSupportProvider.getInstance().size(), + usedTime + ); + }, new EntryTypeRegistryImpl(), new RecipeManagerContextImpl<>(RecipeManagerContextImpl.supplier()), new ItemComparatorRegistryImpl(), @@ -224,6 +242,13 @@ public class RoughlyEnoughItemsCore { Internals.attachInstanceSupplier(new PluginManagerImpl<>( REIServerPlugin.class, view -> view.then(PluginView.getInstance()), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d menu infos in %dms.", + REIServerPlugin.class.getSimpleName(), + MenuInfoRegistry.getInstance().infoSize(), + usedTime + ); + }, new MenuInfoRegistryImpl()), "serverPluginManager"); } @@ -233,7 +258,7 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstance((Supplier>) () -> EmptyEntryDefinition.EmptyRenderer.INSTANCE, "emptyEntryRenderer"); ClientInternals.attachInstance((BiFunction, Supplier, FavoriteEntry>) (supplier, toJson) -> new FavoriteEntry() { FavoriteEntry value = null; - + @Override public FavoriteEntry getUnwrapped() { if (this.value == null) { @@ -241,7 +266,7 @@ public class RoughlyEnoughItemsCore { } return Objects.requireNonNull(value).getUnwrapped(); } - + @Override public UUID getUuid() { return getUnwrapped().getUuid(); @@ -285,16 +310,16 @@ public class RoughlyEnoughItemsCore { public ResourceLocation getType() { return getUnwrapped().getType(); } - + @Override public CompoundTag save(CompoundTag tag) { if (toJson == null) { return getUnwrapped().save(tag); } - + return tag.merge(toJson.get()); } - + @Override public boolean isSame(FavoriteEntry other) { return getUnwrapped().isSame(other.getUnwrapped()); @@ -308,18 +333,18 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstance((BiFunction<@Nullable Point, Collection, Tooltip>) QueuedTooltip::create, "tooltipProvider"); ClientInternals.attachInstance((Function<@Nullable Boolean, ClickArea.Result>) successful -> new ClickArea.Result() { private List> categories = Lists.newArrayList(); - + @Override public ClickArea.Result category(CategoryIdentifier category) { this.categories.add(category); return this; } - + @Override public boolean isSuccessful() { return successful; } - + @Override public Stream> getCategories() { return categories.stream(); @@ -328,6 +353,22 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstanceSupplier(new PluginManagerImpl<>( REIClientPlugin.class, view -> view.then(PluginView.getInstance()), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d entries, %d displays, %d display visibility predicates, %d categories (%s), %d exclusion zones and %d overlay deciders in %dms.", + REIClientPlugin.class.getSimpleName(), + EntryRegistry.getInstance().size(), + DisplayRegistry.getInstance().displaySize(), + DisplayRegistry.getInstance().getVisibilityPredicates().size(), + CategoryRegistry.getInstance().size(), + CategoryRegistry.getInstance().stream() + .map(CategoryRegistry.CategoryConfiguration::getCategory) + .map(DisplayCategory::getTitle) + .map(Component::getString).collect(Collectors.joining(", ")), + ScreenRegistry.getInstance().exclusionZones().getZonesCount(), + ScreenRegistry.getInstance().getDeciders().size(), + usedTime + ); + }, new ViewsImpl(), new SearchProviderImpl(), new ConfigManagerImpl(), @@ -423,7 +464,7 @@ public class RoughlyEnoughItemsCore { } @Environment(EnvType.CLIENT) - private boolean shouldReturn(Screen screen) { + public static boolean shouldReturn(Screen screen) { if (!REIHelper.getInstance().getOverlay().isPresent()) return true; if (screen == null) return true; if (screen != Minecraft.getInstance().screen) return true; @@ -431,7 +472,7 @@ public class RoughlyEnoughItemsCore { } @Environment(EnvType.CLIENT) - private boolean _shouldReturn(Screen screen) { + private static boolean _shouldReturn(Screen screen) { try { Class screenClass = screen.getClass(); for (OverlayDecider decider : ScreenRegistry.getInstance().getDeciders()) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java index abaf8443f..96c9741c6 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java @@ -32,6 +32,7 @@ import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.config.DisplayScreenType; +import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.client.view.Views; @@ -43,7 +44,6 @@ import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.impl.client.gui.screen.CompositeDisplayViewingScreen; import me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen; -import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.impl.client.gui.screen.UncertainDisplayViewingScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java index 568149a11..e9c899a95 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java @@ -34,11 +34,11 @@ import me.shedaniel.rei.api.client.REIOverlay; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; +import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.gui.widgets.TextField; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; -import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java index 0c41f834c..7a6e9f32d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java @@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.config.entries; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java index c2c69f1a4..8abd4ea35 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java @@ -23,7 +23,6 @@ package me.shedaniel.rei.impl.client.gui; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.mojang.blaze3d.platform.Window; @@ -201,22 +200,17 @@ public class ContainerScreenOverlay extends REIOverlay { } @Override - public DraggingContext getDraggingContext() { + public DraggingContext getDraggingContext() { return draggingStack; } - private static Iterable buildWidgetsTree(Iterable listeners, Class type) { - return Widgets.walk(listeners, type::isInstance); - } - public void init(boolean useless) { init(); } public void init() { - Iterable stackProviders = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackProvider.class); - Iterable stackVisitors = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackVisitor.class); - draggingStack.set(DraggableStackProvider.from(() -> stackProviders), DraggableStackVisitor.from(() -> stackVisitors)); + draggingStack.set(DraggableStackProvider.from(() -> ScreenRegistry.getInstance().getDraggableProviders()), + DraggableStackVisitor.from(() -> ScreenRegistry.getInstance().getDraggableVisitors())); this.shouldReload = false; //Update Variables diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java index 4fdbf4976..8086a48cc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java @@ -35,20 +35,22 @@ import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.common.util.Animator; import me.shedaniel.rei.impl.client.gui.widget.LateRenderable; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.Supplier; -public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext { - private DraggableStackProvider provider; - private DraggableStackVisitor visitor; +public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext { + private DraggableStackProvider provider; + private DraggableStackVisitor visitor; @Nullable private DraggableEntry entry; private final List backToOriginals = new ArrayList<>(); - public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) { + public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) { this.provider = provider; this.visitor = visitor; } @@ -119,7 +121,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag private boolean drop() { if (entry != null && entry.dragging) { - Optional acceptor = visitor.visitDraggedStack(entry.stack); + Optional acceptor = visitor.visitDraggedStack(this, entry.stack); entry.stack.release(acceptor.isPresent()); acceptor.ifPresent(a -> a.accept(entry.stack)); entry = null; @@ -130,6 +132,11 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag return false; } + @Override + public Screen getScreen() { + return Minecraft.getInstance().screen; + } + @Override @Nullable public DraggableStack getCurrentStack() { @@ -147,7 +154,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag backToOriginals.add(new RenderBackEntry(stack, initialPosition, position)); } - private class DraggableEntry { + private static class DraggableEntry { private final DraggableStack stack; private final Point start; private boolean dragging = false; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 79ab2d5cc..81cfb1397 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -36,7 +36,7 @@ import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Slot; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; @@ -45,6 +45,7 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.impl.client.REIHelperImpl; import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; @@ -59,7 +60,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -public class EntryWidget extends Slot implements DraggableStackProvider { +public class EntryWidget extends Slot implements DraggableStackProviderWidget { @ApiStatus.Internal public static long stackDisplayOffset = 0; protected static final ResourceLocation RECIPE_GUI = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); @@ -446,7 +447,7 @@ public class EntryWidget extends Slot implements DraggableStackProvider { @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { if (!getCurrentEntry().isEmpty() && containsMouse(mouseX, mouseY)) { return new DraggableStack() { EntryStack stack = getCurrentEntry().copy(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java index d6f45de76..57ccd0b6a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java @@ -42,15 +42,11 @@ import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.REIOverlay; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; -import me.shedaniel.rei.api.client.entry.renderer.BatchEntryRenderer; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.favorites.FavoriteEntryType; import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.api.client.gui.AbstractContainerEventHandler; -import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitor; -import me.shedaniel.rei.api.client.gui.drag.DraggingContext; +import me.shedaniel.rei.api.client.gui.drag.*; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; @@ -87,7 +83,7 @@ import static me.shedaniel.rei.impl.client.gui.widget.EntryListWidget.entrySize; import static me.shedaniel.rei.impl.client.gui.widget.EntryListWidget.notSteppingOnExclusionZones; @ApiStatus.Internal -public class FavoritesListWidget extends WidgetWithBounds implements DraggableStackProvider, DraggableStackVisitor { +public class FavoritesListWidget extends WidgetWithBounds implements DraggableStackProviderWidget, DraggableStackVisitorWidget { protected final ScrollingContainer scrolling = new ScrollingContainer() { @Override public Rectangle getBounds() { @@ -152,7 +148,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { if (innerBounds.contains(mouseX, mouseY)) { for (Entry entry : entries.values()) { if (entry.getWidget().containsMouse(mouseX, mouseY)) { @@ -211,7 +207,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } @Override - public Optional visitDraggedStack(DraggableStack stack) { + public Optional visitDraggedStack(DraggingContext context, DraggableStack stack) { if (innerBounds.contains(PointHelper.ofMouse())) { EntrySerializer serializer = stack.getStack().getDefinition().getSerializer(); if (stack instanceof FavoriteDraggableStack || (serializer.supportReading() && serializer.supportSaving())) { @@ -393,7 +389,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } public int getReleaseIndex() { - DraggingContext context = DraggingContext.getInstance(); + DraggingContext context = DraggingContext.getInstance(); Point position = context.getCurrentPosition(); if (context.isDraggingStack() && currentBounds.contains(position)) { int entrySize = entrySize(); @@ -455,7 +451,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } public void drop(Entry entry, DraggableStack stack, FavoriteEntry favoriteEntry) { - DraggingContext context = DraggingContext.getInstance(); + DraggingContext context = DraggingContext.getInstance(); double x = context.getCurrentPosition().x; double y = context.getCurrentPosition().y; entry.startedDraggingPosition = null; @@ -544,7 +540,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt if (!hidden) { this.hidden = true; if (!ConfigObject.getInstance().isFavoritesAnimated()) this.size.setAs(0); - else this.size.setTo(0, 1000); + else this.size.setTo(0, 400); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java index 90d5f2035..d8cd4566d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java @@ -30,7 +30,7 @@ import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widget; @@ -38,6 +38,7 @@ import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; @@ -49,7 +50,7 @@ import java.util.List; import java.util.function.Predicate; @ApiStatus.Internal -public class TabWidget extends WidgetWithBounds implements DraggableStackProvider { +public class TabWidget extends WidgetWithBounds implements DraggableStackProviderWidget { public static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); public static final ResourceLocation CHEST_GUI_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); @@ -139,7 +140,7 @@ public class TabWidget extends WidgetWithBounds implements DraggableStackProvide @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { if (isShown() && renderer instanceof EntryStack && containsMouse(mouseX, mouseY)) { return new DraggableStack() { EntryStack stack = ((EntryStack) renderer).copy(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java index 1fa56fe0b..04f44839f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java @@ -36,7 +36,6 @@ import me.shedaniel.rei.impl.common.registry.RecipeManagerContextImpl; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.crafting.Recipe; import org.apache.commons.lang3.mutable.MutableInt; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -61,7 +60,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl void registerFiller(Class typeClass, Predicate predicate, Function mappingFunction) { - fillers.add(new DisplayFiller<>(typeClass, (Predicate) predicate, mappingFunction)); + public void registerFiller(Class typeClass, Predicate predicate, Function filler) { + fillers.add(new DisplayFiller<>(typeClass, (Predicate) predicate, filler)); } @Override @@ -153,8 +152,8 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl> allSortedRecipes = getAllSortedRecipes(); for (int i = allSortedRecipes.size() - 1; i >= 0; i--) { Recipe recipe = allSortedRecipes.get(i); - Display display = tryFillDisplay(recipe); - if (display != null) { + Collection displays = tryFillDisplay(recipe); + for (Display display : displays) { registerDisplay(0, display); } } @@ -162,14 +161,23 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl Display tryFillDisplay(T value) { - if (value instanceof Display) return (Display) value; + public Collection tryFillDisplay(T value) { + if (value instanceof Display) return Collections.singleton((Display) value); + List displays = null; for (DisplayFiller filler : fillers) { Display display = tryFillDisplayGenerics(filler, value); - if (display != null) return display; + if (display != null) { + if (displays == null) displays = Collections.singletonList(display); + else { + if (!(displays instanceof ArrayList)) displays = new ArrayList<>(displays); + displays.add(display); + } + } } - return null; + if (displays != null) { + return displays; + } + return Collections.emptyList(); } private D tryFillDisplayGenerics(DisplayFiller filler, Object value) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java index aab52eb01..bbc097d9d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java @@ -58,8 +58,8 @@ public class ExclusionZonesImpl implements ExclusionZones { } @Override - public float getPriority() { - return -5f; + public double getPriority() { + return -5.0; } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java index 941cd8422..026cb405e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java @@ -29,6 +29,11 @@ import com.mojang.blaze3d.platform.Window; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.config.DisplayPanelLocation; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitor; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitorWidget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.screen.*; import me.shedaniel.rei.api.common.category.CategoryIdentifier; @@ -55,6 +60,8 @@ import java.util.stream.Collectors; @Environment(EnvType.CLIENT) public class ScreenRegistryImpl implements ScreenRegistry { private Multimap, ClickArea> clickAreas = HashMultimap.create(); + private List> draggableStacksProviders = new ArrayList<>(); + private List> draggableStacksVisitors = new ArrayList<>(); private List focusedStackProviders = new ArrayList<>(); private List deciders = new ArrayList<>(); private Map, List> cache = new HashMap<>(); @@ -138,8 +145,14 @@ public class ScreenRegistryImpl implements ScreenRegistry { deciders.add(decider); deciders.sort(Comparator.reverseOrder()); clickAreas.clear(); + draggableStacksProviders.clear(); + draggableStacksVisitors.clear(); cache.clear(); tmpScreen = null; + registerDraggableStackProvider(DraggableStackProviderWidget.from(context -> + Widgets.walk(context.getScreen().children(), DraggableStackProviderWidget.class::isInstance))); + registerDraggableStackVisitor(DraggableStackVisitorWidget.from(context -> + Widgets.walk(context.getScreen().children(), DraggableStackVisitorWidget.class::isInstance))); } @Override @@ -148,6 +161,28 @@ public class ScreenRegistryImpl implements ScreenRegistry { focusedStackProviders.sort(Comparator.reverseOrder()); } + @Override + public void registerDraggableStackProvider(DraggableStackProvider provider) { + draggableStacksProviders.add((DraggableStackProvider) provider); + draggableStacksProviders.sort(Comparator.reverseOrder()); + } + + @Override + public void registerDraggableStackVisitor(DraggableStackVisitor visitor) { + draggableStacksVisitors.add((DraggableStackVisitor) visitor); + draggableStacksVisitors.sort(Comparator.reverseOrder()); + } + + @Override + public Iterable> getDraggableProviders() { + return Collections.unmodifiableList(draggableStacksProviders); + } + + @Override + public Iterable> getDraggableVisitors() { + return Collections.unmodifiableList(draggableStacksVisitors); + } + @Override public ExclusionZones exclusionZones() { return exclusionZones; @@ -209,8 +244,8 @@ public class ScreenRegistryImpl implements ScreenRegistry { } @Override - public float getPriority() { - return -10; + public double getPriority() { + return -10.0; } }); registerFocusedStack(new FocusedStackProvider() { 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> stacks) { + public void addEntriesAfter(@Nullable EntryStack afterEntry, Collection> 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>) 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 implements FluidSupportProvider { private final List providers = Lists.newCopyOnWriteArrayList(); + private final List 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 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

> implements PluginManager< private final UnaryOperator> view; private boolean arePluginsLoading = false; private final List> plugins = new ArrayList<>(); + private final LongConsumer reloadDoneListener; @SafeVarargs - public PluginManagerImpl(Class

pluginClass, UnaryOperator> view, Reloadable... reloadables) { + public PluginManagerImpl(Class

pluginClass, UnaryOperator> view, LongConsumer reloadDoneListener, Reloadable... reloadables) { this.pluginClass = pluginClass; this.view = view; + this.reloadDoneListener = reloadDoneListener; for (Reloadable reloadable : reloadables) { registerReloadable(reloadable); } @@ -161,7 +158,7 @@ public class PluginManagerImpl

> implements PluginManager< arePluginsLoading = true; long startTime = Util.getMillis(); MutablePair sectionData = new MutablePair<>(Stopwatch.createUnstarted(), ""); - + for (Reloadable

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

> implements PluginManager< pluginSection(sectionData, "reloadable-plugin-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()), plugins, reloadable::acceptPlugin); } pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister); - + for (Reloadable

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

> 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 @@ -75,9 +75,15 @@ public class MenuInfoRegistryImpl implements MenuInfoRegistry { return null; } + @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 diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java index 3b547fe2f..719f7c775 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java @@ -27,13 +27,18 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.client.ClientHelper; +import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.favorites.FavoriteEntryType; import me.shedaniel.rei.api.client.gui.AbstractRenderer; import me.shedaniel.rei.api.client.gui.Renderer; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitorWidget; import me.shedaniel.rei.api.client.gui.widgets.Panel; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.registry.screen.DisplayBoundsProvider; @@ -95,7 +100,7 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { @Override public void registerEntries(EntryRegistry registry) { if (ClientHelperImpl.getInstance().isAprilFools.get()) { - registry.registerEntry(ClientEntryStacks.of(new AbstractRenderer() { + registry.addEntry(ClientEntryStacks.of(new AbstractRenderer() { private ResourceLocation id = new ResourceLocation("roughlyenoughitems", "textures/gui/kirb.png"); @Override @@ -147,6 +152,14 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { return InteractionResult.SUCCESS; } }); + registry.registerDraggableStackProvider(DraggableStackProviderWidget.from(context -> { + if (RoughlyEnoughItemsCore.shouldReturn(context.getScreen()) || !REIHelper.getInstance().isOverlayVisible()) return Collections.emptyList(); + return Widgets.walk(REIHelper.getInstance().getOverlay().get().children(), DraggableStackProviderWidget.class::isInstance); + })); + registry.registerDraggableStackVisitor(DraggableStackVisitorWidget.from(context -> { + if (RoughlyEnoughItemsCore.shouldReturn(context.getScreen()) || !REIHelper.getInstance().isOverlayVisible()) return Collections.emptyList(); + return Widgets.walk(REIHelper.getInstance().getOverlay().get().children(), DraggableStackVisitorWidget.class::isInstance); + })); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java index 292ca0fb8..453df00c3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java @@ -111,7 +111,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer public long hash(EntryStack entry, ItemStack value, ComparisonContext context) { int code = 1; code = 31 * code + System.identityHashCode(value.getItem()); - code = 31 * code + (context.isFuzzy() ? 0 : Long.hashCode(ItemComparatorRegistry.getInstance().hashOf(value))); + code = 31 * code + Long.hashCode(ItemComparatorRegistry.getInstance().hashOf(context, value)); return code; } @@ -119,7 +119,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer public boolean equals(ItemStack o1, ItemStack o2, ComparisonContext context) { if (o1.getItem() != o2.getItem()) return false; - return context.isFuzzy() || ItemComparatorRegistry.getInstance().hashOf(o1) == ItemComparatorRegistry.getInstance().hashOf(o2); + return ItemComparatorRegistry.getInstance().hashOf(context, o1) == ItemComparatorRegistry.getInstance().hashOf(context, o2); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java index 67d0c7cb5..f0f1dae76 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java @@ -56,10 +56,10 @@ public class REITestPlugin implements REIClientPlugin { int times = 1000; for (Item item : Registry.ITEM) { EntryStack base = EntryStacks.of(item); - registry.registerEntriesAfter(base, IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(item))).collect(Collectors.toList())); + registry.addEntriesAfter(base, IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(item))).collect(Collectors.toList())); try { for (ItemStack stack : registry.appendStacksForItem(item)) { - registry.registerEntries(IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(stack))).collect(Collectors.toList())); + registry.addEntries(IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(stack))).collect(Collectors.toList())); } } catch (Exception ignored) { } -- cgit