aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-06-11 00:12:55 +0800
committershedaniel <daniel@shedaniel.me>2023-05-29 20:54:19 +0800
commit68bbe0fa3c663d58599c3c1ebaa7ef2924ede6b6 (patch)
treedec0e0602c93226ef45bbc5e464ef416a6534bad /runtime/src/main/java
parentab3c19e02c5a2636ba7aba7ada84958d89eb168a (diff)
downloadRoughlyEnoughItems-68bbe0fa3c663d58599c3c1ebaa7ef2924ede6b6.tar.gz
RoughlyEnoughItems-68bbe0fa3c663d58599c3c1ebaa7ef2924ede6b6.tar.bz2
RoughlyEnoughItems-68bbe0fa3c663d58599c3c1ebaa7ef2924ede6b6.zip
Add default favorite entries
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java22
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java19
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesEntriesManager.java119
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/listeners/FavoritesRegionListener.java14
8 files changed, 157 insertions, 42 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
index 6cc8e971b..2d400a103 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java
@@ -269,9 +269,6 @@ public class ConfigManagerImpl implements ConfigManager {
@Override
public void saveConfig() {
- if (getConfig().getFavoriteEntries() != null) {
- getConfig().getFavoriteEntries().removeIf(Objects::isNull);
- }
if (getConfig().getFilteringRules().stream().noneMatch(filteringRule -> filteringRule instanceof ManualFilteringRule)) {
getConfig().getFilteringRules().add(new ManualFilteringRule());
}
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 9bc601a44..e547be5f4 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
@@ -363,6 +363,10 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@Override
public List<FavoriteEntry> getFavoriteEntries() {
return basics.favorites;
+ }
+
+ public List<FavoriteEntry> getHiddenFavoriteEntries() {
+ return basics.hiddenFavorites;
}
@Override
@@ -525,6 +529,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
public static class Basics {
@ConfigEntry.Gui.Excluded public List<FavoriteEntry> favorites = new ArrayList<>();
+ @ConfigEntry.Gui.Excluded public List<FavoriteEntry> hiddenFavorites = new ArrayList<>();
@Comment("Declares whether cheating mode is on.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
private CheatingMode cheating = CheatingMode.OFF;
private boolean favoritesEnabled = true;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java
index 82439dd62..45e598625 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/favorites/FavoriteEntryTypeRegistryImpl.java
@@ -34,6 +34,8 @@ import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
import me.shedaniel.rei.api.client.favorites.SystemFavoriteEntryProvider;
import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
import me.shedaniel.rei.api.common.registry.ReloadStage;
+import me.shedaniel.rei.api.common.util.CollectionUtils;
+import me.shedaniel.rei.impl.client.config.ConfigManagerImpl;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import org.apache.commons.lang3.mutable.MutableLong;
@@ -113,8 +115,8 @@ public class FavoriteEntryTypeRegistryImpl implements FavoriteEntryType.Registry
@Override
public void endReload() {
if (ConfigObject.getInstance().isFavoritesEnabled()) {
- List<FavoriteEntry> favorites = ConfigObject.getInstance().getFavoriteEntries();
- favorites.removeIf(FavoriteEntry::isInvalid);
+ ConfigObject.getInstance().getFavoriteEntries().removeIf(FavoriteEntry::isInvalid);
+ ConfigManagerImpl.getInstance().getConfig().getHiddenFavoriteEntries().removeIf(FavoriteEntry::isInvalid);
ConfigManager.getInstance().saveConfig();
}
@@ -122,15 +124,16 @@ public class FavoriteEntryTypeRegistryImpl implements FavoriteEntryType.Registry
private static class SectionImpl implements FavoriteEntryType.Section {
private final Component text;
- private final List<FavoriteEntry> entries = new ArrayList<>();
+ private final List<CompoundEntry> entries = new ArrayList<>();
public SectionImpl(Component text) {
this.text = text;
}
@Override
- public void add(FavoriteEntry... entries) {
- Collections.addAll(this.entries, entries);
+ public void add(boolean defaultFavorited, FavoriteEntry... entries) {
+ this.entries.addAll(CollectionUtils.map(entries,
+ entry -> new CompoundEntry(entry, defaultFavorited)));
}
@Override
@@ -140,7 +143,14 @@ public class FavoriteEntryTypeRegistryImpl implements FavoriteEntryType.Registry
@Override
public List<FavoriteEntry> getEntries() {
- return entries;
+ return CollectionUtils.map(entries, CompoundEntry::entry);
}
+
+ @Override
+ public List<FavoriteEntry> getDefaultEntries() {
+ return CollectionUtils.filterAndMap(entries, CompoundEntry::defaultFavorited, CompoundEntry::entry);
+ }
+
+ public record CompoundEntry(FavoriteEntry entry, boolean defaultFavorited) {}
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
index 516418222..103fe05f5 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
@@ -72,6 +72,7 @@ import me.shedaniel.rei.impl.client.gui.widget.InternalWidgets;
import me.shedaniel.rei.impl.client.gui.widget.LateRenderable;
import me.shedaniel.rei.impl.client.gui.widget.entrylist.EntryListSearchManager;
import me.shedaniel.rei.impl.client.gui.widget.entrylist.EntryListWidget;
+import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesEntriesManager;
import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget;
import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField;
import me.shedaniel.rei.impl.common.util.Weather;
@@ -797,12 +798,7 @@ public class ScreenOverlayImpl extends ScreenOverlay {
return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
- ConfigManager.getInstance().saveConfig();
- FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
- if (favoritesListWidget != null)
- favoritesListWidget.updateSearch();
+ FavoritesEntriesManager.INSTANCE.add(favoriteEntry);
return true;
}
}
@@ -871,12 +867,7 @@ public class ScreenOverlayImpl extends ScreenOverlay {
return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (visible && ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
- ConfigManager.getInstance().saveConfig();
- FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
- if (favoritesListWidget != null)
- favoritesListWidget.updateSearch();
+ FavoritesEntriesManager.INSTANCE.add(favoriteEntry);
return true;
}
}
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 e902711c8..dc442e879 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
@@ -51,6 +51,7 @@ import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.impl.client.REIRuntimeImpl;
import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
+import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesEntriesManager;
import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget;
import me.shedaniel.rei.impl.client.view.ViewsImpl;
import net.minecraft.ChatFormatting;
@@ -512,11 +513,10 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
if (keyCode.matchesMouse(button)) {
FavoriteEntry favoriteEntry = asFavoriteEntry();
if (favoriteEntry != null) {
- if (reverseFavoritesAction())
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- else {
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
+ if (reverseFavoritesAction()) {
+ FavoritesEntriesManager.INSTANCE.remove(favoriteEntry);
+ } else {
+ FavoritesEntriesManager.INSTANCE.add(favoriteEntry);
}
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
@@ -595,11 +595,10 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoriteEntry favoriteEntry = asFavoriteEntry();
if (favoriteEntry != null) {
- if (reverseFavoritesAction())
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- else {
- ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
+ if (reverseFavoritesAction()) {
+ FavoritesEntriesManager.INSTANCE.remove(favoriteEntry);
+ } else {
+ FavoritesEntriesManager.INSTANCE.add(favoriteEntry);
}
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesEntriesManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesEntriesManager.java
new file mode 100644
index 000000000..c235e29ca
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesEntriesManager.java
@@ -0,0 +1,119 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021, 2022 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.gui.widget.favorites;
+
+import me.shedaniel.rei.api.client.config.ConfigManager;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
+import me.shedaniel.rei.api.common.util.CollectionUtils;
+import me.shedaniel.rei.impl.client.config.ConfigManagerImpl;
+import me.shedaniel.rei.impl.client.config.ConfigObjectImpl;
+import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+public class FavoritesEntriesManager {
+ public static final FavoritesEntriesManager INSTANCE = new FavoritesEntriesManager();
+
+ private Stream<FavoriteEntry> getDefaultFavorites() {
+ return StreamSupport.stream(FavoriteEntryType.registry().sections().spliterator(), false)
+ .flatMap(section -> section.getDefaultEntries().stream());
+ }
+
+ public List<FavoriteEntry> getFavorites() {
+ ConfigObjectImpl config = ConfigManagerImpl.getInstance().getConfig();
+ List<FavoriteEntry> defaultFavorites = getDefaultFavorites().collect(Collectors.toList());
+ defaultFavorites.removeAll(config.getHiddenFavoriteEntries());
+
+ List<FavoriteEntry> favorites = new ArrayList<>(config.getFavoriteEntries());
+ defaultFavorites.removeAll(favorites);
+ favorites.addAll(0, defaultFavorites);
+ favorites.removeIf(FavoriteEntry::isInvalid);
+ return favorites;
+ }
+
+ public void remove(FavoriteEntry entry) {
+ ConfigObjectImpl config = ConfigManagerImpl.getInstance().getConfig();
+
+ config.getFavoriteEntries().remove(entry);
+ if (getDefaultFavorites().anyMatch(e -> e.equals(entry)) && !config.getHiddenFavoriteEntries().contains(entry)) {
+ config.getHiddenFavoriteEntries().add(entry);
+ }
+
+ ConfigManager.getInstance().saveConfig();
+ FavoritesListWidget widget = ScreenOverlayImpl.getFavoritesListWidget();
+ if (widget != null) {
+ widget.updateSearch();
+ }
+ }
+
+ public void add(FavoriteEntry entry) {
+ ConfigObjectImpl config = ConfigManagerImpl.getInstance().getConfig();
+ List<FavoriteEntry> defaultFavorites = getDefaultFavorites().toList();
+
+ config.getFavoriteEntries().remove(entry);
+ if (CollectionUtils.anyMatch(defaultFavorites, e -> e.equals(entry)) && !config.getHiddenFavoriteEntries().contains(entry)) {
+ config.getHiddenFavoriteEntries().add(entry);
+ }
+
+ for (int i = defaultFavorites.size() - 1; i >= 0; i--) {
+ FavoriteEntry e = defaultFavorites.get(i);
+ if (!config.getFavoriteEntries().contains(e) && !config.getHiddenFavoriteEntries().contains(e)) {
+ config.getFavoriteEntries().add(0, e);
+ }
+ }
+
+ config.getHiddenFavoriteEntries().remove(entry);
+ if (!CollectionUtils.anyMatch(defaultFavorites, e -> e.equals(entry))) {
+ config.getFavoriteEntries().add(entry);
+ }
+
+ ConfigManager.getInstance().saveConfig();
+ FavoritesListWidget widget = ScreenOverlayImpl.getFavoritesListWidget();
+ if (widget != null) {
+ widget.updateSearch();
+ }
+ }
+
+ public void setEntries(List<FavoriteEntry> entries) {
+ List<FavoriteEntry> defaultFavorites = getDefaultFavorites().collect(Collectors.toList());
+ List<FavoriteEntry> hiddenDefaultFavorites = new ArrayList<>(defaultFavorites);
+ hiddenDefaultFavorites.removeAll(entries);
+ ConfigObjectImpl config = ConfigManagerImpl.getInstance().getConfig();
+ config.getHiddenFavoriteEntries().clear();
+ config.getHiddenFavoriteEntries().addAll(hiddenDefaultFavorites);
+ config.getFavoriteEntries().clear();
+ config.getFavoriteEntries().addAll(entries);
+
+ ConfigManager.getInstance().saveConfig();
+ FavoritesListWidget widget = ScreenOverlayImpl.getFavoritesListWidget();
+ if (widget != null) {
+ widget.updateSearch();
+ }
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
index dc486b3ac..d77bd67d9 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
@@ -281,7 +281,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableCo
public void updateSearch() {
if (ConfigObject.getInstance().isFavoritesEnabled()) {
- region.setEntries(CollectionUtils.map(ConfigObject.getInstance().getFavoriteEntries(), FavoriteEntry::copy), EntryStacksRegionWidget.RemovalMode.DISAPPEAR);
+ region.setEntries(CollectionUtils.map(FavoritesEntriesManager.INSTANCE.getFavorites(), FavoriteEntry::copy), EntryStacksRegionWidget.RemovalMode.DISAPPEAR);
} else region.setEntries(Collections.emptyList(), EntryStacksRegionWidget.RemovalMode.DISAPPEAR);
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/listeners/FavoritesRegionListener.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/listeners/FavoritesRegionListener.java
index 96d1de8c7..ef9a4837f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/listeners/FavoritesRegionListener.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/listeners/FavoritesRegionListener.java
@@ -28,6 +28,7 @@ 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.DraggingContext;
+import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesEntriesManager;
import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget;
import me.shedaniel.rei.impl.client.gui.widget.region.RealRegionEntry;
import me.shedaniel.rei.impl.client.gui.widget.region.RegionEntryWidget;
@@ -37,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FavoritesRegionListener implements RegionListener<FavoriteEntry> {
@@ -47,22 +49,14 @@ public class FavoritesRegionListener implements RegionListener<FavoriteEntry> {
@Override
public void onDrop(Stream<FavoriteEntry> entries) {
if (ConfigObject.getInstance().isFavoritesEnabled()) {
- List<FavoriteEntry> favorites = ConfigObject.getInstance().getFavoriteEntries();
- favorites.clear();
- entries.forEach(entry -> {
- favorites.add(entry.copy());
- });
-
- ConfigManager.getInstance().saveConfig();
+ FavoritesEntriesManager.INSTANCE.setEntries(entries.collect(Collectors.toList()));
}
}
@Override
public void onRemove(RealRegionEntry<FavoriteEntry> entry) {
if (ConfigObject.getInstance().isFavoritesEnabled()) {
- List<FavoriteEntry> favorites = ConfigObject.getInstance().getFavoriteEntries();
- favorites.removeIf(favoriteEntry -> Objects.equals(entry.getEntry(), favoriteEntry));
- ConfigManager.getInstance().saveConfig();
+ FavoritesEntriesManager.INSTANCE.remove(entry.getEntry());
}
}