From 19786a47b478f12db10769a39785ebc5e1b95d59 Mon Sep 17 00:00:00 2001 From: Dmitry Proskurin Date: Sun, 2 Feb 2025 18:52:34 +0700 Subject: [PATCH 1/3] Fix No more hidden items in HistoryWidget and crafting tooltip(recipe components). --- .../screen/AbstractDisplayViewingScreen.java | 19 ----------- .../screen/CompositeDisplayViewingScreen.java | 3 +- .../screen/DefaultDisplayViewingScreen.java | 5 +-- .../gui/widget/DisplayTooltipComponent.java | 2 ++ .../favorites/history/DisplayEntry.java | 15 ++++---- .../impl/client/util/SetupDisplayUtils.java | 34 +++++++++++++++++++ 6 files changed, 50 insertions(+), 28 deletions(-) create mode 100644 runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java 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 91e4bc3af..27c29b003 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 @@ -259,25 +259,6 @@ private static void transformNotice(int marker, List } } - @SuppressWarnings("RedundantCast") - protected void transformFiltering(List setupDisplay) { - for (EntryWidget widget : Widgets.walk(setupDisplay, EntryWidget.class::isInstance)) { - if (widget.getEntries().size() > 1) { - Collection> refiltered = EntryRegistry.getInstance().refilterNew(false, widget.getEntries()); - EntryIngredient asEntryIngredient = widget.getEntries() instanceof EntryIngredient ingredient ? ingredient : null; - if (!refiltered.isEmpty() && !widget.getEntries().equals(refiltered)) { - widget.clearStacks(); - EntryIngredient newIngredient = EntryIngredient.of(refiltered); - if (asEntryIngredient != null && (Object) asEntryIngredient.getSetting(EntryIngredientSetting.FOCUS_UUID) instanceof UUID uuid) { - newIngredient.setting(EntryIngredientSetting.FOCUS_UUID, - new UUID(uuid.getMostSignificantBits() ^ refiltered.size(), uuid.getLeastSignificantBits() ^ refiltered.size())); - } - widget.entries(newIngredient); - } - } - } - } - protected static long hashFocusIngredient(EntryIngredient ingredient) { UUID uuid = ingredient.getSetting(EntryIngredientSetting.FOCUS_UUID); if (uuid == null) return System.identityHashCode(ingredient); 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 793903364..0d25eadc3 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 @@ -47,6 +47,7 @@ import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; import me.shedaniel.rei.impl.client.gui.widget.InternalWidgets; +import me.shedaniel.rei.impl.client.util.SetupDisplayUtils; import me.shedaniel.rei.impl.display.DisplaySpec; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -147,7 +148,7 @@ public void init() { setupDisplay.add(Widgets.createLabel(new Point(recipeBounds.getCenterX(), recipeBounds.getCenterY() + 1), Component.literal("Check console for error"))); } setupTags(setupDisplay); - transformFiltering(setupDisplay); + SetupDisplayUtils.TransformFiltering(setupDisplay); transformIngredientNotice(setupDisplay, ingredientStackToNotice); transformResultNotice(setupDisplay, resultStackToNotice); unifyIngredients(setupDisplay); 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 c3593008e..0a8bb73cf 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 @@ -60,6 +60,7 @@ import me.shedaniel.rei.impl.client.gui.toast.ExportRecipeIdentifierToast; import me.shedaniel.rei.impl.client.gui.widget.*; import me.shedaniel.rei.impl.client.gui.widget.basewidgets.PanelWidget; +import me.shedaniel.rei.impl.client.util.SetupDisplayUtils; import me.shedaniel.rei.impl.display.DisplaySpec; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -253,7 +254,7 @@ private void initDisplays() { setupDisplay.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); } setupTags(setupDisplay); - transformFiltering(setupDisplay); + SetupDisplayUtils.TransformFiltering(setupDisplay); transformIngredientNotice(setupDisplay, ingredientStackToNotice); transformResultNotice(setupDisplay, resultStackToNotice); unifyIngredients(setupDisplay); @@ -445,7 +446,7 @@ private boolean checkExportDisplays() { setupDisplay.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); } setupTags(setupDisplay); - transformFiltering(setupDisplay); + SetupDisplayUtils.TransformFiltering(setupDisplay); transformIngredientNotice(setupDisplay, ingredientStackToNotice); transformResultNotice(setupDisplay, resultStackToNotice); unifyIngredients(setupDisplay); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java index 214388dc3..b42524216 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java @@ -35,6 +35,7 @@ import me.shedaniel.rei.api.client.util.MatrixUtils; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; +import me.shedaniel.rei.impl.client.util.SetupDisplayUtils; import me.shedaniel.rei.impl.display.DisplaySpec; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -60,6 +61,7 @@ public DisplayTooltipComponent(DisplaySpec display) { DisplayCategory category = configuration.getCategory(); this.bounds = new Rectangle(0, 0, category.getDisplayWidth(internalDisplay), category.getDisplayHeight()); List widgets = configuration.getView(internalDisplay).setupDisplay(internalDisplay, bounds); + SetupDisplayUtils.TransformFiltering(widgets); this.display = display; this.widgets = widgets; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java index 3c1e08697..0d4826542 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java @@ -41,6 +41,7 @@ import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.impl.client.ClientHelperImpl; import me.shedaniel.rei.impl.client.gui.widget.AutoCraftingEvaluator; +import me.shedaniel.rei.impl.client.util.SetupDisplayUtils; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -124,16 +125,18 @@ private List setupWidgets() { } private List setupDisplay(CategoryRegistry.CategoryConfiguration configuration, Rectangle displayBounds) { + List result = null; try { - return configuration.getView(display).setupDisplay(display, displayBounds); + result = configuration.getView(display).setupDisplay(display, displayBounds); } catch (Throwable throwable) { throwable.printStackTrace(); - List w = new ArrayList<>(); - w.add(Widgets.createRecipeBase(displayBounds).color(0xFFBB0000)); - w.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() - 8), Component.literal("Failed to initiate setupDisplay"))); - w.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); - return w; + result = new ArrayList<>(); + result.add(Widgets.createRecipeBase(displayBounds).color(0xFFBB0000)); + result.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() - 8), Component.literal("Failed to initiate setupDisplay"))); + result.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); } + SetupDisplayUtils.TransformFiltering(result); + return result; } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java new file mode 100644 index 000000000..7fa0f3bd7 --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java @@ -0,0 +1,34 @@ +package me.shedaniel.rei.impl.client.util; + +import me.shedaniel.rei.api.client.gui.widgets.Widgets; +import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.entry.settings.EntryIngredientSetting; +import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; +import net.minecraft.client.gui.components.events.GuiEventListener; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public class SetupDisplayUtils { + @SuppressWarnings("RedundantCast") + public static void TransformFiltering(List setupDisplay) { + for (EntryWidget widget : Widgets.walk(setupDisplay, EntryWidget.class::isInstance)) { + if (widget.getEntries().size() > 1) { + Collection> refiltered = EntryRegistry.getInstance().refilterNew(false, widget.getEntries()); + EntryIngredient asEntryIngredient = widget.getEntries() instanceof EntryIngredient ingredient ? ingredient : null; + if (!refiltered.isEmpty() && !widget.getEntries().equals(refiltered)) { + widget.clearStacks(); + EntryIngredient newIngredient = EntryIngredient.of(refiltered); + if (asEntryIngredient != null && (Object) asEntryIngredient.getSetting(EntryIngredientSetting.FOCUS_UUID) instanceof UUID uuid) { + newIngredient.setting(EntryIngredientSetting.FOCUS_UUID, + new UUID(uuid.getMostSignificantBits() ^ refiltered.size(), uuid.getLeastSignificantBits() ^ refiltered.size())); + } + widget.entries(newIngredient); + } + } + } + } +} From 53a1ab19b66c308b0eb5ab09d85ecef1c750ab42 Mon Sep 17 00:00:00 2001 From: Dmitry Proskurin Date: Tue, 25 Feb 2025 19:55:32 +0700 Subject: [PATCH 2/3] Changes for review Reduce changes in DisplayEntry.setupDisplay. --- .../widget/favorites/history/DisplayEntry.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java index 0d4826542..2521531fd 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java @@ -125,18 +125,18 @@ private List setupWidgets() { } private List setupDisplay(CategoryRegistry.CategoryConfiguration configuration, Rectangle displayBounds) { - List result = null; try { - result = configuration.getView(display).setupDisplay(display, displayBounds); + List widgets = configuration.getView(display).setupDisplay(display, displayBounds); + SetupDisplayUtils.TransformFiltering(widgets); + return widgets; } catch (Throwable throwable) { throwable.printStackTrace(); - result = new ArrayList<>(); - result.add(Widgets.createRecipeBase(displayBounds).color(0xFFBB0000)); - result.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() - 8), Component.literal("Failed to initiate setupDisplay"))); - result.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); + List w = new ArrayList<>(); + w.add(Widgets.createRecipeBase(displayBounds).color(0xFFBB0000)); + w.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() - 8), Component.literal("Failed to initiate setupDisplay"))); + w.add(Widgets.createLabel(new Point(displayBounds.getCenterX(), displayBounds.getCenterY() + 1), Component.literal("Check console for error"))); + return w; } - SetupDisplayUtils.TransformFiltering(result); - return result; } @Override From f49682c0295c0c54ca195eb49239322ea5c70a87 Mon Sep 17 00:00:00 2001 From: Dmitry Proskurin Date: Mon, 17 Mar 2025 12:44:04 +0700 Subject: [PATCH 3/3] Add missing license --- .../impl/client/util/SetupDisplayUtils.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java index 7fa0f3bd7..a243b2981 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/SetupDisplayUtils.java @@ -1,3 +1,26 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package me.shedaniel.rei.impl.client.util; import me.shedaniel.rei.api.client.gui.widgets.Widgets;