aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl/common
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-04-16 01:42:49 +0900
committershedaniel <daniel@shedaniel.me>2024-04-16 01:42:49 +0900
commit9bdb9cb7c0a03accb6f86bcedff4b22f38f1346f (patch)
treebc7557eeebd32609fc8b26db28f613e5fd576366 /runtime/src/main/java/me/shedaniel/rei/impl/common
parentf59653ff2a7c3641624928478a3622e6ffd32889 (diff)
parent8981a2f730942e169ba5efa2f25ad3066dc0f797 (diff)
downloadRoughlyEnoughItems-9bdb9cb7c0a03accb6f86bcedff4b22f38f1346f.tar.gz
RoughlyEnoughItems-9bdb9cb7c0a03accb6f86bcedff4b22f38f1346f.tar.bz2
RoughlyEnoughItems-9bdb9cb7c0a03accb6f86bcedff4b22f38f1346f.zip
Merge branch 'feature/12.1' into feature/13.1
# Conflicts: # gradle.properties # runtime/src/main/java/me/shedaniel/rei/impl/client/gui/changelog/ChangelogLoader.java # runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/UncertainDisplayViewingScreen.java # runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java # runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/common')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/EntryIngredientImpl.java67
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/FilteredEntryList.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/PreFilteredEntryList.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java22
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java12
6 files changed, 123 insertions, 11 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/EntryIngredientImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/EntryIngredientImpl.java
index cdf3d911b..56576d276 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/EntryIngredientImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/EntryIngredientImpl.java
@@ -24,10 +24,13 @@
package me.shedaniel.rei.impl.common.entry;
import com.google.common.collect.Iterators;
+import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
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.Internals;
import net.minecraft.nbt.ListTag;
+import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.function.Consumer;
@@ -240,9 +243,37 @@ public enum EntryIngredientImpl implements Internals.EntryIngredientProvider {
public EntryIngredient map(UnaryOperator<EntryStack<?>> transformer) {
return this;
}
+
+ @Nullable
+ @Override
+ public <T> T getSetting(EntryIngredientSetting<T> setting) {
+ return null;
+ }
+
+ @Override
+ public <T> EntryIngredient setting(EntryIngredientSetting<T> setting, T value) {
+ return this;
+ }
}
- private static class SingletonEntryIngredient extends AbstractList<EntryStack<?>> implements EntryIngredient, RandomAccess {
+ private static abstract class AbstractEntryIngredient extends AbstractList<EntryStack<?>> implements EntryIngredient {
+ private Map<EntryIngredientSetting<?>, Object> settings = null;
+
+ @Override
+ @Nullable
+ public <T> T getSetting(EntryIngredientSetting<T> setting) {
+ return SettingsHandler.get(this.settings, setting);
+ }
+
+ @Override
+ public <T> EntryIngredient setting(EntryIngredientSetting<T> setting, T value) {
+ if (value == null) this.settings = SettingsHandler.remove(this.settings, setting);
+ else this.settings = SettingsHandler.set(this.settings, setting, value);
+ return this;
+ }
+ }
+
+ private static class SingletonEntryIngredient extends AbstractEntryIngredient implements EntryIngredient, RandomAccess {
private EntryStack<?> stack;
public SingletonEntryIngredient(EntryStack<?> stack) {
@@ -366,7 +397,7 @@ public enum EntryIngredientImpl implements Internals.EntryIngredientProvider {
}
}
- private static class ArrayIngredient extends AbstractList<EntryStack<?>> implements EntryIngredient, RandomAccess {
+ private static class ArrayIngredient extends AbstractEntryIngredient implements EntryIngredient, RandomAccess {
private static final long serialVersionUID = -2764017481108945198L;
private final EntryStack<?>[] array;
@@ -473,4 +504,36 @@ public enum EntryIngredientImpl implements Internals.EntryIngredientProvider {
return new ArrayIngredient(out);
}
}
+
+ private static class SettingsHandler {
+ private static Map<EntryIngredientSetting<?>, Object> set(Map<EntryIngredientSetting<?>, Object> map, EntryIngredientSetting<?> setting, Object value) {
+ if (map == null) {
+ map = new Reference2ObjectOpenHashMap<>();
+ }
+
+ map.put(setting, value);
+ return map;
+ }
+
+ private static <T> T get(Map<EntryIngredientSetting<?>, Object> map, EntryIngredientSetting<T> setting) {
+ if (map == null) {
+ return null;
+ }
+
+ Object o = map.get(setting);
+ return o == null ? null : (T) o;
+ }
+
+ private static Map<EntryIngredientSetting<?>, Object> remove(Map<EntryIngredientSetting<?>, Object> map, EntryIngredientSetting<?> setting) {
+ if (map == null) {
+ return null;
+ }
+
+ map.remove(setting);
+ if (map.isEmpty()) {
+ return null;
+ }
+ return map;
+ }
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
index 6e463d728..8f27534a4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
@@ -115,11 +115,15 @@ public class EntryRegistryImpl implements EntryRegistry {
@Override
public List<EntryStack<?>> getPreFilteredList() {
- return Collections.unmodifiableList(filteredList.getList());
+ return Collections.unmodifiableList(filteredList.getUnwrappedList());
+ }
+
+ public FilteredEntryList getFilteredList() {
+ return filteredList;
}
public List<HNEntryStackWrapper> getPreFilteredComplexList() {
- return Collections.unmodifiableList(filteredList.getComplexList());
+ return Collections.unmodifiableList(filteredList.getList());
}
public List<HNEntryStackWrapper> getComplexList() {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/FilteredEntryList.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/FilteredEntryList.java
index efe289659..b44c64f26 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/FilteredEntryList.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/FilteredEntryList.java
@@ -38,9 +38,9 @@ public interface FilteredEntryList extends EntryRegistryListener {
void refreshFilteringFor(boolean log, @Nullable Set<FilteringRule<?>> refilterRules, Collection<EntryStack<?>> stacks, @Nullable LongCollection hashes);
- List<EntryStack<?>> getList();
+ List<HNEntryStackWrapper> getList();
- List<HNEntryStackWrapper> getComplexList();
+ List<EntryStack<?>> getUnwrappedList();
boolean isFiltered(EntryStack<?> stack, long hashExact);
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/PreFilteredEntryList.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/PreFilteredEntryList.java
index 3133afb20..78376daa2 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/PreFilteredEntryList.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/PreFilteredEntryList.java
@@ -212,13 +212,13 @@ public class PreFilteredEntryList implements FilteredEntryList {
}
@Override
- public List<EntryStack<?>> getList() {
- return simpleListView;
+ public List<HNEntryStackWrapper> getList() {
+ return listView;
}
@Override
- public List<HNEntryStackWrapper> getComplexList() {
- return listView;
+ public List<EntryStack<?>> getUnwrappedList() {
+ return simpleListView;
}
private class InternalListView extends AbstractList<HNEntryStackWrapper> {
@@ -291,7 +291,18 @@ public class PreFilteredEntryList implements FilteredEntryList {
@Override
public Iterator<EntryStack<?>> iterator() {
- return Iterators.transform(list.iterator(), HNEntryStackWrapper::unwrap);
+ Iterator<HNEntryStackWrapper> iterator = list.iterator();
+ return new Iterator<>() {
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @Override
+ public EntryStack<?> next() {
+ return iterator.next().unwrap();
+ }
+ };
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java
index 50f57d3bc..8256b7c6c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java
@@ -23,10 +23,12 @@
package me.shedaniel.rei.impl.common.entry.type.collapsed;
+import me.shedaniel.rei.api.client.config.entry.EntryStackProvider;
import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.CollectionUtils;
+import me.shedaniel.rei.impl.client.config.collapsible.CollapsibleConfigManager;
import me.shedaniel.rei.impl.common.InternalLogger;
import me.shedaniel.rei.impl.common.util.HashedEntryStackWrapper;
import net.minecraft.network.chat.Component;
@@ -38,6 +40,7 @@ import java.util.stream.Collectors;
public class CollapsibleEntryRegistryImpl implements CollapsibleEntryRegistry {
private final Map<ResourceLocation, Entry> entries = new LinkedHashMap<>();
+ private final List<Entry> customEntries = new ArrayList<>();
@Override
public <T> void group(ResourceLocation id, Component name, List<? extends EntryStack<? extends T>> stacks) {
@@ -70,6 +73,7 @@ public class CollapsibleEntryRegistryImpl implements CollapsibleEntryRegistry {
@Override
public void endReload() {
+ this.recollectCustomEntries();
InternalLogger.getInstance().debug("Registered %d collapsible entry groups: %s", entries.values().size(),
entries.values().stream().map(entry -> entry.getName().getString()).collect(Collectors.joining(", ")));
}
@@ -79,10 +83,28 @@ public class CollapsibleEntryRegistryImpl implements CollapsibleEntryRegistry {
plugin.registerCollapsibleEntries(this);
}
+ public void recollectCustomEntries() {
+ InternalLogger.getInstance().debug("Recollecting custom collapsible entry groups");
+ this.customEntries.clear();
+ for (CollapsibleConfigManager.CustomGroup customEntry : CollapsibleConfigManager.getInstance().getConfig().customGroups) {
+ List<HashedEntryStackWrapper> stacks = CollectionUtils.filterAndMap(customEntry.stacks, EntryStackProvider::isValid, provider -> new HashedEntryStackWrapper(provider.provide()));
+ Entry entry = new Entry(customEntry.id, Component.literal(customEntry.name),
+ new ListMatcher(stacks), false);
+ this.customEntries.add(entry);
+ InternalLogger.getInstance().debug("Added custom collapsible entry group [%s] %s with %d entries", entry.getId(), entry.getName().getString(), stacks.size());
+ }
+ InternalLogger.getInstance().debug("Registered %d custom collapsible entry groups: ", customEntries.size(),
+ customEntries.stream().map(entry -> entry.getName().getString()).collect(Collectors.joining(", ")));
+ }
+
public Collection<Entry> getEntries() {
return entries.values();
}
+ public List<Entry> getCustomEntries() {
+ return customEntries;
+ }
+
public static class Entry {
private final ResourceLocation id;
private final Component name;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java
index 8918ad32d..1e54c1129 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java
@@ -29,6 +29,18 @@ import java.util.Comparator;
import java.util.stream.Stream;
public class RectangleUtils {
+ public static Rectangle inset(Rectangle rectangle, int inset) {
+ return inset(rectangle, inset, inset);
+ }
+
+ public static Rectangle inset(Rectangle rectangle, int insetX, int insetY) {
+ return inset(rectangle, insetX, insetY, insetX, insetY);
+ }
+
+ public static Rectangle inset(Rectangle rectangle, int insetLeft, int insetTop, int insetRight, int insetBottom) {
+ return new Rectangle(rectangle.x + insetLeft, rectangle.y + insetTop, rectangle.width - insetLeft - insetRight, rectangle.height - insetTop - insetBottom);
+ }
+
public static Rectangle excludeZones(Rectangle rectangle, Stream<Rectangle> exclusionZones) {
return exclusionZones
.filter(rect -> rect.intersects(rectangle))