aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl
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
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')
-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
17 files changed, 142 insertions, 77 deletions
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, 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<Class<? extends Screen>, ClickArea<?>> clickAreas = HashMultimap.create();
+ private List<DraggableStackProvider<Screen>> draggableStacksProviders = new ArrayList<>();
+ private List<DraggableStackVisitor<Screen>> draggableStacksVisitors = new ArrayList<>();
private List<FocusedStackProvider> focusedStackProviders = new ArrayList<>();
private List<OverlayDecider> deciders = new ArrayList<>();
private Map<Class<?>, List<OverlayDecider>> 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
@@ -149,6 +162,28 @@ public class ScreenRegistryImpl implements ScreenRegistry {
}
@Override
+ public <T extends Screen> void registerDraggableStackProvider(DraggableStackProvider<T> provider) {
+ draggableStacksProviders.add((DraggableStackProvider<Screen>) provider);
+ draggableStacksProviders.sort(Comparator.reverseOrder());
+ }
+
+ @Override
+ public <T extends Screen> void registerDraggableStackVisitor(DraggableStackVisitor<T> visitor) {
+ draggableStacksVisitors.add((DraggableStackVisitor<Screen>) visitor);
+ draggableStacksVisitors.sort(Comparator.reverseOrder());
+ }
+
+ @Override
+ public Iterable<DraggableStackProvider<Screen>> getDraggableProviders() {
+ return Collections.unmodifiableList(draggableStacksProviders);
+ }
+
+ @Override
+ public Iterable<DraggableStackVisitor<Screen>> 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<? 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/