aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java63
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java19
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java30
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java39
-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
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java4
21 files changed, 212 insertions, 93 deletions
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<EntryRenderer<?>>) () -> EmptyEntryDefinition.EmptyRenderer.INSTANCE, "emptyEntryRenderer");
ClientInternals.attachInstance((BiFunction<Supplier<FavoriteEntry>, Supplier<CompoundTag>, 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<Component>, Tooltip>) QueuedTooltip::create, "tooltipProvider");
ClientInternals.attachInstance((Function<@Nullable Boolean, ClickArea.Result>) successful -> new ClickArea.Result() {
private List<CategoryIdentifier<?>> 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<CategoryIdentifier<?>> 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<? extends Screen> 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 <T> Iterable<T> buildWidgetsTree(Iterable<? extends GuiEventListener> listeners, Class<T> type) {
- return Widgets.walk(listeners, type::isInstance);
- }
-
public void init(boolean useless) {
init();
}
public void init() {
- Iterable<DraggableStackProvider> stackProviders = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackProvider.class);
- Iterable<DraggableStackVisitor> 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<Screen> {
+ private DraggableStackProvider<Screen> provider;
+ private DraggableStackVisitor<Screen> visitor;
@Nullable
private DraggableEntry entry;
private final List<RenderBackEntry> backToOriginals = new ArrayList<>();
- public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) {
+ public void set(DraggableStackProvider<Screen> provider, DraggableStackVisitor<Screen> 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<DraggableStackVisitor.Acceptor> acceptor = visitor.visitDraggedStack(entry.stack);
+ Optional<DraggableStackVisitor.Acceptor> acceptor = visitor.visitDraggedStack(this, entry.stack);
entry.stack.release(acceptor.isPresent());
acceptor.ifPresent(a -> a.accept(entry.stack));
entry = null;
@@ -131,6 +133,11 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag
}
@Override
+ public Screen getScreen() {
+ return Minecraft.getInstance().screen;
+ }
+
+ @Override
@Nullable
public DraggableStack getCurrentStack() {
return entry != null && entry.dragging ? entry.stack : null;
@@ -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<Screen> 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<Screen> 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<Acceptor> visitDraggedStack(DraggableStack stack) {
+ public Optional<DraggableStackVisitor.Acceptor> visitDraggedStack(DraggingContext<Screen> 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<Screen> 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<REIClientPlugi
}
@Override
- public int getDisplayCount() {
+ public int displaySize() {
return displayCount.getValue();
}
@@ -133,8 +132,8 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi
}
@Override
- public <T, D extends Display> void registerFiller(Class<T> typeClass, Predicate<? extends T> predicate, Function<T, D> mappingFunction) {
- fillers.add(new DisplayFiller<>(typeClass, (Predicate<T>) predicate, mappingFunction));
+ public <T, D extends Display> void registerFiller(Class<T> typeClass, Predicate<? extends T> predicate, Function<T, D> filler) {
+ fillers.add(new DisplayFiller<>(typeClass, (Predicate<T>) predicate, filler));
}
@Override
@@ -153,8 +152,8 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi
List<Recipe<?>> allSortedRecipes = getAllSortedRecipes();
for (int i = allSortedRecipes.size() - 1; i >= 0; i--) {
Recipe<?> recipe = allSortedRecipes.get(i);
- Display display = tryFillDisplay(recipe);
- if (display != null) {
+ Collection<Display> displays = tryFillDisplay(recipe);
+ for (Display display : displays) {
registerDisplay(0, display);
}
}
@@ -162,14 +161,23 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi
}
@Override
- @Nullable
- public <T> Display tryFillDisplay(T value) {
- if (value instanceof Display) return (Display) value;
+ public <T> Collection<Display> tryFillDisplay(T value) {
+ if (value instanceof Display) return Collections.singleton((Display) value);
+ List<Display> 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 <T, D extends Display> D tryFillDisplayGenerics(DisplayFiller<T, D> filler,