aboutsummaryrefslogtreecommitdiff
path: root/runtime/src
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java90
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java28
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java45
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java38
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java41
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java7
14 files changed, 174 insertions, 133 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 312957985..1edb3c221 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -34,7 +34,7 @@ import me.shedaniel.architectury.registry.ReloadListeners;
import me.shedaniel.architectury.utils.Env;
import me.shedaniel.math.Point;
import me.shedaniel.rei.api.client.REIHelper;
-import me.shedaniel.rei.api.client.REIOverlay;
+import me.shedaniel.rei.api.client.overlay.ScreenOverlay;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
@@ -52,7 +52,6 @@ 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.EntryComparatorRegistry;
import me.shedaniel.rei.api.common.entry.comparison.FluidComparatorRegistry;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.common.entry.type.BuiltinEntryTypes;
@@ -87,7 +86,6 @@ import me.shedaniel.rei.impl.common.display.DisplaySerializerRegistryImpl;
import me.shedaniel.rei.impl.common.entry.EmptyEntryStack;
import me.shedaniel.rei.impl.common.entry.EntryIngredientImpl;
import me.shedaniel.rei.impl.common.entry.TypedEntryStack;
-import me.shedaniel.rei.impl.common.entry.comparison.EntryComparatorRegistryImpl;
import me.shedaniel.rei.impl.common.entry.comparison.FluidComparatorRegistryImpl;
import me.shedaniel.rei.impl.common.entry.comparison.ItemComparatorRegistryImpl;
import me.shedaniel.rei.impl.common.entry.comparison.NbtHasherProviderImpl;
@@ -609,7 +607,7 @@ public class RoughlyEnoughItemsCore {
@Environment(EnvType.CLIENT)
private boolean resetFocused(Screen screen) {
- if (screen.getFocused() instanceof REIOverlay || screen.getFocused() == screen) {
+ if (screen.getFocused() instanceof ScreenOverlay || screen.getFocused() == screen) {
screen.setFocused(null);
}
return true;
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 659a410f2..849856165 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
@@ -45,6 +45,7 @@ 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.impl.client.gui.screen.UncertainDisplayViewingScreen;
+import me.shedaniel.rei.impl.client.view.ViewsImpl;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
@@ -63,7 +64,6 @@ import org.jetbrains.annotations.Nullable;
import java.time.LocalDateTime;
import java.util.*;
-import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -103,7 +103,7 @@ public class ClientHelperImpl implements ClientHelper {
return (ClientHelperImpl) ClientHelper.getInstance();
}
- public boolean hasPermissionToUsePackets() {
+ public boolean hasPermissionToUsePackets() {
try {
Minecraft.getInstance().getConnection().getSuggestionsProvider().hasPermission(0);
return hasOperatorPermission() && canUsePackets();
@@ -223,8 +223,15 @@ public class ClientHelperImpl implements ClientHelper {
}
@ApiStatus.Internal
- public void openRecipeViewingScreen(Map<DisplayCategory<?>, List<Display>> map, @Nullable CategoryIdentifier<?> category, @Nullable EntryStack<?> ingredientNotice, @Nullable EntryStack<?> resultNotice) {
- openView(new LegacyWrapperViewSearchBuilder(map).setPreferredOpenedCategory(category).setInputNotice(ingredientNotice).setOutputNotice(resultNotice).fillPreferredOpenedCategory());
+ public void openRecipeViewingScreen(Map<DisplayCategory<?>, List<Display>> map, @Nullable CategoryIdentifier<?> category, List<EntryStack<?>> ingredientNotice, List<EntryStack<?>> resultNotice) {
+ LegacyWrapperViewSearchBuilder builder = new LegacyWrapperViewSearchBuilder(map);
+ for (EntryStack<?> stack : ingredientNotice) {
+ builder.addInputNotice(stack);
+ }
+ for (EntryStack<?> stack : resultNotice) {
+ builder.addOutputNotice(stack);
+ }
+ openView(builder.setPreferredOpenedCategory(category));
}
@Override
@@ -244,11 +251,11 @@ public class ClientHelperImpl implements ClientHelper {
screen = new DefaultDisplayViewingScreen(map, builder.getPreferredOpenedCategory());
}
if (screen instanceof DisplayScreen) {
- if (builder.getInputNotice() != null) {
- ((DisplayScreen) screen).setIngredientStackToNotice(builder.getInputNotice());
+ for (EntryStack<?> stack : builder.getUsagesFor()) {
+ ((DisplayScreen) screen).addIngredientToNotice(stack);
}
- if (builder.getOutputNotice() != null) {
- ((DisplayScreen) screen).setResultStackToNotice(builder.getOutputNotice());
+ for (EntryStack<?> stack : builder.getRecipesFor()) {
+ ((DisplayScreen) screen).addResultToNotice(stack);
}
}
if (Minecraft.getInstance().screen instanceof DisplayScreen) {
@@ -269,7 +276,6 @@ public class ClientHelperImpl implements ClientHelper {
}
private static abstract class AbstractViewSearchBuilder implements ViewSearchBuilder {
- @Override
public ViewSearchBuilder fillPreferredOpenedCategory() {
if (getPreferredOpenedCategory() == null) {
Screen currentScreen = Minecraft.getInstance().screen;
@@ -285,10 +291,9 @@ public class ClientHelperImpl implements ClientHelper {
private final Set<CategoryIdentifier<?>> categories = new HashSet<>();
private final List<EntryStack<?>> recipesFor = new ArrayList<>();
private final List<EntryStack<?>> usagesFor = new ArrayList<>();
- @Nullable private CategoryIdentifier<?> preferredOpenedCategory = null;
- @Nullable private EntryStack<?> inputNotice;
- @Nullable private EntryStack<?> outputNotice;
- private final LazyLoadedValue<Map<DisplayCategory<?>, List<Display>>> map = new LazyLoadedValue<>(() -> Views.getInstance().buildMapFor(this));
+ @Nullable
+ private CategoryIdentifier<?> preferredOpenedCategory = null;
+ private final LazyLoadedValue<Map<DisplayCategory<?>, List<Display>>> map = new LazyLoadedValue<>(() -> ((ViewsImpl) Views.getInstance()).buildMapFor(this));
@Override
public ViewSearchBuilder addCategory(CategoryIdentifier<?> category) {
@@ -342,40 +347,20 @@ public class ClientHelperImpl implements ClientHelper {
}
@Override
- public <T> ViewSearchBuilder setInputNotice(@Nullable EntryStack<T> stack) {
- this.inputNotice = stack;
- return this;
- }
-
- @Nullable
- @Override
- public EntryStack<?> getInputNotice() {
- return inputNotice;
- }
-
- @Override
- public <T> ViewSearchBuilder setOutputNotice(@Nullable EntryStack<T> stack) {
- this.outputNotice = stack;
- return this;
- }
-
- @Nullable
- @Override
- public EntryStack<?> getOutputNotice() {
- return outputNotice;
- }
-
- @Override
public Map<DisplayCategory<?>, List<Display>> buildMap() {
+ fillPreferredOpenedCategory();
return this.map.get();
}
}
public static final class LegacyWrapperViewSearchBuilder extends AbstractViewSearchBuilder {
private final Map<DisplayCategory<?>, List<Display>> map;
- @Nullable private CategoryIdentifier<?> preferredOpenedCategory = null;
- @Nullable private EntryStack<?> inputNotice;
- @Nullable private EntryStack<?> outputNotice;
+ @Nullable
+ private EntryStack<?> inputNotice;
+ @Nullable
+ private EntryStack<?> outputNotice;
+ @Nullable
+ private CategoryIdentifier<?> preferredOpenedCategory = null;
public LegacyWrapperViewSearchBuilder(Map<DisplayCategory<?>, List<Display>> map) {
this.map = map;
@@ -403,7 +388,7 @@ public class ClientHelperImpl implements ClientHelper {
@Override
public List<EntryStack<?>> getRecipesFor() {
- return Collections.emptyList();
+ return inputNotice == null ? Collections.emptyList() : Collections.singletonList(outputNotice);
}
@Override
@@ -413,7 +398,7 @@ public class ClientHelperImpl implements ClientHelper {
@Override
public List<EntryStack<?>> getUsagesFor() {
- return Collections.emptyList();
+ return inputNotice == null ? Collections.emptyList() : Collections.singletonList(inputNotice);
}
@Override
@@ -421,39 +406,26 @@ public class ClientHelperImpl implements ClientHelper {
this.preferredOpenedCategory = category;
return this;
}
-
+
@Override
@Nullable
public CategoryIdentifier<?> getPreferredOpenedCategory() {
return this.preferredOpenedCategory;
}
- @Override
- public <T> ViewSearchBuilder setInputNotice(@Nullable EntryStack<T> stack) {
+ public <T> LegacyWrapperViewSearchBuilder addInputNotice(@Nullable EntryStack<T> stack) {
this.inputNotice = stack;
return this;
}
- @Nullable
- @Override
- public EntryStack<?> getInputNotice() {
- return inputNotice;
- }
-
- @Override
- public <T> ViewSearchBuilder setOutputNotice(@Nullable EntryStack<T> stack) {
+ public <T> LegacyWrapperViewSearchBuilder addOutputNotice(@Nullable EntryStack<T> stack) {
this.outputNotice = stack;
return this;
}
- @Nullable
- @Override
- public EntryStack<?> getOutputNotice() {
- return outputNotice;
- }
-
@Override
public Map<DisplayCategory<?>, List<Display>> buildMap() {
+ fillPreferredOpenedCategory();
return this.map;
}
}
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 fc91a3bc5..4f44c5fe4 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
@@ -30,7 +30,7 @@ import me.shedaniel.architectury.event.events.GuiEvent;
import me.shedaniel.architectury.event.events.client.ClientTickEvent;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.REIHelper;
-import me.shedaniel.rei.api.client.REIOverlay;
+import me.shedaniel.rei.api.client.overlay.ScreenOverlay;
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;
@@ -126,7 +126,7 @@ public class REIHelperImpl implements REIHelper {
}
@Override
- public Optional<REIOverlay> getOverlay(boolean reset) {
+ public Optional<ScreenOverlay> getOverlay(boolean reset) {
if (overlay == null || reset) {
overlay = new ContainerScreenOverlay();
overlay.init();
@@ -207,13 +207,13 @@ public class REIHelperImpl implements REIHelper {
@Override
public void startReload() {
- getOverlay().ifPresent(REIOverlay::queueReloadOverlay);
+ getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay);
lastDisplayScreen.clear();
}
@Override
public void endReload() {
- getOverlay().ifPresent(REIOverlay::queueReloadOverlay);
+ getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay);
}
public void onInitializeClient() {
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 ed321c055..f25bb13da 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
@@ -34,7 +34,8 @@ import me.shedaniel.math.Rectangle;
import me.shedaniel.math.impl.PointHelper;
import me.shedaniel.rei.api.client.ClientHelper;
import me.shedaniel.rei.api.client.REIHelper;
-import me.shedaniel.rei.api.client.REIOverlay;
+import me.shedaniel.rei.api.client.overlay.OverlayListWidget;
+import me.shedaniel.rei.api.client.overlay.ScreenOverlay;
import me.shedaniel.rei.api.client.config.ConfigManager;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
@@ -99,7 +100,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
@ApiStatus.Internal
-public class ContainerScreenOverlay extends REIOverlay {
+public class ContainerScreenOverlay extends ScreenOverlay {
private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png");
private static final List<Tooltip> TOOLTIPS = Lists.newArrayList();
private static final List<Runnable> AFTER_RENDER = Lists.newArrayList();
@@ -211,7 +212,7 @@ public class ContainerScreenOverlay extends REIOverlay {
public void init() {
Argument.SEARCH_CACHE.clear();
- draggingStack.set(DraggableStackProvider.from(() -> ScreenRegistry.getInstance().getDraggableProviders()),
+ draggingStack.set(DraggableStackProvider.from(() -> ScreenRegistry.getInstance().getDraggableProviders()),
DraggableStackVisitor.from(() -> ScreenRegistry.getInstance().getDraggableVisitors()));
this.shouldReload = false;
@@ -254,7 +255,7 @@ public class ContainerScreenOverlay extends REIOverlay {
.tooltipLine(new TranslatableComponent("text.rei.next_page"))
.focusable(false));
}
-
+
final Rectangle configButtonArea = getConfigButtonArea();
widgets.add(configButton = InternalWidgets.wrapLateRenderable(
Widgets.withTranslate(
@@ -683,9 +684,9 @@ public class ContainerScreenOverlay extends REIOverlay {
if (stack != null && !stack.isEmpty()) {
stack = stack.copy();
if (ConfigObject.getInstance().getRecipeKeybind().matchesKey(keyCode, scanCode)) {
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addRecipesFor(stack).setOutputNotice(stack).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addRecipesFor(stack).open();
} else if (ConfigObject.getInstance().getUsageKeybind().matchesKey(keyCode, scanCode)) {
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addUsagesFor(stack).setInputNotice(stack).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry)) {
@@ -744,9 +745,9 @@ public class ContainerScreenOverlay extends REIOverlay {
if (stack != null && !stack.isEmpty()) {
stack = stack.copy();
if (ConfigObject.getInstance().getRecipeKeybind().matchesMouse(button)) {
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addRecipesFor(stack).setOutputNotice(stack).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addRecipesFor(stack).open();
} else if (ConfigObject.getInstance().getUsageKeybind().matchesMouse(button)) {
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addUsagesFor(stack).setInputNotice(stack).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (visible && ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry)) {
@@ -784,7 +785,7 @@ public class ContainerScreenOverlay extends REIOverlay {
};
Set<CategoryIdentifier<?>> categories = ScreenRegistry.getInstance().handleClickArea((Class<Screen>) screen.getClass(), context);
if (categories != null && !categories.isEmpty()) {
- ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addCategories(categories).fillPreferredOpenedCategory());
+ ViewSearchBuilder.builder().addCategories(categories).open();
Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
return true;
}
@@ -837,4 +838,13 @@ public class ContainerScreenOverlay extends REIOverlay {
return isInside(point.getX(), point.getY());
}
+ @Override
+ public OverlayListWidget getEntryList() {
+ return ENTRY_LIST_WIDGET;
+ }
+
+ @Override
+ public Optional<OverlayListWidget> getFavoritesList() {
+ return Optional.ofNullable(getFavoritesListWidget());
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
index fe057c8f1..ae5646af4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
@@ -41,14 +41,16 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
public abstract class AbstractDisplayViewingScreen extends Screen implements DisplayScreen {
protected final Map<DisplayCategory<?>, List<Display>> categoryMap;
protected final List<DisplayCategory<?>> categories;
- protected EntryStack<?> ingredientStackToNotice = EntryStack.empty();
- protected EntryStack<?> resultStackToNotice = EntryStack.empty();
+ protected List<EntryStack<?>> ingredientStackToNotice = new ArrayList<>();
+ protected List<EntryStack<?>> resultStackToNotice = new ArrayList<>();
protected int selectedCategoryIndex = 0;
protected int tabsPerPage;
protected Rectangle bounds;
@@ -79,23 +81,23 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis
}
@Override
- public void setIngredientStackToNotice(EntryStack<?> stack) {
- this.ingredientStackToNotice = stack;
+ public void addIngredientToNotice(EntryStack<?> stack) {
+ this.ingredientStackToNotice.add(stack);
}
@Override
- public void setResultStackToNotice(EntryStack<?> stack) {
- this.resultStackToNotice = stack;
+ public void addResultToNotice(EntryStack<?> stack) {
+ this.resultStackToNotice.add(stack);
}
@Override
- public EntryStack<?> getIngredientStackToNotice() {
- return ingredientStackToNotice;
+ public List<EntryStack<?>> getIngredientsToNotice() {
+ return Collections.unmodifiableList(ingredientStackToNotice);
}
@Override
- public EntryStack<?> getResultStackToNotice() {
- return resultStackToNotice;
+ public List<EntryStack<?>> getResultsToNotice() {
+ return Collections.unmodifiableList(resultStackToNotice);
}
@Override
@@ -121,23 +123,26 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis
ClientHelperImpl.getInstance().openRecipeViewingScreen(categoryMap, categories.get(currentCategoryIndex).getCategoryIdentifier(), ingredientStackToNotice, resultStackToNotice);
}
- protected void transformIngredientNotice(List<Widget> setupDisplay, EntryStack<?> noticeStack) {
- transformNotice(Slot.INPUT, setupDisplay, noticeStack);
+ protected void transformIngredientNotice(List<Widget> setupDisplay, List<EntryStack<?>> noticeStacks) {
+ transformNotice(Slot.INPUT, setupDisplay, noticeStacks);
}
- protected void transformResultNotice(List<Widget> setupDisplay, EntryStack<?> noticeStack) {
- transformNotice(Slot.OUTPUT, setupDisplay, noticeStack);
+ protected void transformResultNotice(List<Widget> setupDisplay, List<EntryStack<?>> noticeStacks) {
+ transformNotice(Slot.OUTPUT, setupDisplay, noticeStacks);
}
- private static void transformNotice(int marker, List<? extends GuiEventListener> setupDisplay, EntryStack<?> noticeStack) {
- if (noticeStack.isEmpty())
+ private static void transformNotice(int marker, List<? extends GuiEventListener> setupDisplay, List<EntryStack<?>> noticeStacks) {
+ if (noticeStacks.isEmpty())
return;
for (EntryWidget widget : Widgets.<EntryWidget>walk(setupDisplay, EntryWidget.class::isInstance)) {
if (widget.getNoticeMark() == marker && widget.getEntries().size() > 1) {
- EntryStack<?> stack = CollectionUtils.findFirstOrNullEqualsExact(widget.getEntries(), noticeStack);
- if (stack != null) {
- widget.clearStacks();
- widget.entry(stack);
+ for (EntryStack<?> noticeStack : noticeStacks) {
+ EntryStack<?> stack = CollectionUtils.findFirstOrNullEqualsExact(widget.getEntries(), noticeStack);
+ if (stack != null) {
+ widget.clearStacks();
+ widget.entry(stack);
+ break;
+ }
}
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
index 4361787a4..2d9e3df83 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
@@ -212,7 +212,7 @@ public class CompositeDisplayViewingScreen extends AbstractDisplayViewingScreen
.enabled(categories.size() > tabsPerPage));
this.widgets.add(Widgets.createClickableLabel(new Point(bounds.x + 4 + scrollListBounds.width / 2, bounds.y + 6), categories.get(selectedCategoryIndex).getTitle(), label -> {
- ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addAllCategories().fillPreferredOpenedCategory());
+ ViewSearchBuilder.builder().addAllCategories().open();
}).tooltipLine(I18n.get("text.rei.view_all_categories")).noShadow().color(0xFF404040, 0xFFBBBBBB).hoveredColor(0xFF0041FF, 0xFFFFBD4D));
this.children.addAll(buttonList);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
index 627a18529..dd0088097 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
@@ -93,8 +93,6 @@ public class DefaultDisplayViewingScreen extends AbstractDisplayViewingScreen {
@Nullable
private Panel workingStationsBaseWidget;
private Button recipeBack, recipeNext, categoryBack, categoryNext;
- private EntryStack<?> ingredientStackToNotice = EntryStack.empty();
- private EntryStack<?> resultStackToNotice = EntryStack.empty();
public DefaultDisplayViewingScreen(Map<DisplayCategory<?>, List<Display>> categoriesMap, @Nullable CategoryIdentifier<?> category) {
super(categoriesMap, category, 5);
@@ -196,7 +194,7 @@ public class DefaultDisplayViewingScreen extends AbstractDisplayViewingScreen {
widgets.add(categoryBack = Widgets.createButton(new Rectangle(bounds.getX() + 5, bounds.getY() + 5, 12, 12), new TranslatableComponent("text.rei.left_arrow"))
.onClick(button -> previousCategory()).tooltipLine(new TranslatableComponent("text.rei.previous_category")));
widgets.add(Widgets.createClickableLabel(new Point(bounds.getCenterX(), bounds.getY() + 7), getCurrentCategory().getTitle(), clickableLabelWidget -> {
- ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addAllCategories().fillPreferredOpenedCategory());
+ ViewSearchBuilder.builder().addAllCategories().open();
}).tooltipLine(I18n.get("text.rei.view_all_categories")));
widgets.add(categoryNext = Widgets.createButton(new Rectangle(bounds.getMaxX() - 17, bounds.getY() + 5, 12, 12), new TranslatableComponent("text.rei.right_arrow"))
.onClick(button -> nextCategory()).tooltipLine(new TranslatableComponent("text.rei.next_category")));
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
index 6dea0453d..47c78ca7f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.impl.client.gui.widget;
+import com.google.common.base.Predicates;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -39,7 +40,8 @@ import me.shedaniel.math.impl.PointHelper;
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.REIOverlay;
+import me.shedaniel.rei.api.client.overlay.OverlayListWidget;
+import me.shedaniel.rei.api.client.overlay.ScreenOverlay;
import me.shedaniel.rei.api.client.config.ConfigManager;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.gui.config.EntryPanelOrdering;
@@ -76,9 +78,10 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
@ApiStatus.Internal
-public class EntryListWidget extends WidgetWithBounds {
+public class EntryListWidget extends WidgetWithBounds implements OverlayListWidget {
static final Comparator<? super EntryStack<?>> ENTRY_NAME_COMPARER = Comparator.comparing(stack -> stack.asFormatStrippedText().getString());
static final Comparator<? super EntryStack<?>> ENTRY_GROUP_COMPARER = Comparator.comparingInt(stack -> {
if (stack.getType() == VanillaEntryTypes.ITEM) {
@@ -170,7 +173,7 @@ public class EntryListWidget extends WidgetWithBounds {
ConfigObjectImpl config = ConfigManagerImpl.getInstance().getConfig();
if (config.setEntrySize(config.getEntrySize() + amount * 0.075)) {
ConfigManager.getInstance().saveConfig();
- REIHelper.getInstance().getOverlay().ifPresent(REIOverlay::queueReloadOverlay);
+ REIHelper.getInstance().getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay);
return true;
}
} else if (ConfigObject.getInstance().isEntryListWidgetScrolled()) {
@@ -474,6 +477,35 @@ public class EntryListWidget extends WidgetWithBounds {
return false;
}
+ @Override
+ public EntryStack<?> getFocusedStacK() {
+ Point mouse = PointHelper.ofMouse();
+ if (containsMouse(mouse)) {
+ for (EntryListEntry entry : entries) {
+ EntryStack<?> currentEntry = entry.getCurrentEntry();
+ if (!currentEntry.isEmpty() && entry.containsMouse(mouse)) {
+ return currentEntry.copy();
+ }
+ }
+ }
+ return EntryStack.empty();
+ }
+
+ @Override
+ public Stream<EntryStack<?>> getEntries() {
+ if (ConfigObject.getInstance().isEntryListWidgetScrolled()) {
+ int skip = Math.max(0, Mth.floor(scrolling.scrollAmount / (float) entrySize()));
+ int nextIndex = skip * innerBounds.width / entrySize();
+ return (Stream<EntryStack<?>>) (Stream<? extends EntryStack<?>>) entries.stream()
+ .skip(nextIndex)
+ .filter(entry -> entry.getBounds().y <= this.bounds.getMaxY())
+ .map(EntryWidget::getCurrentEntry)
+ .filter(Predicates.not(EntryStack::isEmpty));
+ } else {
+ return entries.stream().map(EntryWidget::getCurrentEntry);
+ }
+ }
+
private class EntryListEntry extends EntryListEntryWidget {
private EntryListEntry(int x, int y, int entrySize) {
super(new Point(x, y), entrySize);
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 942ebcda4..88f5362e7 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
@@ -391,9 +391,9 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
}
}
if ((ConfigObject.getInstance().getRecipeKeybind().getType() != InputConstants.Type.MOUSE && button == 0) || ConfigObject.getInstance().getRecipeKeybind().matchesMouse(button))
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addRecipesFor(getCurrentEntry()).setOutputNotice(getCurrentEntry()).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addRecipesFor(getCurrentEntry()).open();
else if ((ConfigObject.getInstance().getUsageKeybind().getType() != InputConstants.Type.MOUSE && button == 1) || ConfigObject.getInstance().getUsageKeybind().matchesMouse(button))
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addUsagesFor(getCurrentEntry()).setInputNotice(getCurrentEntry()).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addUsagesFor(getCurrentEntry()).open();
}
return false;
}
@@ -438,9 +438,9 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
}
}
if (ConfigObject.getInstance().getRecipeKeybind().matchesKey(int_1, int_2))
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addRecipesFor(getCurrentEntry()).setOutputNotice(getCurrentEntry()).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addRecipesFor(getCurrentEntry()).open();
else if (ConfigObject.getInstance().getUsageKeybind().matchesKey(int_1, int_2))
- return ClientHelper.getInstance().openView(ViewSearchBuilder.builder().addUsagesFor(getCurrentEntry()).setInputNotice(getCurrentEntry()).fillPreferredOpenedCategory());
+ return ViewSearchBuilder.builder().addUsagesFor(getCurrentEntry()).open();
}
return false;
}
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 8be3e7bfa..8543a83b7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
+++ b/