aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-12-18 20:24:23 +0800
committershedaniel <daniel@shedaniel.me>2024-04-16 00:38:17 +0900
commite6687c01b254bf903d4895aa0bb631b1679d465c (patch)
treebc94913c98326dfcf4e8ef0e474419bb81698596
parent8f8db7a604a86d17b88a621a18656e0791d87aeb (diff)
downloadRoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.tar.gz
RoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.tar.bz2
RoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.zip
Close #913
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java11
-rwxr-xr-xruntime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json4
6 files changed, 40 insertions, 8 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
index 02afcd7f4..94e119eae 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
@@ -135,6 +135,9 @@ public interface ConfigObject {
*/
boolean isEntryListWidgetScrolled();
+ @ApiStatus.Experimental
+ boolean isHidingEntryPanelIfIdle();
+
/**
* Returns whether REI should append mod names to tooltips.
*
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
index 47f84a7c4..2ef46744b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java
@@ -60,6 +60,7 @@ import java.util.Map;
@ApiStatus.Internal
@Config(name = "roughlyenoughitems/config")
@Environment(EnvType.CLIENT)
+@SuppressWarnings("FieldMayBeFinal")
public class ConfigObjectImpl implements ConfigObject, ConfigData {
@ConfigEntry.Category("basics") @ConfigEntry.Gui.TransitiveObject @DontApplyFieldName
public Basics basics = new Basics();
@@ -140,6 +141,15 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
}
@Override
+ public boolean isHidingEntryPanelIfIdle() {
+ return appearance.hideEntryPanelIfIdle;
+ }
+
+ public void setHidingEntryPanelIfIdle(boolean hideEntryPanelIfIdle) {
+ appearance.hideEntryPanelIfIdle = hideEntryPanelIfIdle;
+ }
+
+ @Override
public boolean shouldAppendModNames() {
return advanced.tooltips.appendModNames;
}
@@ -625,6 +635,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@Comment("Declares the appearance of recipe's border.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
private RecipeBorderType recipeBorder = RecipeBorderType.DEFAULT;
@Comment("Declares whether entry panel is scrolled.") private boolean scrollingEntryListWidget = false;
+ @Comment("Declares whether entry panel should be invisible when not searching") private boolean hideEntryPanelIfIdle = false;
public static class Layout {
@Comment("Declares the position of the search field.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java
index a4926f524..d9e3f2531 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java
@@ -28,6 +28,7 @@ import dev.architectury.platform.Platform;
import dev.architectury.utils.value.BooleanValue;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.client.REIRuntime;
import me.shedaniel.rei.api.client.config.ConfigManager;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry;
@@ -113,6 +114,13 @@ public class CraftableFilterButtonWidget {
entries.add(new SubMenuEntry(Component.translatable("text.rei.config.menu.search_field.input_method"), createInputMethodEntries(access, applicableInputMethods)));
}
+ entries.add(ToggleMenuEntry.of(new TranslatableComponent("text.rei.config.menu.search_field.hide_entry_panel_idle"),
+ config::isHidingEntryPanelIfIdle,
+ hideEntryPanelIfIdle -> {
+ config.setHidingEntryPanelIfIdle(hideEntryPanelIfIdle);
+ REIRuntime.getInstance().getOverlay().orElseThrow().queueReloadSearch();
+ }));
+
return entries;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java
index 0b1bf2662..50fd71d78 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java
@@ -32,6 +32,7 @@ import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.gui.config.EntryPanelOrdering;
import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry;
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry;
+import me.shedaniel.rei.api.client.search.SearchFilter;
import me.shedaniel.rei.api.client.view.Views;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
@@ -67,7 +68,7 @@ public class EntryListSearchManager {
public static final EntryListSearchManager INSTANCE = new EntryListSearchManager();
- private final AsyncSearchManager searchManager = new AsyncSearchManager(((EntryRegistryImpl) EntryRegistry.getInstance())::getPreFilteredComplexList, () -> {
+ private final AsyncSearchManager searchManager = new AsyncSearchManager(EntryListSearchManager::getAllEntriesContextually, () -> {
boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled();
LongSet workingItems = checkCraftable ? new LongOpenHashSet() : null;
if (checkCraftable) {
@@ -78,6 +79,14 @@ public class EntryListSearchManager {
return checkCraftable ? stack -> workingItems.contains(stack.hashExact()) : stack -> true;
}, HashedEntryStackWrapper::normalize);
+ private static List<EntryStack<?>> getAllEntriesContextually(SearchFilter filter) {
+ if (ConfigObject.getInstance().isHidingEntryPanelIfIdle() && filter.getFilter().isEmpty()) {
+ return List.of();
+ }
+
+ return EntryRegistry.getInstance().getPreFilteredList();
+ }
+
public void update(String searchTerm, boolean ignoreLastSearch, Consumer<List</*EntryStack<?> | CollapsedStack*/ Object>> update) {
Stopwatch stopwatch = Stopwatch.createStarted();
if (ignoreLastSearch) searchManager.markDirty();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java
index 8d1f6f056..381831c42 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java
@@ -41,21 +41,18 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.BiConsumer;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
+import java.util.function.*;
public class AsyncSearchManager {
private static final ExecutorService EXECUTOR_SERVICE = new ThreadCreator("REI-AsyncSearchManager").asService(Math.min(3, Runtime.getRuntime().availableProcessors()));
- private final Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider;
+ private final Function<SearchFilter, List<? extends HashedEntryStackWrapper>> stacksProvider;
private final Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier;
private final UnaryOperator<HashedEntryStackWrapper> transformer;
private volatile Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last;
public volatile ExecutorTuple executor;
public volatile SearchFilter filter;
- public AsyncSearchManager(Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) {
+ public AsyncSearchManager(Function<SearchFilter, List<? extends HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) {
this.stacksProvider = stacksProvider;
this.additionalPredicateSupplier = additionalPredicateSupplier;
this.transformer = transformer;
@@ -123,7 +120,7 @@ public class AsyncSearchManager {
Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last;
last = this.last;
return get(this.filter, this.additionalPredicateSupplier.get(), this.transformer,
- this.stacksProvider.get(), last, this, executor, steps)
+ this.stacksProvider.apply(filter), last, this, executor, steps)
.thenApply(entry -> {
this.last = entry;
return entry;
diff --git a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
index 1e3b150fa..54aa533c2 100755
--- a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
+++ b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
@@ -34,6 +34,7 @@
"text.rei.config.menu.config": "More Options...",
"text.rei.config.menu.search_field.position": "Search Field Position...",
"text.rei.config.menu.search_field.input_method": "Input Methods...",
+ "text.rei.config.menu.search_field.hide_entry_panel_idle": "Hide Entries when not Searching",
"category.rei.crafting": "Crafting",
"category.rei.smelting": "Smelting",
"category.rei.smelting.fuel": "Fuel",
@@ -334,6 +335,9 @@
"config.roughlyenoughitems.scrollingEntryListWidget": "Entry List Action:",
"config.roughlyenoughitems.scrollingEntryListWidget.boolean.true": "Scrolled",
"config.roughlyenoughitems.scrollingEntryListWidget.boolean.false": "Paginated",
+ "config.roughlyenoughitems.hideEntryPanelIfIdle": "Entry List When Not Searching:",
+ "config.roughlyenoughitems.hideEntryPanelIfIdle.boolean.true": "Invisible",
+ "config.roughlyenoughitems.hideEntryPanelIfIdle.boolean.false": "Visible",
"config.roughlyenoughitems.horizontalEntriesBoundaries": "Horizontal Entries Boundaries:",
"config.roughlyenoughitems.verticalEntriesBoundaries": "Vertical Entries Boundaries:",
"config.roughlyenoughitems.horizontalEntriesBoundariesColumns": "Entries Columns Limit:",