diff options
Diffstat (limited to 'runtime/src/main/java/me')
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..85 |
